# HG changeset patch # User Sascha L. Teichmann # Date 1338481923 0 # Node ID 4dda67a893da23397dc9e1d5c69828be24352e38 # Parent 9e0500d645245835e4724529274defbed0e655fc FixA: Added the derivatives of all fitting functions. flys-artifacts/trunk@4565 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/ChangeLog Thu May 31 16:32:03 2012 +0000 @@ -1,3 +1,17 @@ +2012-05-31 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java: + Added inner class Derivative representing the first derivative of the + function. Can be instantiated with a given set of parameters. + + * src/main/java/de/intevation/flys/artifacts/math/fitting/Log.java, + src/main/java/de/intevation/flys/artifacts/math/fitting/Pow.java, + src/main/java/de/intevation/flys/artifacts/math/fitting/Linear.java, + src/main/java/de/intevation/flys/artifacts/math/fitting/Quad.java, + src/main/java/de/intevation/flys/artifacts/math/fitting/Exp.java, + src/main/java/de/intevation/flys/artifacts/math/fitting/LogLinear.java: + Added the derivatives of all fitting functions. + 2012-05-30 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java: diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Exp.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Exp.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Exp.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,25 @@ public class Exp extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = a^Q*log(a)*m") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double m = parameters[0]; + final double a = parameters[1]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return Math.pow(a, Q)*Math.log(a)*m; + } + }; + } + }; + public Exp() { super( "exp", @@ -23,5 +42,10 @@ 1d }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java Thu May 31 16:32:03 2012 +0000 @@ -14,6 +14,26 @@ protected String [] parameterNames; protected double [] initialGuess; + public static abstract class Derivative { + + protected String description; + + public Derivative() { + } + + public Derivative(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + + public abstract de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters); + + } // interface Derivative + public Function() { } @@ -72,5 +92,7 @@ } }; } + + public abstract Derivative getDerivative(); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Linear.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Linear.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Linear.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,24 @@ public class Linear extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = m") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double m = parameters[0]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return m; + } + }; + } + }; + public Linear() { super("linear", "W(Q) = m*Q + b", new String [] { "m", "b" }); } @@ -16,5 +34,10 @@ public double [] gradient(double x, double [] parameters) { return new double [] { x, 1d }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Log.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Log.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Log.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,25 @@ public class Log extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = m/(Q+b)") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double m = parameters[0]; + final double b = parameters[1]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return m/(Q+b); + } + }; + } + }; + public Log() { super("log", "W(Q) = m*ln(Q + b)", new String [] { "m", "b" }); } @@ -19,5 +38,10 @@ parameters[0]/(x + parameters[0]) }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/LogLinear.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/LogLinear.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/LogLinear.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,26 @@ public class LogLinear extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = a*m/(m*Q + b)") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double a = parameters[0]; + final double m = parameters[1]; + final double b = parameters[2]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return a*m/(m*Q + b); + } + }; + } + }; + public LogLinear() { super( "log-linear", @@ -24,5 +44,10 @@ parameters[0]/l }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Pow.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Pow.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Pow.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,25 @@ public class Pow extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = a*c*Q^(c-1)") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double a = parameters[0]; + final double c = parameters[1]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return a*c*Math.pow(Q, c-1); + } + }; + } + }; + public Pow() { super( "pow", @@ -26,5 +45,10 @@ 1d }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 9e0500d64524 -r 4dda67a893da flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Quad.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Quad.java Wed May 30 17:59:19 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Quad.java Thu May 31 16:32:03 2012 +0000 @@ -3,6 +3,25 @@ public class Quad extends Function { + public static final Derivative DERIVATIVE = + new Derivative("W'(Q) = 2*n*Q+m") { + + @Override + public de.intevation.flys.artifacts.math.Function + instantiate(double [] parameters) + { + final double n = parameters[0]; + final double m = parameters[1]; + + return new de.intevation.flys.artifacts.math.Function() { + @Override + public double value(double Q) { + return 2*n*Q+m; + } + }; + } + }; + public Quad() { super( "quad", @@ -20,5 +39,10 @@ public double [] gradient(double x, double [] parameters) { return new double [] { x*x, x, 1d }; } + + @Override + public Derivative getDerivative() { + return DERIVATIVE; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :