public void GeneralizedEigenvalueDecompositionConstructorTest4()
{
var A = new double[3, 3];
A[0, 0] = 2.6969840958234776;
A[0, 1] = 3.0761868753825254;
A[0, 2] = -1.9236284084262458;
A[1, 0] = -0.09975623250927601;
A[1, 1] = 3.1520214626342158;
A[1, 2] = 2.3928828222643972;
A[2, 0] = 5.2090689722490815;
A[2, 1] = 2.32098631016956;
A[2, 2] = 5.522974475996091;
var B = new double[3, 3];
B[0, 0] = -16.753710484948808;
B[0, 1] = -14.715495544818925;
B[0, 2] = -41.589502695291074;
B[1, 0] = -31.78618974973736;
B[1, 1] = -14.30788463834109;
B[1, 2] = -18.388254830328865;
B[2, 0] = -3.2512542741611838;
B[2, 1] = -18.774698582838617;
B[2, 2] = -1.5640121915210088;
var gevd = new GeneralizedEigenvalueDecomposition(A, B);
var V = gevd.Eigenvectors;
var D = gevd.DiagonalMatrix;
// A*V = B*V*D
var AV = Matrix.Multiply(A, V);
var BVD = Matrix.Multiply(Matrix.Multiply(B, V), D);
Assert.IsTrue(Matrix.IsEqual(AV, BVD, 0.000001));
double[,] expectedVectors =
{
{1, -0.120763598920560, -0.636412048994645},
{-0.942794724207834, -1, -0.363587951005355},
{ -0.0572052757921662, -0.0606762790704327, 1},
};
double[,] expectedValues =
{
{0.186046511627907, 0, 0},
{0, -0.170549605858232, 0},
{ 0, 0, 0.186046511627907}
};
//Assert.IsTrue(Matrix.IsEqual(V, expectedVectors,0.001));
Assert.IsTrue(Matrix.IsEqual(D, expectedValues, 0.00001));
}