public void CheckJacobi()
        {
            double[,] table1 = { { 1, 2 }, { 2, 1 } };
            double[,] table2 =
            {
                { 10.0,   -1,    2,  0 },
                {   -1, 11.0, -1.0,  3 },
                {  2.0, -1.0, 10.0, -1 },
                {    0,    3,   -1,  8 }
            };

            double[] bVector1      = { 1, 1 };
            double[] bVector2      = { 6, 25.0, -11.0, 15 };
            MyMatrix doubleMatrix1 = new MyMatrix(2, 2);
            MyMatrix doubleMatrix2 = new MyMatrix(4, 4);

            doubleMatrix1.ComplementMatrix(table1);
            doubleMatrix2.ComplementMatrix(table2);

            double[] xVector1 = doubleMatrix1.Jacobi(bVector1, 1);
            double[] xVector2 = doubleMatrix2.Jacobi(bVector2, 8);

            double[] expect1 = { 1, 1 };
            double[] expect2 = { 1.0006, 1.9987, -0.9990, 0.9989 };


            Assert.Equal(expect1, xVector1);
            Assert.Equal(expect2[0], Math.Round(xVector2[0], 4));
            Assert.Equal(expect2[1], Math.Round(xVector2[1], 4));
            Assert.Equal(expect2[2], Math.Round(xVector2[2], 4));
            Assert.Equal(expect2[3], Math.Round(xVector2[3], 4));
        }
Exemplo n.º 2
0
        public static double[] ComputeAll()
        {
            Stan[] tableOfStans    = CreateTableOfStans();
            int    numberOfColumns = tableOfStans.Length;

            FillTableOfStans(tableOfStans);

            double[,] tableForMatrix = new double[numberOfColumns, numberOfColumns];
            double[] bVector      = new double[numberOfColumns];
            double[] resultVector = new double[3];

            FillTableForMatrixAndBVectorWithZeros(tableForMatrix, bVector, numberOfColumns);
            FillTableForMatrixWithStans(tableOfStans, numberOfColumns, tableForMatrix, bVector);

            MyMatrix matrix = new MyMatrix(numberOfColumns, numberOfColumns);

            matrix.ComplementMatrix(tableForMatrix);
            matrix.WriteMatrixToFile();
            WriteVectorToFile((double[])bVector.Clone());

            var stopwatch = new Stopwatch();

            stopwatch.Reset();
            stopwatch.Start();
            double[] gVector = matrix.GaussWithRowChoice((double[])bVector.Clone());
            stopwatch.Stop();
            gaussTime       = stopwatch.Elapsed.TotalMilliseconds;
            resultVector[0] = gVector[0];

            stopwatch.Reset();
            stopwatch.Start();
            double[] jVector = matrix.Jacobi((double[])bVector.Clone(), 100);
            stopwatch.Stop();
            jacobiTime      = stopwatch.Elapsed.TotalMilliseconds;
            resultVector[1] = jVector[0];
            stopwatch.Reset();
            stopwatch.Start();
            double[] sVector = matrix.Seidel((double[])bVector.Clone(), 100);
            stopwatch.Stop();
            resultVector[2] = sVector[0];
            seidelTime      = stopwatch.Elapsed.TotalMilliseconds;
            return(resultVector);
        }