java - Apache Commons Math: restricting optimization domain -


i fit quadratic function y = + bx + cx^2 data, in such way c greater or equal 0 in final result. is, restrict search domain on c particular range ([0, double.max_value]). currently, have following code snippet:

final curvefitter<parametric> fitter = new curvefitter<parametric>(new levenbergmarquardtoptimizer());  fitter.addobservedpoint(0, 0); fitter.addobservedpoint(1, -1); fitter.addobservedpoint(-1, -1); fitter.addobservedpoint(2, -4); fitter.addobservedpoint(-2, -4);  final double[] init = { 1, 2, 3 }; final double[] best = fitter.fit(new positivepolynomialfunctionparametric(), init); final polynomialfunction fitted = new polynomialfunction(best);  system.out.println(arrays.tostring(fitted.getcoefficients())); 

where:

private static class positivepolynomialfunctionparametric extends polynomialfunction.parametric {     @override     public double value(double x, double... parameters) {         parameters[parameters.length - 1] = math.abs(parameters[parameters.length - 1]);         return super.value(x, parameters);     }      @override     public double[] gradient(double x, double... parameters) {         parameters[parameters.length - 1] = math.abs(parameters[parameters.length - 1]);         return super.gradient(x, parameters);     } } 

the output makes sense:

[-1.4286835350284688, -8.489786562989103e-17, 1.0300498244514197e-11] 

this seems work in particular application, not elegant solution general case of restricting search domain. there better way this?

you should use 1 of optimizers implements/extends *boundsoptimizer types, or supports simplebounds in optimizationdata. section 12.4 of the user guide on optimization mentions way adjust function being optimized, recommends using 1 of bounds-supporting algorithms instead.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -