comparison artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/LogLinear.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
comparison
equal deleted inserted replaced
9642:3987fef69143 9643:58f3fe98fd6b
6 * documentation coming with Dive4Elements River for details. 6 * documentation coming with Dive4Elements River for details.
7 */ 7 */
8 8
9 package org.dive4elements.river.artifacts.math.fitting; 9 package org.dive4elements.river.artifacts.math.fitting;
10 10
11 public class LogLinear 11 public class LogLinear extends AbstractLogLinear {
12 extends Function
13 {
14 public static final Derivative DERIVATIVE =
15 new Derivative("W'(Q) = a*m/(m*Q + b)") {
16 12
17 @Override
18 public org.dive4elements.river.artifacts.math.Function
19 instantiate(double [] parameters)
20 {
21 final double a = parameters[0];
22 final double m = parameters[1];
23 final double b = parameters[2];
24
25 return new org.dive4elements.river.artifacts.math.Function() {
26 @Override
27 public double value(double Q) {
28 return a*m/(m*Q + b);
29 }
30 };
31 }
32 };
33 13
34 public static final Function INSTANCE = new LogLinear(); 14 public static final Function INSTANCE = new LogLinear();
35 15
36 public LogLinear() { 16 public LogLinear() {
37 super( 17 super("log-linear", "W(Q) = a*ln(m*Q + b)");
38 "log-linear",
39 "W(Q) = a*ln(m*Q + b)",
40 new String [] { "a", "m", "b" });
41 }
42
43 @Override
44 public double value(double x, double [] parameters) {
45 return parameters[0]*Math.log(parameters[1]*x + parameters[2]);
46 }
47
48 @Override
49 public double [] gradient(double x, double [] parameters) {
50 double a = parameters[0];
51 double m = parameters[1];
52 double b = parameters[2];
53
54 double lin = m*x + b;
55
56 return new double [] {
57 Math.log(lin),
58 a*x / lin,
59 a / lin
60 };
61 }
62
63 @Override
64 public Derivative getDerivative() {
65 return DERIVATIVE;
66 }
67
68 @Override
69 public Function getInverse() {
70 return InvLogLinear.INSTANCE;
71 } 18 }
72 } 19 }
73 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org