public void EigenvalueDecompositionConstructorTest2() { // Asymmetric test double[,] A = { { 5, 2, 1 }, { 1, 4, 1 }, { -1, 2, 3 } }; var target = new EigenvalueDecomposition(A); var D = target.DiagonalMatrix; var Q = target.Eigenvectors; double[,] expectedD = { { 6, 0, 0 }, { 0, 4, 0 }, { 0, 0, 2 } }; // Decomposition identity var actualA = Matrix.Multiply(Matrix.Multiply(Q, D), Q.Inverse()); Assert.IsTrue(Matrix.IsEqual(expectedD, D, 1e-5)); Assert.IsTrue(Matrix.IsEqual(A, actualA, 1e-5)); Assert.IsTrue(Matrix.IsEqual(A, target.Reverse(), 1e-5)); }
public void EigenvalueDecompositionConstructorTest() { // Symmetric test double[,] A = { { 4, 2 }, { 2, 4 } }; var target = new EigenvalueDecomposition(A); var D = target.DiagonalMatrix; var Q = target.Eigenvectors; double[,] expectedD = { { 2, 0 }, { 0, 6 } }; double[,] expectedQ = { { 0.7071, 0.7071 }, { -0.7071, 0.7071 } }; Assert.IsTrue(Matrix.IsEqual(expectedD, D, 0.00001)); Assert.IsTrue(Matrix.IsEqual(expectedQ, Q, 0.0001)); // Decomposition identity var actualA = Matrix.Multiply(Matrix.Multiply(Q, D), Q.Inverse()); Assert.IsTrue(Matrix.IsEqual(expectedD, D, 0.00001)); Assert.IsTrue(Matrix.IsEqual(A, actualA, 0.0001)); Assert.IsTrue(Matrix.IsEqual(A, target.Reverse(), 0.0001)); }