public void SolveTransposeTest()
{
double[,] a =
{
{ 2, 1, 4 },
{ 6, 2, 2 },
{ 0, 1, 6 },
};
double[,] b =
{
{ 1, 0, 7 },
{ 5, 2, 1 },
{ 1, 5, 2 },
};
double[,] expected =
{
{ 0.5062, 0.2813, 0.0875 },
{ 0.1375, 1.1875, -0.0750 },
{ 0.8063, -0.2188, 0.2875 },
};
Assert.IsTrue(Matrix.IsEqual(expected, new LuDecomposition(b, true).SolveTranspose(a), 1e-3));
Assert.IsTrue(Matrix.IsEqual(expected, new JaggedLuDecomposition(b.ToJagged(), true).SolveTranspose(a.ToJagged()), 1e-3));
var target = new LuDecomposition(b, true);
var p = target.PivotPermutationVector;
int[] idx = p.ArgSort();
var r = target.LowerTriangularFactor.Dot(target.UpperTriangularFactor)
.Submatrix(idx, null).Transpose();
Assert.IsTrue(Matrix.IsEqual(b, r, 1e-3));
Assert.IsTrue(Matrix.IsEqual(b.Transpose(), target.Reverse(), 1e-3));
Assert.IsTrue(Matrix.IsEqual(b.Transpose(), new JaggedLuDecomposition(b.ToJagged(), true).Reverse(), 1e-3));
}