Mercurial > dive4elements > river
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 : |