public void RunTest_ParallelTrianguDiagSummMatrixDecomp() { var domain = new IntegerDomain(); var fractionField = new FractionField <int>(domain); var target = new ParallelTriangDiagSymmMatrixDecomp <Fraction <int> >(fractionField); // Matrix normal var matrix = this.GetDefaulMatrix(domain); Assert.IsTrue(matrix.IsSymmetric(fractionField)); this.TestDecomposition(target, matrix); // Matriz singular matrix = this.GetSingularMatrix(domain); Assert.IsTrue(matrix.IsSymmetric(fractionField)); this.TestDecomposition(target, matrix); }
public void Run_TriangDiagSymmDecompNoInverse() { // Definição dos domínios e fábricas. var integerDomain = new IntegerDomain(); var fractionField = new FractionField <int>(integerDomain); // Definição dos algoritmos. var target = new TriangDiagSymmDecompInverseAlg <Fraction <int> >(); var triangDecomp = new ParallelTriangDiagSymmMatrixDecomp <Fraction <int> >(fractionField); var arraySquareMatrixFactory = new ArraySquareMatrixFactory <Fraction <int> >(); var arrayMatrixFactory = new ArrayMathMatrixFactory <Fraction <int> >(); // A matriz var matrix = this.GetSingularMatrix(integerDomain); // Cálculos var triangDiagDecomp = triangDecomp.Run( matrix); var inverseMatrix = target.Run( triangDiagDecomp, arraySquareMatrixFactory, fractionField); // Verificação dos valores. var expected = ArrayMathMatrix <Fraction <int> > .GetIdentity(3, fractionField); var matrixMultiplication = new MatrixMultiplicationOperation <Fraction <int> >( arrayMatrixFactory, fractionField, fractionField); var actual = matrixMultiplication.Multiply(inverseMatrix, matrix); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { Assert.AreEqual(expected[i, j], actual[i, j]); } } }