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

Fitting new Option UI
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Mon, 02 Dec 2019 14:14:06 +0100
parents af13ceeba52a
children
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3181
diff changeset
9 package org.dive4elements.river.artifacts.math.fitting;
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
11 public class InvSQPow extends Function {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
12 public static final Derivative DERIVATIVE = new Derivative("Q'(S) = (S/a)^(1/b)/(b*S)") {
3181
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
13
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
14 @Override
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
15 public org.dive4elements.river.artifacts.math.Function instantiate(final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
16 final double _1a = 1d / parameters[0];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
17 final double b = parameters[1];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
18 final double _1b = 1d / b;
3181
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
19
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3181
diff changeset
20 return new org.dive4elements.river.artifacts.math.Function() {
3181
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
21 @Override
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
22 public double value(final double S) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
23 return Math.pow(S * _1a, _1b) / (b * S);
3181
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
24 }
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
25 };
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
26 }
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
27 };
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public static final Function INSTANCE = new InvSQPow();
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 public InvSQPow() {
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
31 super("inv-special", "Q(S) = Q=(S/a)^(1/b)", new String[] { "a", "b" });
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 @Override
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
35 public double value(final double S, final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
36 final double a = parameters[0];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
37 final double b = parameters[1];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
38 return Math.pow(S / a, 1d / b);
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 @Override
9643
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
42 public double[] gradient(final double S, final double[] parameters) {
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
43 final double a = parameters[0];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
44 final double b = parameters[1];
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
45 final double Sa = S / a;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
46 final double _1b = 1d / b;
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
47 final double eSa1b = Math.pow(Sa, _1b);
58f3fe98fd6b Fitting new Option UI
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 5994
diff changeset
48 return new double[] { -eSa1b / (a * b), -(eSa1b * Math.log(Sa)) / (b * b) };
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 @Override
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 public Derivative getDerivative() {
3181
de67497de5a0 Completed inverse functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3178
diff changeset
53 return DERIVATIVE;
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 @Override
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 public Function getInverse() {
3178
59b14bc676ec Fitting: Link the functions to there inverses via getInverse().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3177
diff changeset
58 return SQPow.INSTANCE;
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org