Esempio n. 1
0
        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]);
                }
            }
        }