public void InverseTest()
{
double[,] value = // not positive-definite
{
{ 6, -1, 2, 6 },
{ -1, 3, -3, -2 },
{ 2, -3, 2, 0 },
{ 6, -2, 0, 0 },
};
double[,] expected =
{
{ 0.40000, 1.20000, 1.40000, -0.50000 },
{ 1.20000, 3.60000, 4.20000, -2.00000 },
{ 1.40000, 4.20000, 5.40000, -2.50000 },
{ -0.50000, -2.00000, -2.50000, 1.00000 },
};
var chol = new CholeskyDecomposition(value, robust: true);
double[,] L = chol.LeftTriangularFactor;
Assert.IsFalse(chol.IsPositiveDefinite);
double[,] actual = chol.Inverse();
Assert.IsTrue(Matrix.IsEqual(expected, actual, 1e-6));
double[,] inv = Matrix.Inverse(value);
Assert.IsTrue(Matrix.IsEqual(expected, inv, 1e-10));
Assert.IsTrue(Matrix.IsEqual(chol.Reverse(), value, 1e-6));
}