public void SingularValueDecompositionConstructorTest4()
{
// Test using SVD assumption auto-correction feature
// without computing the right singular vectors.
double[,] value = new double[,]
{
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
}.Transpose(); // value is 2x4, having less rows than columns.
var target = new SingularValueDecomposition(value, true, false, true);
// Checking values
double[,] U =
{
{ 0.641423027995072, -0.767187395072177 },
{ 0.767187395072177, 0.641423027995072 },
};
// U should be equal despite some sign changes
Assert.IsTrue(Matrix.IsEqual(target.LeftSingularVectors, U, 0.001));
// Checking values
double[,] V =
{
{ 0.0, 0.0 },
{ 0.0, 0.0 },
{ 0.0, 0.0 },
{ 0.0, 0.0 },
};
// V should not have been computed.
Assert.IsTrue(Matrix.IsEqual(target.RightSingularVectors, V));
double[,] S =
{
{ 14.2690954992615, 0.000000000000000 },
{ 0.0000000000000, 0.626828232417543 },
};
// The diagonal values should be equal
Assert.IsTrue(Matrix.IsEqual(target.Diagonal, Matrix.Diagonal(S), 0.001));
}