-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathFunctionDelegates.java
More file actions
85 lines (75 loc) · 3.05 KB
/
Copy pathFunctionDelegates.java
File metadata and controls
85 lines (75 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package examples;
import org.quantlib.Brent;
import org.quantlib.Newton;
import org.quantlib.DoubleVector;
import org.quantlib.OdeFctDelegate;
import org.quantlib.GaussKronrodAdaptive;
import org.quantlib.UnaryFunctionDelegate;
import org.quantlib.BinaryFunctionDelegate;
import org.quantlib.RichardsonExtrapolation;
import org.quantlib.RungeKutta;
public class FunctionDelegates {
public static void main(String[] args) {
System.out.println("Integration result " +
new GaussKronrodAdaptive(1e-8).calculate(
new UnaryFunctionDelegate() {
public double value(double x) { return Math.sin(x); }
}, 0.0, Math.PI
)
);
System.out.println("Brent Solver result " +
new Brent().solve(
new UnaryFunctionDelegate() {
public double value(double x) { return Math.cos(x)-x; }
}, 1e-8, 0.5, 0.0, Math.PI
)
);
System.out.println("Newton Solver result " +
new Newton().solve(
new UnaryFunctionDelegate() {
public double value(double x) { return x*x-1.0; }
},
new UnaryFunctionDelegate() {
public double value(double x) { return 2*x; }
},
1e-4, 0.25, 0.1
)
);
System.out.println("Richardson Extrapolation, known order " +
new RichardsonExtrapolation(
new UnaryFunctionDelegate() {
public double value(double x) { return Math.exp(1 + x); }
}, 0.1, 1.0).getValue(2.0)
);
System.out.println("Richardson Extrapolation, unknown order " +
new RichardsonExtrapolation(
new UnaryFunctionDelegate() {
public double value(double x) { return Math.exp(1 + x); }
}, 0.1).getValue(4.0, 2.0)
);
System.out.println("One dimensional adaptive Runge-Kutta result " +
// y'=y and y[0] = 1
new RungeKutta().getValue(
new BinaryFunctionDelegate() {
public double value(double x, double y) { return y; }
}, 1.0, 0.0, 1.0
)
);
DoubleVector startVal = new DoubleVector();
startVal.add(0.0);
startVal.add(1.0);
System.out.println("Two dimensional adaptive Runge-Kutta result " +
// y_0'=y_1 & y_1'=-y_0 and y_0[0]=0 & y_1[0]=1
new RungeKutta().getValue(
new OdeFctDelegate() {
public DoubleVector value(double x, DoubleVector y) {
DoubleVector retVal = new DoubleVector();
retVal.add(y.get(1));
retVal.add(-y.get(0));
return retVal;
}
}, startVal, 0.0, 0.5*Math.PI
).get(0)
);
}
}