teichmann@5831: package org.dive4elements.river.artifacts.math.fitting; sascha@3177: sascha@3177: public class InvLinear sascha@3177: extends Function sascha@3177: { sascha@3177: public static Function INSTANCE = new InvLinear(); sascha@3177: sascha@3177: public static final Derivative DERIVATIVE = sascha@3177: new Derivative("Q'(W) = 1/m") { sascha@3177: sascha@3177: @Override teichmann@5831: public org.dive4elements.river.artifacts.math.Function sascha@3177: instantiate(double [] parameters) sascha@3177: { sascha@3177: final double _1m = 1d/parameters[0]; sascha@3177: teichmann@5831: return new org.dive4elements.river.artifacts.math.Function() { sascha@3177: @Override sascha@3177: public double value(double Q) { sascha@3177: return _1m; sascha@3177: } sascha@3177: }; sascha@3177: } sascha@3177: }; sascha@3177: sascha@3177: public InvLinear() { sascha@3177: super("inv-linear", "W(Q) = (Q-b)/m", new String [] { "m", "b" }); sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public double value(double Q, double [] parameters) { sascha@3177: double m = parameters[0]; sascha@3177: double b = parameters[1]; sascha@3177: return (Q-b)/m; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public double [] gradient(double Q, double [] parameters) { sascha@3177: double m = parameters[0]; sascha@3177: double b = parameters[1]; sascha@3177: return new double [] { sascha@3177: -(Q-b)/(m*m), sascha@3177: -1d/m sascha@3177: }; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public Derivative getDerivative() { sascha@3177: return DERIVATIVE; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public Function getInverse() { sascha@3177: return Linear.INSTANCE; sascha@3177: } sascha@3177: } sascha@3177: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :