protected void assertInverseGradient(final ParameterLimitsTransform transform, final double fitParam) { final double eps = 1e-5; final double g = transform.inverseTransformGradient(fitParam); double fdg; final double down = transform.inverseTransform(fitParam - eps); final double up = transform.inverseTransform(fitParam + eps); fdg = (up - down) / 2 / eps; assertEquals(g, fdg, 1e-6); }
protected void assertRoundTrip(final ParameterLimitsTransform transform, final double modelParam) { final double fp = transform.transform(modelParam); final double mp = transform.inverseTransform(fp); assertEquals(modelParam, mp, 1e-8); }
protected void assertReverseRoundTrip(final ParameterLimitsTransform transform, final double fitParam) { final double mp = transform.inverseTransform(fitParam); final double fp = transform.transform(mp); assertEquals(fitParam, fp, 1e-8); }
/** * Transforms from a set of unconstrained fitting parameters to a (possibly larger) set of function parameters (some of which may have constrained range and/or be fixed). * @param fittingParameters The fitting parameters * @return The function parameters */ @Override public DoubleArray inverseTransform(DoubleArray fittingParameters) { ArgChecker.notNull(fittingParameters, "fitting parameters"); ArgChecker.isTrue(fittingParameters.size() == _nFP, "fittingParameter wrong dimension"); double[] modelParameter = new double[_nMP]; for (int i = 0, j = 0; i < _nMP; i++) { if (_freeParameters[i]) { modelParameter[i] = _transforms[i].inverseTransform(fittingParameters.get(j)); j++; } else { modelParameter[i] = _startValues.get(i); } } return DoubleArray.copyOf(modelParameter); }