Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/fitting/InvQuad.java @ 3181:de67497de5a0
Completed inverse functions.
flys-artifacts/trunk@4796 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 26 Jun 2012 10:54:12 +0000 |
parents | 59b14bc676ec |
children |
comparison
equal
deleted
inserted
replaced
3180:4d5b15049ac2 | 3181:de67497de5a0 |
---|---|
1 package de.intevation.flys.artifacts.math.fitting; | 1 package de.intevation.flys.artifacts.math.fitting; |
2 | 2 |
3 public class InvQuad | 3 public class InvQuad |
4 extends Function | 4 extends Function |
5 { | 5 { |
6 public static final Derivative DERIVATIVE = | |
7 new Derivative("Q'(W) = 1/sqrt(4*n*(W-b)+m^2)") { | |
8 | |
9 @Override | |
10 public de.intevation.flys.artifacts.math.Function | |
11 instantiate(double [] parameters) | |
12 { | |
13 double n = parameters[0]; | |
14 double m = parameters[1]; | |
15 final double b = parameters[2]; | |
16 final double n4 = 4d*n; | |
17 final double mm = m*m; | |
18 | |
19 return new de.intevation.flys.artifacts.math.Function() { | |
20 @Override | |
21 public double value(double W) { | |
22 return 1d/Math.sqrt(n4*(W-b)+mm); | |
23 } | |
24 }; | |
25 } | |
26 }; | |
27 | |
6 public static final Function INSTANCE = new InvQuad(); | 28 public static final Function INSTANCE = new InvQuad(); |
7 | 29 |
8 public InvQuad() { | 30 public InvQuad() { |
9 // TODO: Implement me! | 31 super( |
32 "inv-quad", | |
33 "(sqrt(4*n*W-4*b*n+m^2)-m)/(2*n)", | |
34 new String [] { "n", "m", "b" }); | |
10 } | 35 } |
11 | 36 |
12 @Override | 37 @Override |
13 public double value(double W, double [] parameters) { | 38 public double value(double W, double [] parameters) { |
14 // TODO: Implement me! | 39 double n = parameters[0]; |
15 return 0d; | 40 double m = parameters[1]; |
41 double b = parameters[2]; | |
42 return (Math.sqrt(4d*n*(W - b) + m*m)-m)/(2d*n); | |
16 } | 43 } |
17 | 44 |
18 @Override | 45 @Override |
19 public double [] gradient(double Q, double [] parameters) { | 46 public double [] gradient(double W, double [] parameters) { |
20 // TODO: Implement me! | 47 double n = parameters[0]; |
21 return null; | 48 double m = parameters[1]; |
49 double b = parameters[2]; | |
50 double Wb = W-b; | |
51 double sn4Wb = Math.sqrt(4d*n*Wb + m*m); | |
52 return new double [] { | |
53 Wb/(n*sn4Wb)-(sn4Wb-m)/(2d*n*n), | |
54 (m/sn4Wb-1d)/(2d*n), | |
55 -1d/sn4Wb | |
56 }; | |
22 } | 57 } |
23 | 58 |
24 @Override | 59 @Override |
25 public Derivative getDerivative() { | 60 public Derivative getDerivative() { |
26 // TODO: Implement me! | 61 return DERIVATIVE; |
27 return null; | |
28 } | 62 } |
29 | 63 |
30 @Override | 64 @Override |
31 public Function getInverse() { | 65 public Function getInverse() { |
32 return Quad.INSTANCE; | 66 return Quad.INSTANCE; |