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.ConvergingAlgorithmImpl;
20 import org.apache.commons.math.MathRuntimeException;
21 import org.apache.commons.math.analysis.UnivariateRealFunction;
22
23
24
25
26
27
28
29 public abstract class UnivariateRealIntegratorImpl
30 extends ConvergingAlgorithmImpl implements UnivariateRealIntegrator {
31
32
33 private static final long serialVersionUID = 6248808456637441533L;
34
35
36 protected int minimalIterationCount;
37
38
39 protected int defaultMinimalIterationCount;
40
41
42 protected boolean resultComputed = false;
43
44
45 protected double result;
46
47
48
49
50 @Deprecated
51 protected UnivariateRealFunction f;
52
53
54
55
56
57
58
59
60
61
62
63 @Deprecated
64 protected UnivariateRealIntegratorImpl(final UnivariateRealFunction f,
65 final int defaultMaximalIterationCount)
66 throws IllegalArgumentException {
67 super(defaultMaximalIterationCount, 1.0e-15);
68 if (f == null) {
69 throw MathRuntimeException.createIllegalArgumentException("function is null");
70 }
71
72 this.f = f;
73
74
75 setRelativeAccuracy(1.0e-6);
76 this.defaultMinimalIterationCount = 3;
77 this.minimalIterationCount = defaultMinimalIterationCount;
78
79 verifyIterationCount();
80 }
81
82
83
84
85
86
87
88
89 protected UnivariateRealIntegratorImpl(final int defaultMaximalIterationCount)
90 throws IllegalArgumentException {
91 super(defaultMaximalIterationCount, 1.0e-15);
92
93
94 setRelativeAccuracy(1.0e-6);
95 this.defaultMinimalIterationCount = 3;
96 this.minimalIterationCount = defaultMinimalIterationCount;
97
98 verifyIterationCount();
99 }
100
101
102
103
104
105
106
107 public double getResult() throws IllegalStateException {
108 if (resultComputed) {
109 return result;
110 } else {
111 throw MathRuntimeException.createIllegalStateException("no result available");
112 }
113 }
114
115
116
117
118
119
120
121 protected final void setResult(double result, int iterationCount) {
122 this.result = result;
123 this.iterationCount = iterationCount;
124 this.resultComputed = true;
125 }
126
127
128
129
130 protected final void clearResult() {
131 this.iterationCount = 0;
132 this.resultComputed = false;
133 }
134
135
136 public void setMinimalIterationCount(int count) {
137 minimalIterationCount = count;
138 }
139
140
141 public int getMinimalIterationCount() {
142 return minimalIterationCount;
143 }
144
145
146 public void resetMinimalIterationCount() {
147 minimalIterationCount = defaultMinimalIterationCount;
148 }
149
150
151
152
153
154
155
156
157 protected void verifyInterval(double lower, double upper) throws
158 IllegalArgumentException {
159 if (lower >= upper) {
160 throw MathRuntimeException.createIllegalArgumentException(
161 "endpoints do not specify an interval: [{0}, {1}]",
162 lower, upper);
163 }
164 }
165
166
167
168
169
170
171 protected void verifyIterationCount() throws IllegalArgumentException {
172 if ((minimalIterationCount <= 0) || (maximalIterationCount <= minimalIterationCount)) {
173 throw MathRuntimeException.createIllegalArgumentException(
174 "invalid iteration limits: min={0}, max={1}",
175 minimalIterationCount, maximalIterationCount);
176 }
177 }
178 }