1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.analysis.integration;
18
19 import org.apache.commons.math.MathException;
20 import org.apache.commons.math.analysis.QuinticFunction;
21 import org.apache.commons.math.analysis.SinFunction;
22 import org.apache.commons.math.analysis.UnivariateRealFunction;
23
24 import junit.framework.TestCase;
25
26
27
28
29
30
31
32
33
34 public final class SimpsonIntegratorTest extends TestCase {
35
36
37
38
39 public void testSinFunction() throws MathException {
40 UnivariateRealFunction f = new SinFunction();
41 UnivariateRealIntegrator integrator = new SimpsonIntegrator();
42 double min, max, expected, result, tolerance;
43
44 min = 0; max = Math.PI; expected = 2;
45 tolerance = Math.abs(expected * integrator.getRelativeAccuracy());
46 result = integrator.integrate(f, min, max);
47 assertEquals(expected, result, tolerance);
48
49 min = -Math.PI/3; max = 0; expected = -0.5;
50 tolerance = Math.abs(expected * integrator.getRelativeAccuracy());
51 result = integrator.integrate(f, min, max);
52 assertEquals(expected, result, tolerance);
53 }
54
55
56
57
58 public void testQuinticFunction() throws MathException {
59 UnivariateRealFunction f = new QuinticFunction();
60 UnivariateRealIntegrator integrator = new SimpsonIntegrator();
61 double min, max, expected, result, tolerance;
62
63 min = 0; max = 1; expected = -1.0/48;
64 tolerance = Math.abs(expected * integrator.getRelativeAccuracy());
65 result = integrator.integrate(f, min, max);
66 assertEquals(expected, result, tolerance);
67
68 min = 0; max = 0.5; expected = 11.0/768;
69 tolerance = Math.abs(expected * integrator.getRelativeAccuracy());
70 result = integrator.integrate(f, min, max);
71 assertEquals(expected, result, tolerance);
72
73 min = -1; max = 4; expected = 2048/3.0 - 78 + 1.0/48;
74 tolerance = Math.abs(expected * integrator.getRelativeAccuracy());
75 result = integrator.integrate(f, min, max);
76 assertEquals(expected, result, tolerance);
77 }
78
79
80
81
82 public void testParameters() throws Exception {
83 UnivariateRealFunction f = new SinFunction();
84 UnivariateRealIntegrator integrator = new SimpsonIntegrator();
85
86 try {
87
88 integrator.integrate(f, 1, -1);
89 fail("Expecting IllegalArgumentException - bad interval");
90 } catch (IllegalArgumentException ex) {
91
92 }
93 try {
94
95 integrator.setMinimalIterationCount(5);
96 integrator.setMaximalIterationCount(4);
97 integrator.integrate(f, -1, 1);
98 fail("Expecting IllegalArgumentException - bad iteration limits");
99 } catch (IllegalArgumentException ex) {
100
101 }
102 try {
103
104 integrator.setMinimalIterationCount(10);
105 integrator.setMaximalIterationCount(99);
106 integrator.integrate(f, -1, 1);
107 fail("Expecting IllegalArgumentException - bad iteration limits");
108 } catch (IllegalArgumentException ex) {
109
110 }
111 }
112 }