sascha@2569: package de.intevation.flys.artifacts.math.fitting; sascha@2569: sascha@2744: import org.apache.commons.math.FunctionEvaluationException; sascha@2744: sascha@2569: import org.apache.commons.math.optimization.fitting.ParametricRealFunction; sascha@2569: sascha@2569: import de.intevation.flys.utils.DoubleUtil; sascha@2569: sascha@2569: public abstract class Function sascha@2569: implements ParametricRealFunction sascha@2569: { sascha@2569: protected String name; sascha@2569: protected String description; sascha@2569: protected String [] parameterNames; sascha@2569: protected double [] initialGuess; sascha@2569: sascha@3009: public static abstract class Derivative { sascha@3009: sascha@3009: protected String description; sascha@3009: sascha@3009: public Derivative() { sascha@3009: } sascha@3009: sascha@3009: public Derivative(String description) { sascha@3009: this.description = description; sascha@3009: } sascha@3009: sascha@3009: public String getDescription() { sascha@3009: return description; sascha@3009: } sascha@3009: sascha@3009: public abstract de.intevation.flys.artifacts.math.Function sascha@3009: instantiate(double [] parameters); sascha@3009: sascha@3009: } // interface Derivative sascha@3009: sascha@2569: public Function() { sascha@2569: } sascha@2569: sascha@2569: public Function( sascha@2569: String name, sascha@2569: String description, sascha@2569: String [] parameterNames sascha@2569: ) { sascha@2569: this(name, sascha@2569: description, sascha@2569: parameterNames, sascha@2569: DoubleUtil.fill(parameterNames.length, 1d)); sascha@2569: } sascha@2569: sascha@2569: public Function( sascha@2569: String name, sascha@2569: String description, sascha@2569: String [] parameterNames, sascha@2569: double [] initialGuess sascha@2569: ) { sascha@2569: this.name = name; raimund@2697: this.description = description; sascha@2569: this.parameterNames = parameterNames; sascha@2569: this.initialGuess = initialGuess; sascha@2569: } sascha@2569: sascha@2569: public String getName() { sascha@2569: return name; sascha@2569: } sascha@2569: sascha@2569: public String getDescription() { sascha@2569: return description; sascha@2569: } sascha@2569: sascha@2569: public String [] getParameterNames() { sascha@2569: return parameterNames; sascha@2569: } sascha@2569: sascha@2569: public double [] getInitialGuess() { sascha@2569: return initialGuess; sascha@2569: } sascha@2744: sascha@2744: public de.intevation.flys.artifacts.math.Function instantiate( sascha@2744: final double [] parameters sascha@2744: ) { sascha@2744: return new de.intevation.flys.artifacts.math.Function() { sascha@2744: sascha@2744: @Override sascha@2744: public double value(double x) { sascha@2744: try { sascha@2744: return Function.this.value(x, parameters); sascha@2744: } sascha@2744: catch (FunctionEvaluationException fee) { sascha@2744: return Double.NaN; sascha@2744: } sascha@2744: } sascha@2744: }; sascha@2744: } sascha@3009: sascha@3009: public abstract Derivative getDerivative(); sascha@3177: sascha@3177: public abstract Function getInverse(); sascha@2569: } sascha@2569: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :