public void SolveTest2()
{
// Example from Lecture notes for MATHS 370: Advanced Numerical Methods
// http://www.math.auckland.ac.nz/~sharp/370/qr-solving.pdf
double[][] value =
{
new double[] { 1, 0, 0 },
new double[] { 1, 7, 49 },
new double[] { 1, 14, 196 },
new double[] { 1, 21, 441 },
new double[] { 1, 28, 784 },
new double[] { 1, 35, 1225 },
};
// Matrices
{
double[][] b =
{
new double[] { 4 },
new double[] { 1 },
new double[] { 0 },
new double[] { 0 },
new double[] { 2 },
new double[] { 5 },
};
double[][] expected =
{
new double[] { 3.9286 },
new double[] { -0.5031 },
new double[] { 0.0153 },
};
var target = new JaggedQrDecomposition(value);
double[][] actual = target.Solve(b);
Assert.IsTrue(Matrix.IsEqual(expected, actual, atol: 1e-4));
Assert.IsTrue(Matrix.IsEqual(value, target.Reverse(), 1e-6));
}
// Vectors
{
double[] b = { 4, 1, 0, 0, 2, 5 };
double[] expected = { 3.9286, -0.5031, 0.0153 };
var target = new JaggedQrDecomposition(value);
double[] actual = target.Solve(b);
Assert.IsTrue(Matrix.IsEqual(expected, actual, atol: 1e-4));
}
}