public void QrDecompositionConstructorTest()
{
double[][] value =
{
new double[] { 2, -1, 0 },
new double[] { -1, 2, -1 },
new double[] { 0, -1, 2 }
};
var target = new JaggedQrDecomposition(value);
// Decomposition Identity
var Q = target.OrthogonalFactor;
var QQt = Matrix.Multiply(Q, Q.Transpose());
Assert.IsTrue(Matrix.IsEqual(QQt, Matrix.JaggedIdentity(3), 1e-6));
Assert.IsTrue(Matrix.IsEqual(value, target.Reverse(), 1e-6));
// Linear system solving
double[][] B = Matrix.ColumnVector(new double[] { 1, 2, 3 }).ToJagged();
double[][] expected = Matrix.ColumnVector(new double[] { 2.5, 4.0, 3.5 }).ToJagged();
double[][] actual = target.Solve(B);
Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.0000000000001));
}