teichmann@5831: package org.dive4elements.river.artifacts.math.fitting; sascha@3100: sascha@3100: public class SQPow sascha@3100: extends Function sascha@3100: { sascha@3100: public static final Derivative DERIVATIVE = sascha@3104: new Derivative("S'(Q) = a*b*Q^(b-1)") { sascha@3100: sascha@3100: @Override teichmann@5831: public org.dive4elements.river.artifacts.math.Function sascha@3100: instantiate(double [] parameters) sascha@3100: { sascha@3100: final double a = parameters[0]; sascha@3100: final double b = parameters[1]; sascha@3100: teichmann@5831: return new org.dive4elements.river.artifacts.math.Function() { sascha@3100: @Override sascha@3100: public double value(double Q) { sascha@3100: return a*b*Math.pow(Q, b-1); sascha@3100: } sascha@3100: }; sascha@3100: } sascha@3100: }; sascha@3100: sascha@3178: public static final Function INSTANCE = new SQPow(); sascha@3178: sascha@3100: public SQPow() { sascha@3100: super( sascha@3100: "sq-pow", sascha@3100: "S(Q) = a*Q^b", sascha@3100: new String [] { "a", "b" }); sascha@3100: } sascha@3100: sascha@3100: @Override sascha@3100: public double value(double x, double [] parameters) { sascha@3100: return parameters[0]*Math.pow(x, parameters[1]); sascha@3100: } sascha@3100: sascha@3100: @Override sascha@3100: public double [] gradient(double q, double [] parameters) { sascha@3100: double a = parameters[0]; sascha@3100: double b = parameters[1]; sascha@3100: double q_b = Math.pow(q, b); sascha@3100: return new double [] { sascha@3100: q_b, sascha@3100: a*q_b*Math.log(q), sascha@3100: }; sascha@3100: } sascha@3100: sascha@3100: @Override sascha@3100: public Derivative getDerivative() { sascha@3100: return DERIVATIVE; sascha@3100: } sascha@3177: sascha@3177: @Override sascha@3177: public Function getInverse() { sascha@3177: return InvSQPow.INSTANCE; sascha@3177: } sascha@3100: } sascha@3100: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :