Mercurial > hg > octave-nkf
annotate liboctave/Quad.h @ 15192:8367f326fa29
Remove octave_value::is_real_nd_array cruft
* ov-base.h (octave_base_value::is_real_nd_array): Remove function.
* ov.h (octave_Value::is_real_nd_array): Remove function.
author | Max Brister <max@2bass.com> |
---|---|
date | Thu, 16 Aug 2012 18:57:45 -0500 |
parents | 72c96de7a403 |
children |
rev | line source |
---|---|
3 | 1 /* |
2 | |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3 Copyright (C) 1993-2012 John W. Eaton |
3 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
3 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
3 | 20 |
21 */ | |
22 | |
382 | 23 #if !defined (octave_Quad_h) |
24 #define octave_Quad_h 1 | |
25 | |
1536 | 26 #include <cfloat> |
27 | |
1296 | 28 #include "dColVector.h" |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
29 #include "fColVector.h" |
7231 | 30 #include "lo-math.h" |
3 | 31 |
384 | 32 #if !defined (octave_Quad_typedefs) |
33 #define octave_Quad_typedefs 1 | |
3 | 34 |
35 typedef double (*integrand_fcn) (double x); | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
36 typedef float (*float_integrand_fcn) (float x); |
3 | 37 |
38 #endif | |
39 | |
5775 | 40 // FIXME -- would be nice to not have to have this global |
260 | 41 // variable. |
42 // Nonzero means an error occurred in the calculation of the integrand | |
43 // function, and the user wants us to quit. | |
6108 | 44 extern OCTAVE_API int quad_integration_error; |
260 | 45 |
3998 | 46 #include "Quad-opts.h" |
289 | 47 |
1859 | 48 class |
6108 | 49 OCTAVE_API |
1859 | 50 Quad : public Quad_options |
3 | 51 { |
52 public: | |
53 | |
1859 | 54 Quad (integrand_fcn fcn) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
55 : Quad_options (), f (fcn), ff () { } |
1859 | 56 |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
57 Quad (float_integrand_fcn fcn) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
58 : Quad_options (), f (), ff (fcn) { } |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
59 |
2425 | 60 virtual ~Quad (void) { } |
2424 | 61 |
1528 | 62 virtual double integrate (void) |
63 { | |
5275 | 64 octave_idx_type ier, neval; |
1528 | 65 double abserr; |
3511 | 66 return do_integrate (ier, neval, abserr); |
1528 | 67 } |
3 | 68 |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
69 virtual float float_integrate (void) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
70 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
71 octave_idx_type ier, neval; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
72 float abserr; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
73 return do_integrate (ier, neval, abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
74 } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
75 |
5275 | 76 virtual double integrate (octave_idx_type& ier) |
1528 | 77 { |
5275 | 78 octave_idx_type neval; |
1528 | 79 double abserr; |
3511 | 80 return do_integrate (ier, neval, abserr); |
1528 | 81 } |
82 | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
83 virtual float float_integrate (octave_idx_type& ier) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
84 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
85 octave_idx_type neval; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
86 float abserr; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
87 return do_integrate (ier, neval, abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
88 } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
89 |
5275 | 90 virtual double integrate (octave_idx_type& ier, octave_idx_type& neval) |
1528 | 91 { |
92 double abserr; | |
3511 | 93 return do_integrate (ier, neval, abserr); |
1528 | 94 } |
95 | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
96 virtual float float_integrate (octave_idx_type& ier, octave_idx_type& neval) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
97 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
98 float abserr; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
99 return do_integrate (ier, neval, abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
100 } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
101 |
5275 | 102 virtual double integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr) |
3511 | 103 { |
104 return do_integrate (ier, neval, abserr); | |
105 } | |
106 | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
107 virtual float float_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
108 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
109 return do_integrate (ier, neval, abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
110 } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
111 |
5275 | 112 virtual double do_integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr) = 0; |
3 | 113 |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
114 virtual float do_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr) = 0; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
115 |
3 | 116 protected: |
117 | |
118 integrand_fcn f; | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
119 float_integrand_fcn ff; |
3 | 120 }; |
121 | |
1859 | 122 class |
6108 | 123 OCTAVE_API |
1859 | 124 DefQuad : public Quad |
3 | 125 { |
126 public: | |
127 | |
1859 | 128 DefQuad (integrand_fcn fcn) |
129 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { } | |
1528 | 130 |
1859 | 131 DefQuad (integrand_fcn fcn, double ll, double ul) |
132 : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { } | |
1528 | 133 |
134 DefQuad (integrand_fcn fcn, double ll, double ul, | |
10312
cbc402e64d83
untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
135 const ColumnVector& sing) |
1859 | 136 : Quad (fcn), lower_limit (ll), upper_limit (ul), |
137 singularities (sing) { } | |
1528 | 138 |
1859 | 139 DefQuad (integrand_fcn fcn, const ColumnVector& sing) |
140 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), | |
141 singularities (sing) { } | |
1528 | 142 |
2424 | 143 ~DefQuad (void) { } |
144 | |
5275 | 145 double do_integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr); |
3 | 146 |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
147 float do_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
148 |
3 | 149 private: |
150 | |
151 double lower_limit; | |
152 double upper_limit; | |
153 | |
1528 | 154 ColumnVector singularities; |
3 | 155 }; |
156 | |
1859 | 157 class |
6108 | 158 OCTAVE_API |
1859 | 159 IndefQuad : public Quad |
3 | 160 { |
161 public: | |
162 | |
163 enum IntegralType { bound_to_inf, neg_inf_to_bound, doubly_infinite }; | |
164 | |
1859 | 165 IndefQuad (integrand_fcn fcn) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
166 : Quad (fcn), bound (0.0), type (bound_to_inf), integration_error (0) { } |
1528 | 167 |
1859 | 168 IndefQuad (integrand_fcn fcn, double b, IntegralType t) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
169 : Quad (fcn), bound (b), type (t), integration_error (0) { } |
1528 | 170 |
2424 | 171 ~IndefQuad (void) { } |
172 | |
5275 | 173 double do_integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr); |
3 | 174 |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
175 float do_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
176 |
3 | 177 private: |
178 | |
179 double bound; | |
180 IntegralType type; | |
1859 | 181 int integration_error; |
3 | 182 }; |
183 | |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
184 class |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
185 OCTAVE_API |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
186 FloatDefQuad : public Quad |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
187 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
188 public: |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
189 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
190 FloatDefQuad (float_integrand_fcn fcn) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
191 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
192 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
193 FloatDefQuad (float_integrand_fcn fcn, float ll, float ul) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
194 : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
195 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
196 FloatDefQuad (float_integrand_fcn fcn, float ll, float ul, |
10312
cbc402e64d83
untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
197 const FloatColumnVector& sing) |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
198 : Quad (fcn), lower_limit (ll), upper_limit (ul), |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
199 singularities (sing) { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
200 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
201 FloatDefQuad (float_integrand_fcn fcn, const FloatColumnVector& sing) |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
202 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
203 singularities (sing) { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
204 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
205 ~FloatDefQuad (void) { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
206 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
207 double do_integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
208 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
209 float do_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
210 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
211 private: |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
212 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
213 float lower_limit; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
214 float upper_limit; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
215 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
216 FloatColumnVector singularities; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
217 }; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
218 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
219 class |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
220 OCTAVE_API |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
221 FloatIndefQuad : public Quad |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
222 { |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
223 public: |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
224 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
225 enum IntegralType { bound_to_inf, neg_inf_to_bound, doubly_infinite }; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
226 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
227 FloatIndefQuad (float_integrand_fcn fcn) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
228 : Quad (fcn), bound (0.0), type (bound_to_inf), integration_error (0) { } |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
229 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
230 FloatIndefQuad (float_integrand_fcn fcn, double b, IntegralType t) |
11501
331fcc41ca23
data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
231 : Quad (fcn), bound (b), type (t), integration_error (0) { } |
7805
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
232 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
233 ~FloatIndefQuad (void) { } |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
234 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
235 double do_integrate (octave_idx_type& ier, octave_idx_type& neval, double& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
236 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
237 float do_integrate (octave_idx_type& ier, octave_idx_type& neval, float& abserr); |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
238 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
239 private: |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
240 |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
241 float bound; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
242 IntegralType type; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
243 int integration_error; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
244 }; |
62affb34e648
Make quad work with single precision
David Bateman <dbateman@free.fr>
parents:
7231
diff
changeset
|
245 |
3 | 246 #endif |