public void InverseTest1() { double[,] value = // positive-definite { { 2, -1, 0 }, { -1, 2, -1 }, { 0, -1, 2 } }; var chol = new CholeskyDecomposition(value, robust: false); Assert.IsTrue(chol.IsPositiveDefinite); var L = chol.LeftTriangularFactor; float[][] expected = { new float[] { 0.750f, 0.500f, 0.250f }, new float[] { 0.500f, 1.000f, 0.500f }, new float[] { 0.250f, 0.500f, 0.750f }, }; double[,] actual = chol.Inverse(); Assert.IsTrue(actual.IsEqual(expected, 1e-6)); double[,] inv = chol.Solve(Matrix.Identity(3)); Assert.IsTrue(inv.IsEqual(expected, 1e-6)); }
public void InverseTest() { double[,] value = // not positive-definite { { 6, -1, 2, 6 }, { -1, 3, -3, -2 }, { 2, -3, 2, 0 }, { 6, -2, 0, 0 }, }; CholeskyDecomposition chol = new CholeskyDecomposition(value, true); double[,] L = chol.LeftTriangularFactor; double[,] expected = Matrix.Inverse(value); double[,] actual = chol.Inverse(); Assert.IsTrue(Matrix.IsEqual(expected, actual, 1e-10)); }
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)); }