Example #1
0
        /// <summary>
        /// Calculates the Cholesky factorization of the matrix. Will throw <see cref="IndefiniteMatrixException"/> if the
        /// matrix is not positive definite.
        /// </summary>
        /// <returns></returns>
        public CholeskyPacked FactorCholesky()
        {
            var factor = CholeskyPacked.Factorize(Order, data);

            Definiteness = DefiniteProperty.PositiveDefinite; // An exception would have been thrown otherwise.
            return(factor);
        }
 private static void TestDeterminant(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         CholeskyPacked factorization = A.FactorCholesky();
         double detComputed           = factorization.CalcDeterminant();
         comparer.AssertEqual(SymmPosDef10by10.Determinant, detComputed);
     });
 }
 private static void TestInversion(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         var inverseAExpected             = Matrix.CreateFromArray(SymmPosDef10by10.Inverse);
         CholeskyPacked factorization     = A.FactorCholesky();
         SymmetricMatrix inverseAComputed = factorization.Invert(true);
         comparer.AssertEqual(inverseAExpected, inverseAComputed);
     });
 }
 private static void TestSystemSolution(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A         = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         var b         = Vector.CreateFromArray(SymmPosDef10by10.Rhs);
         var xExpected = Vector.CreateFromArray(SymmPosDef10by10.Lhs);
         CholeskyPacked factorization = A.FactorCholesky();
         Vector xComputed             = factorization.SolveLinearSystem(b);
         comparer.AssertEqual(xExpected, xComputed);
     });
 }
        private static void TestFactorization(LinearAlgebraProviderChoice providers)
        {
            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                // positive definite
                var A1         = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var expectedU1 = Matrix.CreateFromArray(SymmPosDef10by10.FactorU);
                CholeskyPacked factorization1 = A1.FactorCholesky();
                TriangularUpper computedU1    = factorization1.GetFactorU();
                comparer.AssertEqual(expectedU1, computedU1);

                // singular
                var A2 = SymmetricMatrix.CreateFromArray(SquareSingular10by10.Matrix);
                Assert.Throws <IndefiniteMatrixException>(() => A2.FactorCholesky());
            });
        }