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");

http://dive4elements.wald.intevation.org