@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 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); }
@Test public void multTransA() { DMatrixRMaj A = RandomMatrices_DDRM.rectangle(6,2,-1,1,rand); DMatrixRMaj B = RandomMatrices_DDRM.rectangle(6,4,-1,1,rand); DMatrixRMaj expected = new DMatrixRMaj(1,1); DMatrixRMaj found = new DMatrixRMaj(1,1); CommonOps_DDRM.multTransA(A,B,expected); alg.multTransA(convertA(A),B,found); assertTrue(MatrixFeatures_DDRM.isIdentical(expected,found,UtilEjml.TEST_F64)); }