1 18 package org.apache.commons.math.analysis; 19 20 import org.apache.commons.math.MathException; 21 import org.apache.commons.math.TestUtils; 22 23 import junit.framework.TestCase; 24 25 28 public final class BisectionSolverTest extends TestCase { 29 32 public void testSinZero() throws MathException { 33 UnivariateRealFunction f = new SinFunction(); 34 double result; 35 36 UnivariateRealSolver solver = new BisectionSolver(f); 37 result = solver.solve(3, 4); 38 assertEquals(result, Math.PI, solver.getAbsoluteAccuracy()); 39 40 result = solver.solve(1, 4); 41 assertEquals(result, Math.PI, solver.getAbsoluteAccuracy()); 42 } 43 44 47 public void testQuinticZero() throws MathException { 48 UnivariateRealFunction f = new QuinticFunction(); 49 double result; 50 51 UnivariateRealSolver solver = new BisectionSolver(f); 52 result = solver.solve(-0.2, 0.2); 53 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 54 55 result = solver.solve(-0.1, 0.3); 56 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 57 58 result = solver.solve(-0.3, 0.45); 59 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 60 61 result = solver.solve(0.3, 0.7); 62 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 63 64 result = solver.solve(0.2, 0.6); 65 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 66 67 result = solver.solve(0.05, 0.95); 68 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 69 70 result = solver.solve(0.85, 1.25); 71 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 72 73 result = solver.solve(0.8, 1.2); 74 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 75 76 result = solver.solve(0.85, 1.75); 77 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 78 79 result = solver.solve(0.55, 1.45); 80 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 81 82 result = solver.solve(0.85, 5); 83 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 84 85 assertEquals(result, solver.getResult(), 0); 86 assertTrue(solver.getIterationCount() > 0); 87 } 88 89 92 public void testSetFunctionValueAccuracy(){ 93 double expected = 1.0e-2; 94 UnivariateRealFunction f = new QuinticFunction(); 95 UnivariateRealSolver solver = new BisectionSolver(f); 96 solver.setFunctionValueAccuracy(expected); 97 assertEquals(expected, solver.getFunctionValueAccuracy(), 1.0e-2); 98 } 99 100 103 public void testResetFunctionValueAccuracy(){ 104 double newValue = 1.0e-2; 105 UnivariateRealFunction f = new QuinticFunction(); 106 UnivariateRealSolver solver = new BisectionSolver(f); 107 double oldValue = solver.getFunctionValueAccuracy(); 108 solver.setFunctionValueAccuracy(newValue); 109 solver.resetFunctionValueAccuracy(); 110 assertEquals(oldValue, solver.getFunctionValueAccuracy(), 1.0e-2); 111 } 112 113 116 public void testSetAbsoluteAccuracy(){ 117 double expected = 1.0e-2; 118 UnivariateRealFunction f = new QuinticFunction(); 119 UnivariateRealSolver solver = new BisectionSolver(f); 120 solver.setAbsoluteAccuracy(expected); 121 assertEquals(expected, solver.getAbsoluteAccuracy(), 1.0e-2); 122 } 123 124 127 public void testResetAbsoluteAccuracy(){ 128 double newValue = 1.0e-2; 129 UnivariateRealFunction f = new QuinticFunction(); 130 UnivariateRealSolver solver = new BisectionSolver(f); 131 double oldValue = solver.getAbsoluteAccuracy(); 132 solver.setAbsoluteAccuracy(newValue); 133 solver.resetAbsoluteAccuracy(); 134 assertEquals(oldValue, solver.getAbsoluteAccuracy(), 1.0e-2); 135 } 136 137 140 public void testSetMaximalIterationCount(){ 141 int expected = 100; 142 143 UnivariateRealFunction f = new QuinticFunction(); 144 UnivariateRealSolver solver = new BisectionSolver(f); 145 solver.setMaximalIterationCount(expected); 146 assertEquals(expected, solver.getMaximalIterationCount()); 147 } 148 149 152 public void testResetMaximalIterationCount(){ 153 int newValue = 10000; 154 155 UnivariateRealFunction f = new QuinticFunction(); 156 UnivariateRealSolver solver = new BisectionSolver(f); 157 int oldValue = solver.getMaximalIterationCount(); 158 solver.setMaximalIterationCount(newValue); 159 solver.resetMaximalIterationCount(); 160 assertEquals(oldValue, solver.getMaximalIterationCount()); 161 } 162 163 166 public void testSetRelativeAccuracy(){ 167 double expected = 1.0e-2; 168 169 UnivariateRealFunction f = new QuinticFunction(); 170 UnivariateRealSolver solver = new BisectionSolver(f); 171 solver.setRelativeAccuracy(expected); 172 assertEquals(expected, solver.getRelativeAccuracy(), 1.0e-2); 173 } 174 175 178 public void testResetRelativeAccuracy(){ 179 double newValue = 1.0e-2; 180 UnivariateRealFunction f = new QuinticFunction(); 181 UnivariateRealSolver solver = new BisectionSolver(f); 182 double oldValue = solver.getRelativeAccuracy(); 183 solver.setRelativeAccuracy(newValue); 184 solver.resetRelativeAccuracy(); 185 assertEquals(oldValue, solver.getRelativeAccuracy(), 1.0e-2); 186 } 187 188 191 public void testSerialization() throws MathException { 192 UnivariateRealFunction f = (UnivariateRealFunction)TestUtils.serializeAndRecover(new QuinticFunction()); 193 double result; 194 195 BisectionSolver solver = new BisectionSolver(f); 196 UnivariateRealSolver solver2 = (UnivariateRealSolver)TestUtils.serializeAndRecover(solver); 197 198 result = solver.solve(-0.2, 0.2); 199 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 200 assertEquals(solver2.solve(-0.2, 0.2), result, solver2.getAbsoluteAccuracy()); 201 202 result = solver.solve(-0.1, 0.3); 203 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 204 assertEquals(solver2.solve(-0.1, 0.3), result, solver2.getAbsoluteAccuracy()); 205 206 result = solver.solve(-0.3, 0.45); 207 assertEquals(result, 0, solver.getAbsoluteAccuracy()); 208 assertEquals(solver2.solve(-0.3, 0.45), result, solver2.getAbsoluteAccuracy()); 209 210 result = solver.solve(0.3, 0.7); 211 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 212 assertEquals(solver2.solve(0.3, 0.7), result, solver2.getAbsoluteAccuracy()); 213 214 result = solver.solve(0.2, 0.6); 215 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 216 assertEquals(solver2.solve(0.2, 0.6), result, solver2.getAbsoluteAccuracy()); 217 218 result = solver.solve(0.05, 0.95); 219 assertEquals(result, 0.5, solver.getAbsoluteAccuracy()); 220 assertEquals(solver2.solve(0.05, 0.95), result, solver2.getAbsoluteAccuracy()); 221 222 result = solver.solve(0.85, 1.25); 223 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 224 assertEquals(solver2.solve(0.85, 1.25), result, solver2.getAbsoluteAccuracy()); 225 226 result = solver.solve(0.8, 1.2); 227 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 228 assertEquals(solver2.solve(0.8, 1.2), result, solver2.getAbsoluteAccuracy()); 229 230 result = solver.solve(0.85, 1.75); 231 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 232 assertEquals(solver2.solve(0.85, 1.75), result, solver2.getAbsoluteAccuracy()); 233 234 result = solver.solve(0.55, 1.45); 235 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 236 assertEquals(solver2.solve(0.55, 1.45), result, solver2.getAbsoluteAccuracy()); 237 238 result = solver.solve(0.85, 5); 239 assertEquals(result, 1.0, solver.getAbsoluteAccuracy()); 240 assertEquals(solver2.solve(0.85, 5), result, solver2.getAbsoluteAccuracy()); 241 242 243 double newValue = 1.0e-2; 244 f = (UnivariateRealFunction)TestUtils.serializeAndRecover(new QuinticFunction()); 245 solver = new BisectionSolver(f); 246 247 double oldValue = solver.getRelativeAccuracy(); 248 solver.setRelativeAccuracy(newValue); 249 solver.resetRelativeAccuracy(); 250 assertEquals(oldValue, solver.getRelativeAccuracy(), 1.0e-2); 251 252 solver2 = (UnivariateRealSolver)TestUtils.serializeAndRecover(solver); 253 254 assertEquals(oldValue, solver2.getRelativeAccuracy(), 1.0e-2); 255 256 solver2.setRelativeAccuracy(newValue); 257 solver2.resetRelativeAccuracy(); 258 259 assertEquals(oldValue, solver2.getRelativeAccuracy(), 1.0e-2); 260 261 } 262 263 } 264 | Popular Tags |