teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.math.fitting; sascha@3177: sascha@3177: public class InvLog sascha@3177: extends Function sascha@3177: { sascha@3177: public static final Derivative DERIVATIVE = sascha@3177: new Derivative("Q'(W) = exp(W/m)/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 W) { sascha@3177: return Math.exp(W*_1m)*_1m; sascha@3177: } sascha@3177: }; sascha@3177: } sascha@3177: }; sascha@3177: sascha@3177: public static final Function INSTANCE = new InvLog(); sascha@3177: sascha@3177: public InvLog() { sascha@3177: super("inv-log", "Q(W) = e^(W/m) - b", new String [] { "m", "b" }); sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public double value(double w, double [] parameters) { sascha@3177: double m = parameters[0]; sascha@3177: double b = parameters[1]; sascha@3177: return Math.exp(w/m) - b; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public double [] gradient(double w, double [] parameters) { sascha@3177: double m = parameters[0]; sascha@3177: double b = parameters[1]; sascha@3177: double ewm = Math.exp(w/m); sascha@3177: return new double [] { -w*ewm/(m*m), -1 }; 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 Log.INSTANCE; sascha@3177: } sascha@3177: } sascha@3177: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :