コード例 #1
0
ファイル: TestCholesky.cs プロジェクト: alandre/SLAE-solver
        public void FactorizationWithZeros4dim()
        {
            int[]    rows     = new int[] { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3 };
            int[]    collumns = new int[] { 0, 1, 0, 1, 2, 1, 2, 3, 2, 3 };
            double[] values   = new double[] { 100, 10,
                                               10, 101, 20,
                                               20, 104, 30,
                                               30, 109 };
            FA = new CoordinationalMatrix(rows, collumns, values, 4);

            IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA);
            var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1, 1 }));

            double[] resultActual = new double[]
            {
                10,
                11,
                12,
                13
            };

            for (int i = 0; i < result.Size; i++)
            {
                Assert.Equal(result[i], resultActual[i], 8);
            }
        }
コード例 #2
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);
            }
        }
コード例 #3
0
ファイル: TestCholesky.cs プロジェクト: alandre/SLAE-solver
        public void Factorization()
        {
            IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA);
            var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 }));

            double[] resultActual = new double[]
            {
                Math.Sqrt(10),
                Math.Sqrt(10) / 10 + 3 * Math.Sqrt(110) / 10,
                Math.Sqrt(10) / 5 + 14 * Math.Sqrt(110) / 165 + 2 * Math.Sqrt(2398) / 33
            };

            for (int i = 0; i < result.Size; i++)
            {
                Assert.Equal(result[i], resultActual[i], 8);
            }
        }
コード例 #4
0
ファイル: TestCholesky.cs プロジェクト: alandre/SLAE-solver
        public void FactorizationDiag()
        {
            int[]    rows     = new int[] { 0, 1, 2 };
            int[]    collumns = new int[] { 0, 1, 2 };
            double[] values   = new double[] { 10, 5, 7 };
            FA = new CoordinationalMatrix(rows, collumns, values, 3);

            IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA);
            var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 }));

            double[] resultActual = new double[]
            {
                Math.Sqrt(10),
                Math.Sqrt(5),
                Math.Sqrt(7)
            };

            for (int i = 0; i < result.Size; i++)
            {
                Assert.Equal(result[i], resultActual[i], 8);
            }
        }
コード例 #5
0
ファイル: TestCholesky.cs プロジェクト: alandre/SLAE-solver
        public void FactorizationWithZeros()
        {
            int[]    rows     = new int[] { 0, 0, 1, 1, 1, 2, 2 };
            int[]    collumns = new int[] { 0, 1, 0, 1, 2, 1, 2 };
            double[] values   = new double[] { 10, 1,
                                               1, 10, 2,
                                               2, 10 };
            FA = new CoordinationalMatrix(rows, collumns, values, 3);

            IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA);
            var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 }));

            double[] resultActual = new double[]
            {
                Math.Sqrt(10),
                Math.Sqrt(10) / 10 + 3 * Math.Sqrt(110) / 10,
                2 * Math.Sqrt(110) / 33 + 5 * Math.Sqrt(418) / 33,
            };

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