teichmann@5831: package org.dive4elements.river.artifacts.math.fitting; sascha@3177: sascha@3177: public class InvPow sascha@3177: extends Function sascha@3177: { sascha@3181: public static final Derivative DERIVATIVE = sascha@3181: new Derivative("Q'(W) = ((W-d)/a)^(1/c)/(c*(W-d))") { sascha@3181: sascha@3181: @Override teichmann@5831: public org.dive4elements.river.artifacts.math.Function sascha@3181: instantiate(double [] parameters) sascha@3181: { sascha@3181: double a = parameters[0]; sascha@3181: final double c = parameters[1]; sascha@3181: final double d = parameters[2]; sascha@3181: final double _1a = 1d/a; sascha@3181: final double _1c = 1d/c; sascha@3181: teichmann@5831: return new org.dive4elements.river.artifacts.math.Function() { sascha@3181: @Override sascha@3181: public double value(double W) { sascha@3181: double Wd = W-d; sascha@3181: return Math.pow(Wd*_1a, _1c)/(c*Wd); sascha@3181: } sascha@3181: }; sascha@3181: } sascha@3181: }; sascha@3181: sascha@3177: public static final Function INSTANCE = new InvPow(); sascha@3177: sascha@3177: public InvPow() { sascha@3181: super( sascha@3181: "pow", sascha@3181: "Q(W) = ((W-d)/a)^(1/c)", sascha@3181: new String [] { "a", "c", "d" }); 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 c = parameters[1]; sascha@3181: double d = parameters[2]; sascha@3181: return Math.pow((W-d)/a, 1d/c); 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 c = parameters[1]; sascha@3181: double d = parameters[2]; sascha@3181: double _1c = 1d/c; sascha@3181: double Wdac = Math.pow((W-d)/a, 1d/c); sascha@3181: double Wd = W-d; sascha@3181: return new double [] { sascha@3181: -Wdac/(a*c), sascha@3181: (Wdac*Math.log(Wd/a))/(c*c), sascha@3181: -Wdac/(c*Wd) sascha@3181: }; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public Derivative getDerivative() { sascha@3177: // TODO: Implement me! sascha@3177: return null; sascha@3177: } sascha@3177: sascha@3177: @Override sascha@3177: public Function getInverse() { sascha@3178: return Pow.INSTANCE; sascha@3177: } sascha@3177: } sascha@3177: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :