@Override protected void functionGradientHessian(DMatrixRMaj x, boolean sameStateAsResiduals, DMatrixRMaj gradient, HessianLeastSquares<S> hessian) { if( !sameStateAsResiduals ) functionResiduals.process(x.data,residuals.data); functionJacobian.process(x.data,jacobian); hessian.updateHessian(jacobian); math.multTransA(jacobian, residuals, gradient); }
@Override protected void functionGradientHessian(DMatrixRMaj x, boolean sameStateAsCost, DMatrixRMaj gradient, HessianLeastSquares<S> hessian) { if( !sameStateAsCost ) functionResiduals.process(x.data,residuals.data); functionJacobian.process(x.data,jacobian); hessian.updateHessian(jacobian); math.multTransA(jacobian, residuals, gradient); }
@Override protected void functionGradientHessian(DMatrixRMaj x, boolean sameStateAsCost, DMatrixRMaj gradient, HessianLeastSquares<S> hessian) { if( !sameStateAsCost ) functionResiduals.process(x.data,residuals.data); functionJacobian.process(x.data,jacobian); hessian.updateHessian(jacobian); math.multTransA(jacobian, residuals, gradient); }
@Override protected void functionGradientHessian(DMatrixRMaj x, boolean sameStateAsResiduals, DMatrixRMaj gradient, HessianLeastSquares<S> hessian) { if( !sameStateAsResiduals ) functionResiduals.process(x.data,residuals.data); functionJacobian.process(x.data,jacobian); hessian.updateHessian(jacobian); math.multTransA(jacobian, residuals, gradient); }
@Test public void updateHessian() { DMatrixRMaj J = RandomMatrices_DDRM.rectangle(30,6,rand); DMatrixRMaj H = new DMatrixRMaj(1,1); CommonOps_DDRM.multTransA(J,J,H); ((HessianLeastSquares)alg).updateHessian(convert(J)); DMatrixRMaj expected = new DMatrixRMaj(6,1); DMatrixRMaj found = expected.createLike(); alg.extractDiagonals(found); CommonOps_DDRM.extractDiag(H,expected); assertTrue(MatrixFeatures_DDRM.isIdentical(expected,found,UtilEjml.TEST_F64)); } }