Ejemplo n.º 1
0
        public void ExceptionNonSymmetricMatrix()
        {
            var matrixA = new Matrix(2, 2);

            matrixA[0, 0] = 0;
            matrixA[0, 1] = 1;

            matrixA[1, 0] = 2;
            matrixA[1, 1] = 0;

            var decomposition = new CholeskyDecomposition(matrixA);
        }
Ejemplo n.º 2
0
        public void Simple()
        {
            var matrixA = new Matrix(5, 5);

            //      // [ 2,  1,  1,  3,  2 ]
            //      // [ 1,  2,  2,  1,  1 ]
            //      // [ 1,  2,  9,  1,  5 ]
            //      // [ 3,  1,  1,  7,  1 ]
            //      // [ 2,  1,  5,  1,  8 ]

            matrixA[0, 0] = 2;
            matrixA[0, 1] = 1;
            matrixA[0, 2] = 1;
            matrixA[0, 3] = 3;
            matrixA[0, 4] = 2;

            matrixA[1, 0] = 1;
            matrixA[1, 1] = 2;
            matrixA[1, 2] = 2;
            matrixA[1, 3] = 1;
            matrixA[1, 4] = 1;

            matrixA[2, 0] = 1;
            matrixA[2, 1] = 2;
            matrixA[2, 2] = 9;
            matrixA[2, 3] = 1;
            matrixA[2, 4] = 5;

            matrixA[3, 0] = 3;
            matrixA[3, 1] = 1;
            matrixA[3, 2] = 1;
            matrixA[3, 3] = 7;
            matrixA[3, 4] = 1;

            matrixA[4, 0] = 2;
            matrixA[4, 1] = 1;
            matrixA[4, 2] = 5;
            matrixA[4, 3] = 1;
            matrixA[4, 4] = 8;

            var decomposition = new CholeskyDecomposition(matrixA);

            var AA = decomposition.LeftFactorMatrix * decomposition.RightFactorMatrix;

            Assert.AreEqual(AA.Rows, 5);
            Assert.AreEqual(AA.Columns, 5);

            Assert.IsTrue(matrixA.Equals(AA, DoubleExtensions.DefaultPrecision));
        }
Ejemplo n.º 3
0
        public void Simple()
        {
            var matrixA = new Matrix(5, 5);

            //      // [ 2,  1,  1,  3,  2 ]
            //      // [ 1,  2,  2,  1,  1 ]
            //      // [ 1,  2,  9,  1,  5 ]
            //      // [ 3,  1,  1,  7,  1 ]
            //      // [ 2,  1,  5,  1,  8 ]

            matrixA[0, 0] = 2;
            matrixA[0, 1] = 1;
            matrixA[0, 2] = 1;
            matrixA[0, 3] = 3;
            matrixA[0, 4] = 2;

            matrixA[1, 0] = 1;
            matrixA[1, 1] = 2;
            matrixA[1, 2] = 2;
            matrixA[1, 3] = 1;
            matrixA[1, 4] = 1;

            matrixA[2, 0] = 1;
            matrixA[2, 1] = 2;
            matrixA[2, 2] = 9;
            matrixA[2, 3] = 1;
            matrixA[2, 4] = 5;

            matrixA[3, 0] = 3;
            matrixA[3, 1] = 1;
            matrixA[3, 2] = 1;
            matrixA[3, 3] = 7;
            matrixA[3, 4] = 1;

            matrixA[4, 0] = 2;
            matrixA[4, 1] = 1;
            matrixA[4, 2] = 5;
            matrixA[4, 3] = 1;
            matrixA[4, 4] = 8;

            var matrixB = new Matrix(5, 1);

            matrixB[0, 0] = -2;
            matrixB[1, 0] = 4;
            matrixB[2, 0] = 3;
            matrixB[3, 0] = -5;
            matrixB[4, 0] = 1;

            var decomposition = new CholeskyDecomposition(matrixA);

            var solveMatrix = decomposition.Solve(matrixB);

            Assert.AreEqual(solveMatrix.Rows, 5);
            Assert.AreEqual(solveMatrix.Columns, 1);

            Assert.IsTrue(solveMatrix[0, 0].IsSimilarTo(-629.0 / 98.0));
            Assert.IsTrue(solveMatrix[1, 0].IsSimilarTo(237.0 / 49.0));
            Assert.IsTrue(solveMatrix[2, 0].IsSimilarTo(-53.0 / 49.0));
            Assert.IsTrue(solveMatrix[3, 0].IsSimilarTo(62.0 / 49.0));
            Assert.IsTrue(solveMatrix[4, 0].IsSimilarTo(23.0 / 14.0));
        }
Ejemplo n.º 4
0
        public void Simple()
        {
            var matrixA = new Matrix(5, 5);

            //      // [ 2,  1,  1,  3,  2 ]
            //      // [ 1,  2,  2,  1,  1 ]
            //      // [ 1,  2,  9,  1,  5 ]
            //      // [ 3,  1,  1,  7,  1 ]
            //      // [ 2,  1,  5,  1,  8 ]

            matrixA[0, 0] = 2;
            matrixA[0, 1] = 1;
            matrixA[0, 2] = 1;
            matrixA[0, 3] = 3;
            matrixA[0, 4] = 2;

            matrixA[1, 0] = 1;
            matrixA[1, 1] = 2;
            matrixA[1, 2] = 2;
            matrixA[1, 3] = 1;
            matrixA[1, 4] = 1;

            matrixA[2, 0] = 1;
            matrixA[2, 1] = 2;
            matrixA[2, 2] = 9;
            matrixA[2, 3] = 1;
            matrixA[2, 4] = 5;

            matrixA[3, 0] = 3;
            matrixA[3, 1] = 1;
            matrixA[3, 2] = 1;
            matrixA[3, 3] = 7;
            matrixA[3, 4] = 1;

            matrixA[4, 0] = 2;
            matrixA[4, 1] = 1;
            matrixA[4, 2] = 5;
            matrixA[4, 3] = 1;
            matrixA[4, 4] = 8;

            var decomposition = new CholeskyDecomposition(matrixA);

            var QCMatrix = decomposition.LeftFactorMatrix;

            Assert.AreEqual(QCMatrix.Rows, 5);
            Assert.AreEqual(QCMatrix.Columns, 5);

            Assert.AreEqual(QCMatrix.IsTriangular, TriangularMatrixType.Lower);

            var sqrt2 = Math.Sqrt(2.0);
            var sqrt2inv = 1.0 / sqrt2;

            Assert.IsTrue(QCMatrix[0, 0].IsSimilarTo(sqrt2));

            Assert.IsTrue(QCMatrix[1, 0].IsSimilarTo(sqrt2inv));
            Assert.IsTrue(QCMatrix[1, 1].IsSimilarTo(Math.Sqrt(1.5)));

            Assert.IsTrue(QCMatrix[2, 0].IsSimilarTo(sqrt2inv));
            Assert.IsTrue(QCMatrix[2, 1].IsSimilarTo(Math.Sqrt(1.5)));
            Assert.IsTrue(QCMatrix[2, 2].IsSimilarTo(Math.Sqrt(7.0)));

            Assert.IsTrue(QCMatrix[3, 0].IsSimilarTo(Math.Sqrt(4.5)));
            Assert.IsTrue(QCMatrix[3, 1].IsSimilarTo(-Math.Sqrt(1.0 / 6.0)));
            Assert.IsTrue(QCMatrix[3, 2].IsSimilarTo(0));
            Assert.IsTrue(QCMatrix[3, 3].IsSimilarTo(Math.Sqrt(7.0 / 3.0)));

            Assert.IsTrue(QCMatrix[4, 0].IsSimilarTo(sqrt2));
            Assert.IsTrue(QCMatrix[4, 1].IsSimilarTo(0));
            Assert.IsTrue(QCMatrix[4, 2].IsSimilarTo(4.0 / Math.Sqrt(7.0)));
            Assert.IsTrue(QCMatrix[4, 3].IsSimilarTo(-Math.Sqrt(12.0 / 7.0)));
            Assert.IsTrue(QCMatrix[4, 4].IsSimilarTo(sqrt2));
        }