@Test
public void testComputeValueAndJacobian() {
//setup
final RealVector point = new ArrayRealVector(new double[]{1, 2});
Evaluation evaluation = new LeastSquaresBuilder()
.weight(new DiagonalMatrix(new double[]{16, 4}))
.model(new MultivariateJacobianFunction() {
public Pair<RealVector, RealMatrix> value(RealVector actualPoint) {
//verify correct values passed in
Assert.assertArrayEquals(
point.toArray(), actualPoint.toArray(), Precision.EPSILON);
//return values
return new Pair<RealVector, RealMatrix>(
new ArrayRealVector(new double[]{3, 4}),
MatrixUtils.createRealMatrix(new double[][]{{5, 6}, {7, 8}})
);
}
})
.target(new double[2])
.build()
.evaluate(point);
//action
RealVector residuals = evaluation.getResiduals();
RealMatrix jacobian = evaluation.getJacobian();
//verify
Assert.assertArrayEquals(evaluation.getPoint().toArray(), point.toArray(), 0);
Assert.assertArrayEquals(new double[]{-12, -8}, residuals.toArray(), Precision.EPSILON);
TestUtils.assertEquals(
"jacobian",
jacobian,
MatrixUtils.createRealMatrix(new double[][]{{20, 24},{14, 16}}),