Mercurial > dive4elements > river
changeset 9643:58f3fe98fd6b
Fitting new Option UI
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Mon, 02 Dec 2019 14:14:06 +0100 |
parents | 3987fef69143 |
children | 152299dadb36 |
files | artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/AbstractLogLinear.java artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/FunctionFactory.java artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/InvSQPow.java artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinear.java artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinearAlternative.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/FixFunctionSelect.java |
diffstat | 6 files changed, 129 insertions(+), 97 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/AbstractLogLinear.java Mon Dec 02 14:14:06 2019 +0100 @@ -0,0 +1,72 @@ +/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.artifacts.math.fitting; + +/** + * @author Domenico Nardi Tironi + * + */ +/* + * Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +public abstract class AbstractLogLinear extends Function { + public static final Derivative DERIVATIVE = new Derivative("W'(Q) = a*m/(m*Q + b)") { + + @Override + public org.dive4elements.river.artifacts.math.Function instantiate(final double[] parameters) { + final double a = parameters[0]; + final double m = parameters[1]; + final double b = parameters[2]; + + return new org.dive4elements.river.artifacts.math.Function() { + @Override + public double value(final double Q) { + return a * m / (m * Q + b); + } + }; + } + }; + + public AbstractLogLinear(final String name, final String description) { + super(name, description, new String[] { "a", "m", "b" }); + } + + @Override + public final double value(final double x, final double[] parameters) { + return parameters[0] * Math.log(parameters[1] * x + parameters[2]); + } + + @Override + public double[] gradient(final double x, final double[] parameters) { + final double a = parameters[0]; + final double m = parameters[1]; + final double b = parameters[2]; + + final double lin = m * x + b; + + return new double[] { Math.log(lin), a * x / lin, a / lin }; + } + + @Override + public final Derivative getDerivative() { + return DERIVATIVE; + } + + @Override + public Function getInverse() { + return InvLogLinear.INSTANCE; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/FunctionFactory.java Mon Dec 02 14:07:25 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/FunctionFactory.java Mon Dec 02 14:14:06 2019 +0100 @@ -12,18 +12,18 @@ import java.util.LinkedHashMap; import java.util.Map; -public final class FunctionFactory -{ +public final class FunctionFactory { private static FunctionFactory instance; - private Map<String, Function> functions; + private final Map<String, Function> functions; private FunctionFactory() { - functions = new LinkedHashMap<String, Function>(); + this.functions = new LinkedHashMap<>(); registerFunction(Log.INSTANCE); registerFunction(Linear.INSTANCE); registerFunction(LogLinear.INSTANCE); + registerFunction(LogLinearAlternative.INSTANCE); registerFunction(Exp.INSTANCE); registerFunction(Quad.INSTANCE); registerFunction(Pow.INSTANCE); @@ -37,16 +37,16 @@ return instance; } - public Function getFunction(String name) { - return functions.get(name); + public Function getFunction(final String name) { + return this.functions.get(name); } - public void registerFunction(Function function) { - functions.put(function.getName(), function); + public void registerFunction(final Function function) { + this.functions.put(function.getName(), function); } public Collection<Function> getFunctions() { - return functions.values(); + return this.functions.values(); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/InvSQPow.java Mon Dec 02 14:07:25 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/InvSQPow.java Mon Dec 02 14:14:06 2019 +0100 @@ -8,24 +8,19 @@ package org.dive4elements.river.artifacts.math.fitting; -public class InvSQPow -extends Function -{ - public static final Derivative DERIVATIVE = - new Derivative("Q'(S) = (S/a)^(1/b)/(b*S)") { +public class InvSQPow extends Function { + public static final Derivative DERIVATIVE = new Derivative("Q'(S) = (S/a)^(1/b)/(b*S)") { @Override - public org.dive4elements.river.artifacts.math.Function - instantiate(double [] parameters) - { - final double _1a = 1d/parameters[0]; - final double b = parameters[1]; - final double _1b = 1d/b; + public org.dive4elements.river.artifacts.math.Function instantiate(final double[] parameters) { + final double _1a = 1d / parameters[0]; + final double b = parameters[1]; + final double _1b = 1d / b; return new org.dive4elements.river.artifacts.math.Function() { @Override - public double value(double S) { - return Math.pow(S*_1a, _1b)/(b*S); + public double value(final double S) { + return Math.pow(S * _1a, _1b) / (b * S); } }; } @@ -33,30 +28,24 @@ public static final Function INSTANCE = new InvSQPow(); public InvSQPow() { - super( - "inv-sq-pow", - "Q(S) = Q=(S/a)^(1/b)", - new String [] { "a", "b" }); + super("inv-special", "Q(S) = Q=(S/a)^(1/b)", new String[] { "a", "b" }); } @Override - public double value(double S, double [] parameters) { - double a = parameters[0]; - double b = parameters[1]; - return Math.pow(S/a, 1d/b); + public double value(final double S, final double[] parameters) { + final double a = parameters[0]; + final double b = parameters[1]; + return Math.pow(S / a, 1d / b); } @Override - public double [] gradient(double S, double [] parameters) { - double a = parameters[0]; - double b = parameters[1]; - double Sa = S/a; - double _1b = 1d/b; - double eSa1b = Math.pow(Sa, _1b); - return new double [] { - -eSa1b/(a*b), - -(eSa1b*Math.log(Sa))/(b*b) - }; + public double[] gradient(final double S, final double[] parameters) { + final double a = parameters[0]; + final double b = parameters[1]; + final double Sa = S / a; + final double _1b = 1d / b; + final double eSa1b = Math.pow(Sa, _1b); + return new double[] { -eSa1b / (a * b), -(eSa1b * Math.log(Sa)) / (b * b) }; } @Override
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinear.java Mon Dec 02 14:07:25 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinear.java Mon Dec 02 14:14:06 2019 +0100 @@ -8,66 +8,12 @@ package org.dive4elements.river.artifacts.math.fitting; -public class LogLinear -extends Function -{ - public static final Derivative DERIVATIVE = - new Derivative("W'(Q) = a*m/(m*Q + b)") { +public class LogLinear extends AbstractLogLinear { - @Override - public org.dive4elements.river.artifacts.math.Function - instantiate(double [] parameters) - { - final double a = parameters[0]; - final double m = parameters[1]; - final double b = parameters[2]; - - return new org.dive4elements.river.artifacts.math.Function() { - @Override - public double value(double Q) { - return a*m/(m*Q + b); - } - }; - } - }; public static final Function INSTANCE = new LogLinear(); public LogLinear() { - super( - "log-linear", - "W(Q) = a*ln(m*Q + b)", - new String [] { "a", "m", "b" }); - } - - @Override - public double value(double x, double [] parameters) { - return parameters[0]*Math.log(parameters[1]*x + parameters[2]); + super("log-linear", "W(Q) = a*ln(m*Q + b)"); } - - @Override - public double [] gradient(double x, double [] parameters) { - double a = parameters[0]; - double m = parameters[1]; - double b = parameters[2]; - - double lin = m*x + b; - - return new double [] { - Math.log(lin), - a*x / lin, - a / lin - }; - } - - @Override - public Derivative getDerivative() { - return DERIVATIVE; - } - - @Override - public Function getInverse() { - return InvLogLinear.INSTANCE; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinearAlternative.java Mon Dec 02 14:14:06 2019 +0100 @@ -0,0 +1,24 @@ +/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.artifacts.math.fitting; + +/** + * @author Domenico Nardi Tironi + * + */ +public class LogLinearAlternative extends AbstractLogLinear { + + public static final String NAME = "log-linear-alternative"; + public static final Function INSTANCE = new LogLinearAlternative(); + + public LogLinearAlternative() { + super(NAME, "W(Q) = a*ln(m*Q + b) (linearisiert)"); + } +}
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/FixFunctionSelect.java Mon Dec 02 14:07:25 2019 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/FixFunctionSelect.java Mon Dec 02 14:14:06 2019 +0100 @@ -33,6 +33,7 @@ funcDesc.put("log", "W(Q) = m*ln(Q + b)"); funcDesc.put("linear", "W(Q) = m * Q + b"); funcDesc.put("log-linear", "W(Q) = a*ln(m*Q+b)"); + funcDesc.put("log-linear-alternative", "W(Q) = a*ln(m*Q+b) (linearisiert)"); funcDesc.put("exp", "W(Q) = m * a^Q + b"); funcDesc.put("quad", "W(Q) = n*Q^2+m*Q+b"); funcDesc.put("pow", "W(Q) = a * Q^c + d");