@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 public void initialize(double[] initial, int numberOfParameters, double minimumFunctionValue) { int M = functionResiduals.getNumOfOutputsM(); int N = functionResiduals.getNumOfInputsN(); residuals.reshape(M,1); // Set the hessian to identity. There are other potentially better methods hessian.init(numberOfParameters); ((ReshapeMatrix)jacobian).reshape(M,N); super.initialize(initial, numberOfParameters, minimumFunctionValue); }
@Override public void initialize(double[] initial, int numberOfParameters, double minimumFunctionValue) { int M = functionResiduals.getNumOfOutputsM(); int N = functionResiduals.getNumOfInputsN(); residuals.reshape(M,1); // Set the hessian to identity. There are other potentially better methods hessian.init(numberOfParameters); ((ReshapeMatrix)jacobian).reshape(M,N); super.initialize(initial, numberOfParameters, minimumFunctionValue); }
@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); }
@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); }
@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)); } }