annotate artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/AbstractLogLinear.java @ 9643:58f3fe98fd6b

Fitting new Option UI
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Mon, 02 Dec 2019 14:14:06 +0100
parents
children
rev   line source
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
2 * Software engineering by
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
5 *
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
9 */
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
10 package org.dive4elements.river.artifacts.math.fitting;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
11
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
12 /**
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
13 * @author Domenico Nardi Tironi
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
14 *
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
15 */
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
16 /*
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
17 * Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
18 * Software engineering by Intevation GmbH
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
19 * This file is Free Software under the GNU AGPL (>=v3)
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
20 * and comes with ABSOLUTELY NO WARRANTY! Check out the
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
21 * documentation coming with Dive4Elements River for details.
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
22 */
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
23
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
24 public abstract class AbstractLogLinear extends Function {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
25 public static final Derivative DERIVATIVE = new Derivative("W'(Q) = a*m/(m*Q + b)") {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
26
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
27 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
28 public org.dive4elements.river.artifacts.math.Function instantiate(final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
29 final double a = parameters[0];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
30 final double m = parameters[1];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
31 final double b = parameters[2];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
32
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
33 return new org.dive4elements.river.artifacts.math.Function() {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
34 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
35 public double value(final double Q) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
36 return a * m / (m * Q + b);
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
37 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
38 };
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
39 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
40 };
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
41
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
42 public AbstractLogLinear(final String name, final String description) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
43 super(name, description, new String[] { "a", "m", "b" });
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
44 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
45
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
46 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
47 public final double value(final double x, final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
48 return parameters[0] * Math.log(parameters[1] * x + parameters[2]);
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
49 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
50
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
51 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
52 public double[] gradient(final double x, final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
53 final double a = parameters[0];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
54 final double m = parameters[1];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
55 final double b = parameters[2];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
56
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
57 final double lin = m * x + b;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
58
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
59 return new double[] { Math.log(lin), a * x / lin, a / lin };
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
60 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
61
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
62 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
63 public final Derivative getDerivative() {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
64 return DERIVATIVE;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
65 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
66
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
67 @Override
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
68 public Function getInverse() {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
69 return InvLogLinear.INSTANCE;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
70 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
71 }
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents:
diff changeset
72 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org