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