1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.hipparchus.analysis.solvers;
23
24 import org.hipparchus.analysis.QuinticFunction;
25 import org.hipparchus.analysis.differentiation.UnivariateDifferentiableFunction;
26 import org.hipparchus.analysis.function.Sin;
27 import org.hipparchus.util.FastMath;
28 import org.junit.Assert;
29 import org.junit.Test;
30
31
32
33
34 public final class NewtonRaphsonSolverTest {
35
36
37
38 @Test
39 public void testSinZero() {
40 UnivariateDifferentiableFunction f = new Sin();
41 double result;
42
43 NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
44 result = solver.solve(100, f, 3, 4);
45 Assert.assertEquals(result, FastMath.PI, solver.getAbsoluteAccuracy());
46
47 result = solver.solve(100, f, 1, 4);
48 Assert.assertEquals(result, FastMath.PI, solver.getAbsoluteAccuracy());
49
50 Assert.assertTrue(solver.getEvaluations() > 0);
51 }
52
53
54
55
56 @Test
57 public void testQuinticZero() {
58 final UnivariateDifferentiableFunction f = new QuinticFunction();
59 double result;
60
61 NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
62 result = solver.solve(100, f, -0.2, 0.2);
63 Assert.assertEquals(result, 0, solver.getAbsoluteAccuracy());
64
65 result = solver.solve(100, f, -0.1, 0.3);
66 Assert.assertEquals(result, 0, solver.getAbsoluteAccuracy());
67
68 result = solver.solve(100, f, -0.3, 0.45);
69 Assert.assertEquals(result, 0, solver.getAbsoluteAccuracy());
70
71 result = solver.solve(100, f, 0.3, 0.7);
72 Assert.assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
73
74 result = solver.solve(100, f, 0.2, 0.6);
75 Assert.assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
76
77 result = solver.solve(100, f, 0.05, 0.95);
78 Assert.assertEquals(result, 0.5, solver.getAbsoluteAccuracy());
79
80 result = solver.solve(100, f, 0.85, 1.25);
81 Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
82
83 result = solver.solve(100, f, 0.8, 1.2);
84 Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
85
86 result = solver.solve(100, f, 0.85, 1.75);
87 Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
88
89 result = solver.solve(100, f, 0.55, 1.45);
90 Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
91
92 result = solver.solve(100, f, 0.85, 5);
93 Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
94 }
95 }