public void JaggedSingularValueDecompositionConstructorTest7()
{
int count = 100;
double[][] value = new double[count][];
double[] output = new double[count];
for (int i = 0; i < count; i++)
{
value[i] = new double[3];
double x = i + 1;
double y = 2 * (i + 1) - 1;
value[i][0] = x;
value[i][1] = y;
value[i][2] = 1;
output[i] = 4 * x - y + 3;
}
var target = new JaggedSingularValueDecomposition(value,
computeLeftSingularVectors: true,
computeRightSingularVectors: true);
{
double[][] expected = value;
double[][] actual = Matrix.Multiply(Matrix.Multiply(target.LeftSingularVectors,
target.DiagonalMatrix),
target.RightSingularVectors.Transpose());
// Checking the decomposition
Assert.IsTrue(Matrix.IsEqual(actual, expected, 1e-8));
}
{
double[] solution = target.Solve(output);
double[] expected = output;
double[] actual = value.Multiply(solution);
Assert.IsTrue(Matrix.IsEqual(actual, expected, 1e-8));
}
}
}