Beispiel #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (V.Count != 0)
            {
                Program.FORM.listBoxMatrix.Items.Clear();
                Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh();

                AMatrix = new int[V.Count, V.Count];
                G.fillAdjacencyMatrix(V.Count, E, AMatrix);
                SqMatrix M = new SqMatrix(AMatrix);
                g = new Graphs(M);

                //----------------------------------

                Program.CHECK.ShowDialog();


                //----------------------------------

                Program.FORM.listBoxMatrix.Items.Clear();
                StreamReader sr = new StreamReader("Информация о графе.txt");
                string       s  = "";
                while (s != null)
                {
                    listBoxMatrix.Items.Add(s);
                    s = sr.ReadLine();
                }
                sr.Close();
                textBox1.Hide();
            }
        }
Beispiel #2
0
        private void показатьРаскраскуГрафаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //пока расположить вершины на окружности
            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            //Vtmp = new List<Vertex>(V);
            //Etmp = new List<Edge>(E);
            //V.Clear();
            //E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            SqMatrix M = new SqMatrix(AMatrix);

            g      = new Graphs(M);
            this.V = new List <Vertex>(g.Ver);

            Vectors v = g.GetColouring();

            for (int i = 0; i < V.Count; i++)
            {
                V[i].color = (int)v[i];
            }

            this.E = new List <Edge>(g.Ed);
            G.drawThisGraph(g);
        }
        private Tuple <Vectors, double, double> HalfSolve(int len)
        {
            SqMatrix iD1 = D1.SubMatrix(len), iD2 = D2.SubMatrix(len), iS = S.SubMatrix(len);
            Vectors  iR1 = R1.SubVector(len), iR2 = R2.SubVector(len);

            SqMatrix iD1m = D1m.SubMatrix(len), iD2m = D2m.SubMatrix(len), idl;
            Vectors  idr;

            idl = (D2 - S * (D1m * S)).SubMatrix(len);
            idr = (R2 + S * D1m * R1).SubVector(len);

            Vectors id = idl.Solve(idr), icnew = (D1m * (R1 + S * id)).SubVector(len);

            Vectors res = Vectors.Union2(icnew, id);

            double p1 = IntegralClass.IntegralCurve((Point y) => (TestFuncAndCurve.Grads[GF - 1](y) * TestFuncAndCurve.Norm[CIRCLE - 1](y)).Sqr(), CIRCLE - 1);
            double p2 = IntegralClass.IntegralCurve((Point y) => (U(y)).Sqr(), CIRCLE - 1);

            Functional fif = (Point x) =>
            {
                double s = 0;
                for (int i = 0; i < id.Deg; i++)
                {
                    s += icnew[i] * alpha(x, i) + id[i] * beta(x, i);
                }
                return(Math.Abs(s - KursMethods.U(x)));
            };
            double L = IntegralClass.Integral(fif, CIRCLE - 1);

            $"len = {len}, L = {this.F(res)}".Show();

            return(new Tuple <Vectors, double, double>(res, F(res), L));
        }
Beispiel #4
0
        private void button5_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName);


                SqMatrix M;
                try
                {
                    M = new SqMatrix(sr);
                }
                catch { M = new SqMatrix((int)firstRowNum.Value); }

                dataGridView1.ColumnCount = M.ColCount;
                dataGridView1.RowCount    = M.ColCount;
                firstRowNum.Value         = M.ColCount;
                for (int i = 0; i < M.ColCount; i++)
                {
                    dataGridView1.Columns[i].Width = 40;
                    for (int j = 0; j < M.ColCount; j++)
                    {
                        dataGridView1.Rows[i].Cells[j].Value = M[i, j];
                    }
                }

                //MessageBox.Show(sr.ReadToEnd());
                sr.Close();
            }
        }
Beispiel #5
0
        /// <summary>
        /// Add one matrix to another.
        /// </summary>
        /// <typeparam name="T">Type of matrix elements.</typeparam>
        /// <param name="first">First matrix.</param>
        /// <param name="second">Second matrix.</param>
        /// <exception cref="ArgumentNullException">Trows if one of matrix is null.</exception>
        /// <returns>Resulted matrix.</returns>
        public static Matrix <T> Add <T>(this Matrix <T> first, Matrix <T> second)
        {
            if (first == null)
            {
                throw new ArgumentNullException(nameof(first));
            }

            if (second == null)
            {
                throw new ArgumentNullException(nameof(second));
            }

            if (first.Rank != second.Rank)
            {
                throw new ArgumentException($"Wrong dimensions of matrix.");
            }

            Matrix <T> temp = new SqMatrix <T>(new T[] { }, first.Rank);

            for (int row = 0; row < temp.Rank; row++)
            {
                for (int column = 0; column < temp.Rank; column++)
                {
                    temp[row, column] = (dynamic)first[row, column] + second[row, column];
                }
            }

            return(ConvertToMatrixType(temp));
        }
Beispiel #6
0
        private void показатьРаскраскуГрафаНаОригинальномИзображенииToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            //Vtmp = new List<Vertex>(V);
            //Etmp = new List<Edge>(E);
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            this.E = new List <Edge>(Etmp);
            this.V = new List <Vertex>(Vtmp);

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);
            Vectors v = g.GetColouring();

            for (int i = 0; i < V.Count; i++)
            {
                V[i].color = (int)v[i];
            }
            G.drawALLGraph(V, E);
        }
Beispiel #7
0
        private void показатьПримерМаксимальногоНезависимогоПодмножестваToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            this.E = new List <Edge>(Etmp);
            this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++)
            {
                V[i].color = 0;
            }

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);

            Vectors p;

            Console.WriteLine();
            Console.WriteLine("Независимые (внутренне устойчивые) подмножества вершин графа (подмножества наибольшей длины - максимальные, любые подмножества этих подмножеств - тоже независимые подмножества):"); g.ShowIndepSubSets();
            Console.WriteLine("Наибольшие независимые подмножества (^наибольшие^ значит, что каждая вершина графа вне этого подмножества смежна вершине в подмножестве):"); g.ShowGreatestIndepSubSets();
            Console.Write("-----------> Число независимости графа = {0}. Вершины максимального множества: ", g.IndependenceNumber(out p));
            p.Show();
            //Vectors v = new Vectors(g.GreatestIndepSubsets[0]);
            for (int i = 0; i < p.Deg; i++)
            {
                V[(int)p[i] - 1].color = 1;
            }
            G.drawALLGraph(V, E);

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }
Beispiel #8
0
        private void показатьПримерМинимальногоДоминирующегоПодмножестваToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            this.E = new List <Edge>(Etmp);
            this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++)
            {
                V[i].color = 0;
            }

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);

            g.DominSub();
            Console.WriteLine("Доминирующие (внешне устойчивые) множества (записано каждое третье):"); g.ShowDominSub(3);
            Console.WriteLine("Минимальные (не содержащие в себе других) доминирующие множества:"); g.ShowMinDominSub();
            Console.WriteLine("Наименьшие (по мощности) доминирующие  множества:"); g.ShowSmallestDominSub();
            Console.WriteLine("-----------> Число доминирования равно {0}", g.DominationNumber);
            Vectors v = new Vectors(g.MinimalDominSubsets[0]);

            for (int i = 0; i < v.Deg; i++)
            {
                V[(int)v[i] - 1].color = 1;
            }
            G.drawALLGraph(V, E);

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }
Beispiel #9
0
        public void AddTest_ValidInput_ValidResult_1()
        {
            var first  = new SqMatrix <int>(Enumerable.Range(1, 9), 3);
            var second = new SqMatrix <int>(Enumerable.Range(1, 9).Reverse(), 3);

            var expected = new SymmMatrix <int>(Enumerable.Repeat(10, 6), 3);

            var actual = first.Add(second);

            Assert.IsTrue(expected.Equals(actual));
        }
Beispiel #10
0
        public void AddTest_ValidInput_ValidResult_2()
        {
            var first  = new SqMatrix <int>(Enumerable.Range(2, 16), 4);
            var second = new SqMatrix <int>(Enumerable.Repeat(5, 16), 4);

            var expected = new SqMatrix <int>(Enumerable.Range(7, 16), 4);

            var actual = first.Add(second);

            Assert.IsTrue(expected.Equals(actual));
        }
Beispiel #11
0
        private void особыеДействияСИзображениемToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);
            if (!save)
            {
                Vtmp = new List <Vertex>(V);
                Etmp = new List <Edge>(E);
                save = true;
            }
        }
        public void InvertMat()
        {
            CSqMatrix mat = new CSqMatrix(new Complex[, ] {
                { 11, 12, 4 },
                { 0, 9, 30 },
                { 40, 5, 3 }
            });
            double n1 = (mat.Invert() * mat - SqMatrix.E(3)).CubeNorm;

            n1.Show();
            double n2 = (mat.InvertSum * mat - SqMatrix.E(3)).CubeNorm;

            n2.Show();
            Assert.IsTrue(n1 <= 1e-6 && n2 <= 1e-6);
        }
Beispiel #13
0
        private void button3_Click(object sender, EventArgs e)
        {
            SqMatrix M = new SqMatrix(dataGridView1.RowCount);

            //if (M == null) M = new SqMatrix();
            for (int i = 0; i < M.RowCount; i++)
            {
                for (int j = 0; j < M.ColCount; j++)
                {
                    M[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);
                }
            }


            Program.FORM.g = new Graphs(M);
            this.Close();
        }
Beispiel #14
0
        private void button3_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            //g.ShowInfoFile();

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);

            //Polynom pol = g.Xpolymon();
            //Console.Write("Хроматический полином: "); pol.Show();
            //Console.WriteLine("Тогда хроматическое число X = {0}", g.ChromaticNumber);
            g.ShowCheck0();
            try
            {
                g.ShowCheck11();
            }
            catch (Exception y) { Console.Write("----------Исключение! "); Console.WriteLine(y.Message); }

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }
Beispiel #15
0
        public static void SqMatrixExamples()
        {
            var mat = new SqMatrix(new double[, ] {
                { 1, -5 }, { -40, 0.632 }
            });

            mat.PrintMatrix();
//  1      -5
//- 40     0,632

            var i = SqMatrix.I(mat.RowCount);

            i.PrintMatrix();
            //1       0
            //0       1

            var mat2 = mat + i * 40;

            mat2.PrintMatrix();
            //41      -5
            //-40     40,632

            var inv = mat.Invertion;

            inv.PrintMatrix();
            //-0,003170017254524297   -0,02507925043136311
            //-0,20063400345090485 - 0,0050158500862726215

            (inv * mat).PrintMatrix();
            //1       0
            //2,7755575615628914E-17  0,9999999999999999


            (inv * mat).Track.Show();             // 2


            (inv * mat).CubeNorm.Show();            // 1

            (inv * mat).Det.Show();                 // 0,9999999999999999

            mat.Solve(new Vectors(4.0, -5)).Show(); // (       0,11271618313871837     -0,7774567633722562     )
        }
Beispiel #16
0
        private void расположитьВершиныНаОкружностиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            //Vtmp = new List<Vertex>(V);
            //Etmp = new List<Edge>(E);
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            SqMatrix M = new SqMatrix(AMatrix);

            g      = new Graphs(M);
            this.V = new List <Vertex>(g.Ver);
            this.E = new List <Edge>(g.Ed);
            G.drawThisGraph(g);
        }
Beispiel #17
0
        private void button6_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            //g.ShowInfoFile();

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);

            g.ShowCheck0();
            try { g.ShowCheck5(); }
            catch (Exception y) { Console.WriteLine(y.Message); }

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }
Beispiel #18
0
        private void нарисоватьДополнениеГрафаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            //Vtmp = new List<Vertex>(V);
            //Etmp = new List<Edge>(E);
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);
            Graphs dg = g.Addition;

            this.V = new List <Vertex>(g.Ver);
            this.E = new List <Edge>(g.Ed);
            G.drawThisGraph(dg);
        }
Beispiel #19
0
        public void SqMatrixTest_AccessByOutOfRangeIndex()
        {
            var first = new SqMatrix <int>(Enumerable.Range(2, 16), 4);

            Assert.Throws <ArgumentException>(() => first[-1, 12] = 0);
        }
Beispiel #20
0
        public void AddTest_WithNullElement()
        {
            var first = new SqMatrix <int>(Enumerable.Range(2, 16), 4);

            Assert.Throws <ArgumentNullException>(() => first.Add(null));
        }
Beispiel #21
0
        private void изобразитьГрафКликToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();
            //Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько...");

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            this.E = new List <Edge>(Etmp);
            this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++)
            {
                V[i].color = 0;
            }

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);
            Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh();
            g.CliquesSub();
            Graphs o = g.CliquesGraph;

            G.drawThisGraph(o);
            Console.WriteLine("Клики графа (вершины, дающие полные подграфы; записан каждый второй):"); Graphs.ShowVectorsList(g.CliquesSubsets, 2);
            Console.WriteLine("Макcимальные (не содержащиеся в других) клики:"); Graphs.ShowVectorsList(g.MaximalCliquesSubsets);
            Console.WriteLine("Наибольшие (по мощности) клики:"); Graphs.ShowVectorsList(g.GreatestCliquesSubsets);
            Console.WriteLine("-----------> Число кликового покрытия равно {0}", g.CliquesNumber);
            //Console.WriteLine("-----------> Рёберная плотность графа равна 2q/(p(p-1) = 2*{0}/({1}*{2}) = {3}", g.Edges, g.p, g.p - 1, g.Density);
            Console.WriteLine("Матрица кликов графа:"); g.CliquesMatrix.PrintMatrix();
            //Console.WriteLine("Матрица смежности графа клик:"); g.CliquesGraph.A.PrintMatrix();
            Vectors v = new Vectors(g.GreatestCliquesSubsets[0]);

            for (int i = 0; i < v.Deg; i++)
            {
                V[(int)v[i] - 1].color = 1;
            }
            //G.drawALLGraph(V, E);

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            Program.FORM.listBoxMatrix.Items.Clear();
            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }
        /// <summary>
        /// Созадть систему матриц и векторов по базисным функция
        /// </summary>
        /// <param name="n">Число базисных функций. Если -1, то берутся все функции</param>
        public BiharmonicEquation(int n = -1)
        {
            if (n == -1)
            {
                n = masPoints.Length;
            }
            D1 = new SqMatrix(n);
            D2 = new SqMatrix(n);
            S  = new SqMatrix(n);
            R1 = new Vectors(n);
            R2 = new Vectors(n);

            Parallel.For(0, n, (int i) =>
            {
                for (int j = i; j < n; j++)
                {
                    D1[i, j] = IntegralClass.IntegralCurve((Point x) => alpha(x, i) * alpha(x, j) + alphanu(x, i) * alphanu(x, j), CIRCLE - 1);
                    D2[i, j] = IntegralClass.IntegralCurve((Point x) => beta(x, i) * beta(x, j) + betanu(x, i) * betanu(x, j), CIRCLE - 1);
                    S[i, j]  = IntegralClass.IntegralCurve((Point x) => alpha(x, i) * beta(x, j) + alphanu(x, i) * betanu(x, j), CIRCLE - 1);
                }
                R1[i] = IntegralClass.IntegralCurve((Point y) => alphanu(y, i) * Unu(y) + alpha(y, i) * U(y), CIRCLE - 1);
                R2[i] = IntegralClass.IntegralCurve((Point y) => betanu(y, i) * Unu(y) + beta(y, i) * U(y), CIRCLE - 1);

                for (int j = i + 1; j < n; j++)
                {
                    D1[j, i] = D1[i, j];
                    D2[j, i] = D2[i, j];
                    S[j, i]  = S[i, j];
                }
            });


            d    = new Vectors(n);
            cnew = new Vectors(n);

            ErrorsMasL = new double[n];
            ErrorsMasQ = new double[n];

            p1 = IntegralClass.IntegralCurve((Point y) => Unu(y).Sqr(), CIRCLE - 1);
            p2 = IntegralClass.IntegralCurve((Point y) => U(y).Sqr(), CIRCLE - 1);

            $"p1 = {p1}, p2 = {p2}".Show();

            var mems = new Memoize <Point, Vectors[]>((Point p) => {
                Vectors[] r = new Vectors[4];
                for (int i = 0; i < 4; i++)
                {
                    r[i] = new Vectors(dim);
                }
                for (int i = 0; i < dim; i++)
                {
                    r[0][i] = alpha(p, i);
                    r[1][i] = alphanu(p, i);
                    r[2][i] = beta(p, i);
                    r[3][i] = betanu(p, i);
                }
                return(r);
            }).Value;
            Func <Point, Vectors[]> AB = (Point p) => mems(p);

            Func <Vectors, double> FF = (Vectors v) =>
            {
                Vectors ce = new Vectors(this.dim);
                Vectors de = new Vectors(this.dim);
                for (int i = 0; i < v.Deg / 2; i++)
                {
                    ce[i] = v[i];
                    de[i] = v[i + v.Deg / 2];
                }

                Functional func = (Point p) => {
                    var vec = AB(p);
                    return((U(p) - ce * vec[0] - de * vec[2]).Sqr() + (Unu(p) - ce * vec[2] - de * vec[3]).Sqr());
                };
                return(IntegralClass.IntegralCurve(func, CIRCLE - 1));

                Functional f1 = (Point y) => {
                    double sum = U(y);
                    for (int i = 0; i < dim; i++)
                    {
                        sum -= ce[i] * alpha(y, i) + de[i] * beta(y, i);
                    }
                    return(sum * sum);
                };
                Functional f2 = (Point y) => {
                    double sum = Unu(y);
                    for (int i = 0; i < dim; i++)
                    {
                        sum -= ce[i] * alphanu(y, i) + de[i] * betanu(y, i);
                    }
                    return(sum * sum);
                };

                return(IntegralClass.IntegralCurve((Point p) => f1(p) + f2(p), CIRCLE - 1));
            };

            F = (Vectors v) =>
            {
                return(FF(v));

                Vectors cc = new Vectors(this.dim);
                Vectors dd = new Vectors(this.dim);
                for (int i = 0; i < v.Deg / 2; i++)
                {
                    cc[i] = v[i];
                    dd[i] = v[i + v.Deg / 2];
                }

                int    k   = this.dim;
                double sum = p1 + p2 - 2 * (cc * R1 + dd * R2);
                for (int i = 0; i < k; i++)
                {
                    for (int j = 0; j < k; j++)
                    {
                        sum += 2 * cc[i] * dd[j] * S[i, j] + cc[i] * cc[j] * D1[i, j] + dd[i] * dd[j] * D2[i, j];
                    }
                }

                return(sum);
            };


            Vectors tmp = Vectors.Union2(new Vectors(dim), Vectors.Random(dim, -4, 4));

            $"Error! {FF(tmp)} != {F(tmp)}".Show();


            //        Parallel.Invoke(
            //() => D1m = D1.Invertion,
            //() => D2m = D2.Invertion
            //);

            //        dl = D2 - S * (D1m * S);
            //        dr = R2 + S * D1m * R1;
            //        slau = new SLAU(dl, dr);
        }
 /// <summary>
 /// Вывести показатели качества обращения матриц
 /// </summary>
 private void NevaskShow()
 {
     $"Невязка D1: {(D1 * D1m - SqMatrix.E(D1.RowCount)).OctNorn}".Show();
     $"Невязка D2: {(D2 * D2m - SqMatrix.E(D1.RowCount)).OctNorn}".Show();
 }
Beispiel #24
0
        private void показатьПримерМинимальногоВершинногоПокрытияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Program.FORM.listBoxMatrix.Items.Clear();
            //Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько...");

            AMatrix = new int[V.Count, V.Count];
            G.fillAdjacencyMatrix(V.Count, E, AMatrix);
            selectButton.Enabled     = true;
            drawVertexButton.Enabled = true;
            drawEdgeButton.Enabled   = true;
            deleteButton.Enabled     = true;
            V.Clear();
            E.Clear();
            G.clearSheet();
            sheet.Image = G.GetBitmap();

            this.E = new List <Edge>(Etmp);
            this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++)
            {
                V[i].color = 0;
            }

            SqMatrix M = new SqMatrix(AMatrix);

            g = new Graphs(M);

            FileStream   fs  = new FileStream("Информация о графе.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);
            Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh();
            g.VCoatingSub();
            Console.WriteLine("Вершинные покрытия графа (записано каждое третье):"); Graphs.ShowVectorsList(g.VCoatingSubsets, 3);
            Console.WriteLine("Минимальные (не содержащие в себе других) вершинные покрытия:"); Graphs.ShowVectorsList(g.MinimalVCoatingSubsets);
            Console.WriteLine("Наименьшие (по мощности) вершинные покрытия:"); g.ShowSmallestVCoatingSub();
            Console.WriteLine("-----------> Число вершинного покрытия равно {0}", g.VCoatingNumber);
            Vectors v = new Vectors(g.MinimalVCoatingSubsets[0]);

            for (int i = 0; i < g.MinimalVCoatingSubsets.Count; i++)
            {
                if (g.MinimalVCoatingSubsets[i].Deg == g.VCoatingNumber)
                {
                    v = new Vectors(g.MinimalVCoatingSubsets[i]);
                    break;
                }
            }

            for (int i = 0; i < v.Deg; i++)
            {
                V[(int)v[i] - 1].color = 1;
            }
            G.drawALLGraph(V, E);

            sw.Close();
            Console.SetOut(tmp);
            Console.WriteLine("Запись завершена!");

            Program.FORM.listBoxMatrix.Items.Clear();
            StreamReader sr = new StreamReader("Информация о графе.txt");
            string       s  = "";

            while (s != null)
            {
                listBoxMatrix.Items.Add(s);
                s = sr.ReadLine();
            }
            sr.Close();
        }