@Test
public void applyHessianScaling() {
MockGaussNewtonBase_F64 alg = new MockGaussNewtonBase_F64();
DMatrixRMaj H = ((HessianMath_DDRM)alg.hessian).getHessian();
H.reshape(4,4);
alg.gradient = RandomMatrices_DDRM.rectangle(4,1,-1,2,rand);
RandomMatrices_DDRM.fillUniform(H,rand);
DMatrixRMaj _g = alg.gradient.copy();
DMatrixRMaj _H = H.copy();
alg.hessianScaling = new DMatrixRMaj(new double[][]{{1},{0.1},{2},{0.6}});
alg.applyHessianScaling();
for (int row = 0; row < 4; row++) {
double expected = _g.get(row,0)/alg.hessianScaling.get(row);
assertEquals(expected, alg.gradient.get(row), UtilEjml.TEST_F64);
for (int col = 0; col < 4; col++) {
expected = _H.get(row,col)/(alg.hessianScaling.get(row)*alg.hessianScaling.get(col));
assertEquals(expected, H.get(row,col), UtilEjml.TEST_F64);
}
}
}