Beispiel #1
0
        public static IFactorization SpawnFactorization(FactorizersEnum factorizer, CoordinationalMatrix M)
        {
            IFactorization factorization;

            switch (factorizer)

            {
            case FactorizersEnum.IncompleteCholesky:
                return(factorization = new IncompleteCholesky(M));

            case FactorizersEnum.IncompleteLU:
                return(factorization = new IncompleteLU(M));

            case FactorizersEnum.IncompleteLUsq:
                return(factorization = new IncompleteLUsq(M));

            case FactorizersEnum.DiagonalFactorization:
                return(factorization = new DioganalFactorization(M));

            case FactorizersEnum.SimpleFactorization:
                return(factorization = new SimpleFactorization(M));

            case FactorizersEnum.WithoutFactorization:
                return(factorization = null);

            default: return(null);
            }
        }
Beispiel #2
0
        public void FactorizeDiagMatrix(FactorizersEnum factorizers)
        {
            //_matrix = new double[3, 3] { { 3, 0, 2 }, // симметричная
            //                             { 0, 5, 0 },
            //                             { 2, 0, 3 } };
            IVector resultActual = new Vector(new double[] { 1, 1, 1, 1, 1 });

            DenseMatrix denseMatrix = DenseMatrixGen.DiagonalMatrix(5);//   new DenseMatrix(_matrix);
            Vector      x0          = new Vector(new double[] { 0, 0, 0, 0, 0 });
            IVector     b           = denseMatrix.Multiply(resultActual);

            var result = loggingSolver.Solve(denseMatrix, x0, b, Factorizer: FactorizersFactory.SpawnFactorization(factorizers, denseMatrix.ConvertToCoordinationalMatrix()));

            for (int i = 0; i < 5; i++)
            {
                _testOutputHelper.WriteLine(
                    denseMatrix[i, 0].ToString() + " " +
                    denseMatrix[i, 1].ToString() + " " +
                    denseMatrix[i, 2].ToString() + " " +
                    denseMatrix[i, 3].ToString() + " " +
                    denseMatrix[i, 4].ToString());
            }


            _testOutputHelper.WriteLine("");

            foreach (var elem in result)
            {
                _testOutputHelper.WriteLine(elem.ToString());
            }

            for (int i = 0; i < resultActual.Size; i++)
            {
                Assert.Equal(result[i], resultActual[i], 8);
            }
        }