public void EigenvalueDecompositionConstructorTest()
{
// Symmetric test
double[][] A =
{
new double[] { 4, 2 },
new double[] { 2, 4 }
};
var target = new JaggedEigenvalueDecomposition(A);
var D = target.DiagonalMatrix;
var Q = target.Eigenvectors;
double[][] expectedD =
{
new double[] { 2, 0 },
new double[] { 0, 6 }
};
double[][] expectedQ =
{
new double[] { 0.7071, 0.7071 },
new double[] { -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));
}