1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.analysis.solvers;
18
19 import org.apache.commons.math.MathException;
20 import org.apache.commons.math.analysis.Expm1Function;
21 import org.apache.commons.math.analysis.QuinticFunction;
22 import org.apache.commons.math.analysis.SinFunction;
23 import org.apache.commons.math.analysis.UnivariateRealFunction;
24
25 import junit.framework.TestCase;
26
27
28
29
30
31
32
33
34
35
36
37
38 public final class RiddersSolverTest extends TestCase {
39
40
41
42
43 @Deprecated
44 public void testDeprecated() throws MathException {
45 UnivariateRealFunction f = new SinFunction();
46 UnivariateRealSolver solver = new RiddersSolver(f);
47 double min, max, expected, result, tolerance;
48
49 min = 3.0; max = 4.0; expected = Math.PI;
50 tolerance = Math.max(solver.getAbsoluteAccuracy(),
51 Math.abs(expected * solver.getRelativeAccuracy()));
52 result = solver.solve(min, max);
53 assertEquals(expected, result, tolerance);
54
55 min = -1.0; max = 1.5; expected = 0.0;
56 tolerance = Math.max(solver.getAbsoluteAccuracy(),
57 Math.abs(expected * solver.getRelativeAccuracy()));
58 result = solver.solve(min, max);
59 assertEquals(expected, result, tolerance);
60 }
61
62
63
64
65 public void testSinFunction() throws MathException {
66 UnivariateRealFunction f = new SinFunction();
67 UnivariateRealSolver solver = new RiddersSolver();
68 double min, max, expected, result, tolerance;
69
70 min = 3.0; max = 4.0; expected = Math.PI;
71 tolerance = Math.max(solver.getAbsoluteAccuracy(),
72 Math.abs(expected * solver.getRelativeAccuracy()));
73 result = solver.solve(f, min, max);
74 assertEquals(expected, result, tolerance);
75
76 min = -1.0; max = 1.5; expected = 0.0;
77 tolerance = Math.max(solver.getAbsoluteAccuracy(),
78 Math.abs(expected * solver.getRelativeAccuracy()));
79 result = solver.solve(f, min, max);
80 assertEquals(expected, result, tolerance);
81 }
82
83
84
85
86 public void testQuinticFunction() throws MathException {
87 UnivariateRealFunction f = new QuinticFunction();
88 UnivariateRealSolver solver = new RiddersSolver();
89 double min, max, expected, result, tolerance;
90
91 min = -0.4; max = 0.2; expected = 0.0;
92 tolerance = Math.max(solver.getAbsoluteAccuracy(),
93 Math.abs(expected * solver.getRelativeAccuracy()));
94 result = solver.solve(f, min, max);
95 assertEquals(expected, result, tolerance);
96
97 min = 0.75; max = 1.5; expected = 1.0;
98 tolerance = Math.max(solver.getAbsoluteAccuracy(),
99 Math.abs(expected * solver.getRelativeAccuracy()));
100 result = solver.solve(f, min, max);
101 assertEquals(expected, result, tolerance);
102
103 min = -0.9; max = -0.2; expected = -0.5;
104 tolerance = Math.max(solver.getAbsoluteAccuracy(),
105 Math.abs(expected * solver.getRelativeAccuracy()));
106 result = solver.solve(f, min, max);
107 assertEquals(expected, result, tolerance);
108 }
109
110
111
112
113 public void testExpm1Function() throws MathException {
114 UnivariateRealFunction f = new Expm1Function();
115 UnivariateRealSolver solver = new RiddersSolver();
116 double min, max, expected, result, tolerance;
117
118 min = -1.0; max = 2.0; expected = 0.0;
119 tolerance = Math.max(solver.getAbsoluteAccuracy(),
120 Math.abs(expected * solver.getRelativeAccuracy()));
121 result = solver.solve(f, min, max);
122 assertEquals(expected, result, tolerance);
123
124 min = -20.0; max = 10.0; expected = 0.0;
125 tolerance = Math.max(solver.getAbsoluteAccuracy(),
126 Math.abs(expected * solver.getRelativeAccuracy()));
127 result = solver.solve(f, min, max);
128 assertEquals(expected, result, tolerance);
129
130 min = -50.0; max = 100.0; expected = 0.0;
131 tolerance = Math.max(solver.getAbsoluteAccuracy(),
132 Math.abs(expected * solver.getRelativeAccuracy()));
133 result = solver.solve(f, min, max);
134 assertEquals(expected, result, tolerance);
135 }
136
137
138
139
140 public void testParameters() throws Exception {
141 UnivariateRealFunction f = new SinFunction();
142 UnivariateRealSolver solver = new RiddersSolver();
143
144 try {
145
146 solver.solve(f, 1, -1);
147 fail("Expecting IllegalArgumentException - bad interval");
148 } catch (IllegalArgumentException ex) {
149
150 }
151 try {
152
153 solver.solve(f, 2, 3);
154 fail("Expecting IllegalArgumentException - no bracketing");
155 } catch (IllegalArgumentException ex) {
156
157 }
158 }
159 }