/** * Compares the passed in gradient function to a numerical calculation. Comparison is done using * an absolute value. * @return true for within tolerance and false otherwise */ public static boolean gradientR( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol ) { return gradient(func, gradient, param, tol, Math.sqrt(UtilEjml.EPS)); }
public static <S extends DMatrix> boolean jacobian( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { return jacobian(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
public static <S extends DMatrix> void jacobianPrint(FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { jacobianPrint(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
numerical.process(param,expected); checkJacobianShape( found, expected);
/** * Checks the jacobian using a relative error threshold. * @param tol fractional difference */ public static <S extends DMatrix> boolean jacobianR( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { return jacobianR(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
/** * Prints out the difference using a relative error threshold * @param tol fractional difference */ public static <S extends DMatrix> void jacobianPrintR( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { jacobianPrintR(func, jacobian, param, tol, Math.sqrt(UtilEjml.EPS)); }
numerical.process(param,expected); checkJacobianShape( found, expected);
/** * Checks the jacobian using a relative error threshold. * @param tol fractional difference */ public static <S extends DMatrix> boolean jacobianR( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { return jacobianR(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
/** * Prints out the difference using a relative error threshold * @param tol fractional difference */ public static <S extends DMatrix> void jacobianPrintR( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { jacobianPrintR(func, jacobian, param, tol, Math.sqrt(UtilEjml.EPS)); }
/** * Compares the passed in gradient function to a numerical calculation. Comparison is done using * an absolute value. * @return true for within tolerance and false otherwise */ public static boolean gradient( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol ) { return gradient(func, gradient, param, tol, Math.sqrt(UtilEjml.EPS)); }
numerical.process(param,expected); checkJacobianShape((S) found, expected);
public static <S extends DMatrix> void jacobianPrint(FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { jacobianPrint(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
public static <S extends DMatrix> boolean jacobian( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol ) { return jacobian(func,jacobian,param,tol,Math.sqrt(UtilEjml.EPS)); }
/** * Compares the passed in gradient function to a numerical calculation. Comparison is done using * an absolute value. * @return true for within tolerance and false otherwise */ public static boolean gradientR( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol ) { return gradient(func, gradient, param, tol, Math.sqrt(UtilEjml.EPS)); }
numerical.process(param,expected); checkJacobianShape((S) found, expected);
/** * Compares the passed in gradient function to a numerical calculation. Comparison is done using * an absolute value. * @return true for within tolerance and false otherwise */ public static boolean gradient( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol ) { return gradient(func, gradient, param, tol, Math.sqrt(UtilEjml.EPS)); }
numerical.process(param, expected); checkJacobianShape((S) found, expected);
@Test public void gradient() { SimpleS f = new SimpleS(); SimpleGradient g = new SimpleGradient(); assertTrue(DerivativeChecker.gradient(f,g,new double[]{2,4.5},1e-5)); }
numerical.process(param, expected); checkJacobianShape((S) found, expected);
public static <S extends DMatrix> boolean jacobian( FunctionNtoM func , FunctionNtoMxN<S> jacobian , double param[] , double tol , double differenceScale ) { NumericalJacobianForward_DDRM numerical = new NumericalJacobianForward_DDRM(func,differenceScale); if( numerical.getNumOfOutputsM() != jacobian.getNumOfOutputsM() ) throw new RuntimeException("M is not equal "+numerical.getNumOfOutputsM()+" "+jacobian.getNumOfOutputsM()); if( numerical.getNumOfInputsN() != jacobian.getNumOfInputsN() ) throw new RuntimeException("N is not equal: "+numerical.getNumOfInputsN()+" "+jacobian.getNumOfInputsN()); S found = jacobian.declareMatrixMxN(); DMatrixRMaj expected = new DMatrixRMaj(func.getNumOfOutputsM(),func.getNumOfInputsN()); jacobian.process(param,found); numerical.process(param,expected); checkJacobianShape(found, expected); return MatrixFeatures_D.isIdentical(expected,found,tol); }