@Override public U apply(T params) { return ParameterizedFunction.this.evaluate(x, params); } };
@Test public void testCubic() { final double[] parms = new double[] {3.0, -1.0, 1.0, 1.0 }; assertEquals(13.0, ARRAY_PARAMS.evaluate(2.0, parms), 0.0); final Function<Double, Double> func = ARRAY_PARAMS.asFunctionOfArguments(parms); assertEquals(4.0, func.apply(-1.0), 0.0); final Function<double[], Double> param_func = ARRAY_PARAMS.asFunctionOfParameters(0.0); assertEquals(10.0, param_func.apply(new double[] {10, 312, 423, 534 }), 0.0); }
Function<Double, DoubleArray> paramsSenseAnal = parmSense.asFunctionOfArguments(params);
@Test public void testSin() { final DoubleArray parms = DoubleArray.of(-1.0, 0.5); assertEquals(-Math.sin(1.0), VECTOR_PARAMS.evaluate(2.0, parms), 0.0); final Function<Double, Double> func = VECTOR_PARAMS.asFunctionOfArguments(parms); assertEquals(1.0, func.apply(-Math.PI), 0.0); final ScalarFirstOrderDifferentiator diff = new ScalarFirstOrderDifferentiator(); final Function<Double, Double> grad = diff.differentiate(func); assertEquals(-0.5, grad.apply(0.0), 1e-8); final Function<DoubleArray, Double> params_func = VECTOR_PARAMS.asFunctionOfParameters(1.0); final ScalarFieldFirstOrderDifferentiator vdiff = new ScalarFieldFirstOrderDifferentiator(); final Function<DoubleArray, DoubleArray> vgrad = vdiff.differentiate(params_func); final DoubleArray res = vgrad.apply(DoubleArray.of(Math.PI, 0)); assertEquals(0.0, res.get(0), 1e-8); assertEquals(Math.PI, res.get(1), 1e-8); } }
final Function<DoublesPair, DoubleArray> paramsSenseAnal = parmSense.asFunctionOfArguments(params);
@Override public U apply(S x) { return ParameterizedFunction.this.evaluate(x, params); } };
@Override public DoubleArray apply(DoubleArray theta) { return DoubleArray.of(x.size(), i -> func.evaluate(x.get(i), theta)); } };
@Override public DoubleArray apply(DoubleArray theta) { return DoubleArray.of(x.size(), i -> func.evaluate(x.get(i), theta)); } };
@Override public DoubleMatrix apply(DoubleArray theta) { int m = x.size(); double[][] res = new double[m][]; for (int i = 0; i < m; i++) { DoubleArray temp = grad.evaluate(x.get(i), theta); res[i] = temp.toArray(); } return DoubleMatrix.copyOf(res); } };
@SuppressWarnings("synthetic-access") @Override public DoubleMatrix apply(final DoubleArray a) { final int n = X.size(); final int m = a.size(); final double[][] res = new double[n][m]; for (int i = 0; i < n; i++) { final DoubleArray temp = PARAM_GRAD.evaluate(X.get(i), a); ArgChecker.isTrue(m == temp.size()); for (int j = 0; j < m; j++) { res[i][j] = temp.get(j); } } return DoubleMatrix.copyOf(res); } };