annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/Function.java @ 3177:585c0b49e696

Added inverses of the fitting functions. flys-artifacts/trunk@4792 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 26 Jun 2012 06:33:37 +0000
parents 4dda67a893da
children
rev   line source
2569
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.math.fitting;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
2744
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
3 import org.apache.commons.math.FunctionEvaluationException;
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
4
2569
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import org.apache.commons.math.optimization.fitting.ParametricRealFunction;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 import de.intevation.flys.utils.DoubleUtil;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 public abstract class Function
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 implements ParametricRealFunction
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 protected String name;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 protected String description;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 protected String [] parameterNames;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 protected double [] initialGuess;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
3009
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
17 public static abstract class Derivative {
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
18
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
19 protected String description;
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
20
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
21 public Derivative() {
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
22 }
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
23
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
24 public Derivative(String description) {
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
25 this.description = description;
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
26 }
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
27
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
28 public String getDescription() {
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
29 return description;
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
30 }
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
31
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
32 public abstract de.intevation.flys.artifacts.math.Function
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
33 instantiate(double [] parameters);
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
34
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
35 } // interface Derivative
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
36
2569
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 public Function() {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 public Function(
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 String name,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 String description,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 String [] parameterNames
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 ) {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 this(name,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 description,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 parameterNames,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 DoubleUtil.fill(parameterNames.length, 1d));
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 public Function(
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 String name,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 String description,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 String [] parameterNames,
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 double [] initialGuess
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 ) {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 this.name = name;
2697
8a6ce15ced7f Fixed constructor in class 'Function'.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2569
diff changeset
58 this.description = description;
2569
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 this.parameterNames = parameterNames;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 this.initialGuess = initialGuess;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 public String getName() {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 return name;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 public String getDescription() {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 return description;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 public String [] getParameterNames() {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 return parameterNames;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 public double [] getInitialGuess() {
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 return initialGuess;
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
2744
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
78
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
79 public de.intevation.flys.artifacts.math.Function instantiate(
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
80 final double [] parameters
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
81 ) {
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
82 return new de.intevation.flys.artifacts.math.Function() {
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
83
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
84 @Override
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
85 public double value(double x) {
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
86 try {
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
87 return Function.this.value(x, parameters);
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
88 }
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
89 catch (FunctionEvaluationException fee) {
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
90 return Double.NaN;
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
91 }
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
92 }
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
93 };
c1f2e792704a FixA: Calculate Delta W/t, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2697
diff changeset
94 }
3009
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
95
4dda67a893da FixA: Added the derivatives of all fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2744
diff changeset
96 public abstract Derivative getDerivative();
3177
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3009
diff changeset
97
585c0b49e696 Added inverses of the fitting functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3009
diff changeset
98 public abstract Function getInverse();
2569
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 }
0dd58ab7e118 Added functions to be used for fitting in the "Fixierungsanalyse" and "Extremwertermittlung".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org