numerical.process(param,expected);
numerical.process(param,expected);
public static boolean gradient( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol , double differenceScale ) { NumericalGradientForward numerical = new NumericalGradientForward(func,differenceScale); if( numerical.getN() != gradient.getN() ) throw new RuntimeException("N is not equal: "+numerical.getN() +" "+gradient.getN()); int N = numerical.getN(); double[] found = new double[N]; double[] expected = new double[N]; gradient.process(param, found); numerical.process(param,expected); for (int i = 0; i < N; i++) { if(Math.abs(found[i]-expected[i]) > tol) return false; } return true; }
public static boolean gradient( FunctionNtoS func , FunctionNtoN gradient , double param[] , double tol , double differenceScale ) { NumericalGradientForward numerical = new NumericalGradientForward(func,differenceScale); if( numerical.getN() != gradient.getN() ) throw new RuntimeException("N is not equal: "+numerical.getN() +" "+gradient.getN()); int N = numerical.getN(); double[] found = new double[N]; double[] expected = new double[N]; gradient.process(param, found); numerical.process(param,expected); for (int i = 0; i < N; i++) { if(Math.abs(found[i]-expected[i]) > tol) return false; } return true; }
@Test public void simple() { // give it a function where one variable does not effect the output // to make the test more interesting SimpleFunction f = new SimpleFunction(); NumericalGradientForward alg = new NumericalGradientForward(f); double output[] = new double[]{1,1,1}; alg.process(new double[]{2,3,7},output); assertEquals(3, output[0], 1e-5); assertEquals(-36, output[1], 1e-5); assertEquals(0, output[2], 1e-5); }