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));
}