public void CholeskyDecompositionConstructorTest4()
{
// Based on tests by Ken Johnson
float[][] value = // positive-definite
{
new float[] { 2f, 0f, 0f },
new float[] { -1f, 2f, 0f },
new float[] { 0f, -1f, 2f }
};
float[][] expected =
{
new float[] { 1.4142f, 0.0000f, 0.0000f },
new float[] { -0.7071f, 1.2247f, 0.0000f },
new float[] { 0.0000f, -0.8165f, 1.1547f }
};
var chol = new JaggedCholeskyDecompositionF(value, robust: false, valueType: MatrixType.LowerTriangular);
float[][] L = chol.LeftTriangularFactor;
Assert.IsTrue(Matrix.IsEqual(L, expected, 0.0001f));
Assert.AreEqual(4, chol.Determinant, 1e-6);
Assert.IsTrue(chol.IsPositiveDefinite);
var reverse = chol.Reverse();
Assert.IsTrue(Matrix.IsEqual(reverse, value.GetSymmetric(MatrixType.LowerTriangular), 1e-6f));
float[][] expected2 =
{
new float[] { 1.0f, 0.0f, 0.0f },
new float[] { -0.5f, 1.0f, 0.0f },
new float[] { 0.0f, -0.6666667f, 1.0f }
};
chol = new JaggedCholeskyDecompositionF(value, robust: true, valueType: MatrixType.LowerTriangular);
L = chol.LeftTriangularFactor;
Assert.IsTrue(Matrix.IsEqual(L, expected2, 0.0001f));
Assert.AreEqual(4, chol.Determinant, 1e-6);
Assert.IsTrue(chol.IsPositiveDefinite);
reverse = chol.Reverse();
Assert.IsTrue(Matrix.IsEqual(reverse, value.GetSymmetric(MatrixType.LowerTriangular), 1e-6f));
}