A * X = I
public void InverseTestNaN() { int n = 5; var I = Matrix.Identity(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double[,] value = Matrix.Magic(n); value[i, j] = double.NaN; var target = new QrDecomposition(value); var solution = target.Solve(I); var inverse = target.Inverse(); Assert.IsTrue(Matrix.IsEqual(solution, inverse)); } } }
public void InverseTest() { double[,] value = { { 2, -1, 0 }, { -1, 2, -1 }, { 0, -1, 2 } }; double[,] expected = { { 0.7500, 0.5000, 0.2500}, { 0.5000, 1.0000, 0.5000}, { 0.2500, 0.5000, 0.7500}, }; QrDecomposition target = new QrDecomposition(value); double[,] actual = target.Inverse(); Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.0000000000001)); target = new QrDecomposition(value.Transpose(), true); actual = target.Inverse(); Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.0000000000001)); }