Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/InvQuad.java @ 5838:5aa05a7a34b7
Rename modules to more fitting names.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 15:23:37 +0200 |
parents | flys-artifacts/src/main/java/org/dive4elements/river/artifacts/math/fitting/InvQuad.java@bd047b71ab37 |
children | 4897a58c8746 |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.artifacts.math.fitting; | |
2 | |
3 public class InvQuad | |
4 extends Function | |
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 org.dive4elements.river.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 org.dive4elements.river.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 | |
28 public static final Function INSTANCE = new InvQuad(); | |
29 | |
30 public InvQuad() { | |
31 super( | |
32 "inv-quad", | |
33 "(sqrt(4*n*W-4*b*n+m^2)-m)/(2*n)", | |
34 new String [] { "n", "m", "b" }); | |
35 } | |
36 | |
37 @Override | |
38 public double value(double W, double [] parameters) { | |
39 double n = parameters[0]; | |
40 double m = parameters[1]; | |
41 double b = parameters[2]; | |
42 return (Math.sqrt(4d*n*(W - b) + m*m)-m)/(2d*n); | |
43 } | |
44 | |
45 @Override | |
46 public double [] gradient(double W, double [] parameters) { | |
47 double n = parameters[0]; | |
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 }; | |
57 } | |
58 | |
59 @Override | |
60 public Derivative getDerivative() { | |
61 return DERIVATIVE; | |
62 } | |
63 | |
64 @Override | |
65 public Function getInverse() { | |
66 return Quad.INSTANCE; | |
67 } | |
68 } | |
69 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |