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)); }
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); }