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.jupiter.api.Test;
29
30 import static org.junit.jupiter.api.Assertions.assertEquals;
31 import static org.junit.jupiter.api.Assertions.assertTrue;
32
33
34
35
36 final class NewtonRaphsonSolverTest {
37
38
39
40 @Test
41 void testSinZero() {
42 UnivariateDifferentiableFunction f = new Sin();
43 double result;
44
45 NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
46 result = solver.solve(100, f, 3, 4);
47 assertEquals(FastMath.PI, result, solver.getAbsoluteAccuracy());
48
49 result = solver.solve(100, f, 1, 4);
50 assertEquals(FastMath.PI, result, solver.getAbsoluteAccuracy());
51
52 assertTrue(solver.getEvaluations() > 0);
53 }
54
55
56
57
58 @Test
59 void testQuinticZero() {
60 final UnivariateDifferentiableFunction f = new QuinticFunction();
61 double result;
62
63 NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
64 result = solver.solve(100, f, -0.2, 0.2);
65 assertEquals(0, result, solver.getAbsoluteAccuracy());
66
67 result = solver.solve(100, f, -0.1, 0.3);
68 assertEquals(0, result, solver.getAbsoluteAccuracy());
69
70 result = solver.solve(100, f, -0.3, 0.45);
71 assertEquals(0, result, solver.getAbsoluteAccuracy());
72
73 result = solver.solve(100, f, 0.3, 0.7);
74 assertEquals(0.5, result, solver.getAbsoluteAccuracy());
75
76 result = solver.solve(100, f, 0.2, 0.6);
77 assertEquals(0.5, result, solver.getAbsoluteAccuracy());
78
79 result = solver.solve(100, f, 0.05, 0.95);
80 assertEquals(0.5, result, solver.getAbsoluteAccuracy());
81
82 result = solver.solve(100, f, 0.85, 1.25);
83 assertEquals(1.0, result, solver.getAbsoluteAccuracy());
84
85 result = solver.solve(100, f, 0.8, 1.2);
86 assertEquals(1.0, result, solver.getAbsoluteAccuracy());
87
88 result = solver.solve(100, f, 0.85, 1.75);
89 assertEquals(1.0, result, solver.getAbsoluteAccuracy());
90
91 result = solver.solve(100, f, 0.55, 1.45);
92 assertEquals(1.0, result, solver.getAbsoluteAccuracy());
93
94 result = solver.solve(100, f, 0.85, 5);
95 assertEquals(1.0, result, solver.getAbsoluteAccuracy());
96 }
97 }