public void SolveTransposeTest()
{
double[][] a =
{
new double[] { 2, 1, 4 },
new double[] { 6, 2, 2 },
new double[] { 0, 1, 6 },
};
double[][] b =
{
new double[] { 1, 0, 7 },
new double[] { 5, 2, 1 },
new double[] { 1, 5, 2 },
};
double[][] expected =
{
new double[] { 0.5062, 0.2813, 0.0875 },
new double[] { 0.1375, 1.1875, -0.0750 },
new double[] { 0.8063, -0.2188, 0.2875 },
};
double[][] actual = new JaggedQrDecomposition(b, true).SolveTranspose(a);
Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.001));
var bX = b.Dot(expected);
var Xb = expected.Dot(b);
Assert.IsTrue(Matrix.IsEqual(Xb, a, atol: 1e-3));
Assert.IsFalse(Matrix.IsEqual(bX, a, atol: 1e-3));
double[,] actualMatrix = new QrDecomposition(b.ToMatrix(), true).SolveTranspose(a.ToMatrix());
Assert.IsTrue(Matrix.IsEqual(expected, actualMatrix, 0.001));
}
}