/// <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()); }); }