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