GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Quad.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1993-2017 John W. Eaton
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
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
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
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if ! defined (octave_Quad_h)
24 #define octave_Quad_h 1
25 
26 #include "octave-config.h"
27 
28 #include <cfloat>
29 
30 #include "dColVector.h"
31 #include "fColVector.h"
32 
33 typedef double (*integrand_fcn) (double x);
34 typedef float (*float_integrand_fcn) (float x);
35 
36 // FIXME: would be nice to not have to have this global variable.
37 // Nonzero means an error occurred in the calculation of the integrand
38 // function, and the user wants us to quit.
39 extern OCTAVE_API int quad_integration_error;
40 
41 #include "Quad-opts.h"
42 
43 class
44 OCTAVE_API
45 Quad : public Quad_options
46 {
47 public:
48 
50  : Quad_options (), f (fcn), ff () { }
51 
53  : Quad_options (), f (), ff (fcn) { }
54 
55  virtual ~Quad (void) { }
56 
57  virtual double integrate (void)
58  {
59  octave_idx_type ier, neval;
60  double abserr;
61  return do_integrate (ier, neval, abserr);
62  }
63 
64  virtual float float_integrate (void)
65  {
66  octave_idx_type ier, neval;
67  float abserr;
68  return do_integrate (ier, neval, abserr);
69  }
70 
71  virtual double integrate (octave_idx_type& ier)
72  {
73  octave_idx_type neval;
74  double abserr;
75  return do_integrate (ier, neval, abserr);
76  }
77 
78  virtual float float_integrate (octave_idx_type& ier)
79  {
80  octave_idx_type neval;
81  float abserr;
82  return do_integrate (ier, neval, abserr);
83  }
84 
85  virtual double integrate (octave_idx_type& ier, octave_idx_type& neval)
86  {
87  double abserr;
88  return do_integrate (ier, neval, abserr);
89  }
90 
91  virtual float float_integrate (octave_idx_type& ier, octave_idx_type& neval)
92  {
93  float abserr;
94  return do_integrate (ier, neval, abserr);
95  }
96 
97  virtual double integrate (octave_idx_type& ier, octave_idx_type& neval,
98  double& abserr)
99  {
100  return do_integrate (ier, neval, abserr);
101  }
102 
103  virtual float float_integrate (octave_idx_type& ier, octave_idx_type& neval,
104  float& abserr)
105  {
106  return do_integrate (ier, neval, abserr);
107  }
108 
109  virtual double do_integrate (octave_idx_type& ier, octave_idx_type& neval,
110  double& abserr) = 0;
111 
112  virtual float do_integrate (octave_idx_type& ier, octave_idx_type& neval,
113  float& abserr) = 0;
114 
115 protected:
116 
119 };
120 
121 class
122 OCTAVE_API
123 DefQuad : public Quad
124 {
125 public:
126 
128  : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { }
129 
130  DefQuad (integrand_fcn fcn, double ll, double ul)
131  : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { }
132 
133  DefQuad (integrand_fcn fcn, double ll, double ul,
134  const ColumnVector& sing)
135  : Quad (fcn), lower_limit (ll), upper_limit (ul),
136  singularities (sing) { }
137 
139  : Quad (fcn), lower_limit (0.0), upper_limit (1.0),
140  singularities (sing) { }
141 
142  ~DefQuad (void) { }
143 
144  double do_integrate (octave_idx_type& ier, octave_idx_type& neval,
145  double& abserr);
146 
147  OCTAVE_NORETURN float do_integrate (octave_idx_type& ier,
148  octave_idx_type& neval, float& abserr);
149 
150 private:
151 
152  double lower_limit;
153  double upper_limit;
154 
156 };
157 
158 class
159 OCTAVE_API
160 IndefQuad : public Quad
161 {
162 public:
163 
164  enum IntegralType { bound_to_inf, neg_inf_to_bound, doubly_infinite };
165 
167  : Quad (fcn), bound (0.0), type (bound_to_inf) { }
168 
170  : Quad (fcn), bound (b), type (t) { }
171 
172  ~IndefQuad (void) { }
173 
174  double do_integrate (octave_idx_type& ier, octave_idx_type& neval,
175  double& abserr);
176 
177  OCTAVE_NORETURN float do_integrate (octave_idx_type& ier,
178  octave_idx_type& neval, float& abserr);
179 
180 private:
181 
182  double bound;
184 };
185 
186 class
187 OCTAVE_API
188 FloatDefQuad : public Quad
189 {
190 public:
191 
193  : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { }
194 
195  FloatDefQuad (float_integrand_fcn fcn, float ll, float ul)
196  : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { }
197 
198  FloatDefQuad (float_integrand_fcn fcn, float ll, float ul,
199  const FloatColumnVector& sing)
200  : Quad (fcn), lower_limit (ll), upper_limit (ul),
201  singularities (sing) { }
202 
204  : Quad (fcn), lower_limit (0.0), upper_limit (1.0),
205  singularities (sing) { }
206 
207  ~FloatDefQuad (void) { }
208 
209  OCTAVE_NORETURN double do_integrate (octave_idx_type& ier,
210  octave_idx_type& neval, double& abserr);
211 
212  float do_integrate (octave_idx_type& ier, octave_idx_type& neval,
213  float& abserr);
214 
215 private:
216 
217  float lower_limit;
218  float upper_limit;
219 
221 };
222 
223 class
224 OCTAVE_API
225 FloatIndefQuad : public Quad
226 {
227 public:
228 
229  enum IntegralType { bound_to_inf, neg_inf_to_bound, doubly_infinite };
230 
232  : Quad (fcn), bound (0.0), type (bound_to_inf) { }
233 
235  : Quad (fcn), bound (b), type (t) { }
236 
237  ~FloatIndefQuad (void) { }
238 
239  OCTAVE_NORETURN double do_integrate (octave_idx_type& ier,
240  octave_idx_type& neval, double& abserr);
241 
242  float do_integrate (octave_idx_type& ier, octave_idx_type& neval,
243  float& abserr);
244 
245 private:
246 
247  float bound;
249 };
250 
251 #endif
float(* float_integrand_fcn)(float x)
Definition: Quad.h:34
DefQuad(integrand_fcn fcn, double ll, double ul, const ColumnVector &sing)
Definition: Quad.h:133
FloatIndefQuad(float_integrand_fcn fcn)
Definition: Quad.h:231
~DefQuad(void)
Definition: Quad.h:142
IndefQuad(integrand_fcn fcn, double b, IntegralType t)
Definition: Quad.h:169
virtual double integrate(void)
Definition: Quad.h:57
float_integrand_fcn ff
Definition: Quad.h:118
double(* integrand_fcn)(double x)
Definition: Quad.h:33
ColumnVector singularities
Definition: Quad.h:155
virtual float float_integrate(void)
Definition: Quad.h:64
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE * f
double upper_limit
Definition: Quad.h:153
FloatDefQuad(float_integrand_fcn fcn, const FloatColumnVector &sing)
Definition: Quad.h:203
DefQuad(integrand_fcn fcn, const ColumnVector &sing)
Definition: Quad.h:138
IntegralType
Definition: Quad.h:164
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
Definition: ov-usr-fcn.cc:935
~FloatIndefQuad(void)
Definition: Quad.h:237
octave_function * fcn
Definition: ov-class.cc:1743
virtual double integrate(octave_idx_type &ier, octave_idx_type &neval, double &abserr)
Definition: Quad.h:97
~FloatDefQuad(void)
Definition: Quad.h:207
FloatIndefQuad(float_integrand_fcn fcn, double b, IntegralType t)
Definition: Quad.h:234
DefQuad(integrand_fcn fcn)
Definition: Quad.h:127
FloatColumnVector singularities
Definition: Quad.h:220
FloatDefQuad(float_integrand_fcn fcn, float ll, float ul, const FloatColumnVector &sing)
Definition: Quad.h:198
float upper_limit
Definition: Quad.h:218
Quad(float_integrand_fcn fcn)
Definition: Quad.h:52
double bound
Definition: Quad.h:182
DefQuad(integrand_fcn fcn, double ll, double ul)
Definition: Quad.h:130
Definition: Quad.h:43
virtual float float_integrate(octave_idx_type &ier, octave_idx_type &neval, float &abserr)
Definition: Quad.h:103
Quad(integrand_fcn fcn)
Definition: Quad.h:49
virtual float float_integrate(octave_idx_type &ier, octave_idx_type &neval)
Definition: Quad.h:91
idx type
Definition: ov.cc:3129
float lower_limit
Definition: Quad.h:217
FloatDefQuad(float_integrand_fcn fcn, float ll, float ul)
Definition: Quad.h:195
OCTAVE_API int quad_integration_error
Definition: Quad.cc:39
Definition: Quad.h:121
virtual double integrate(octave_idx_type &ier)
Definition: Quad.h:71
virtual double integrate(octave_idx_type &ier, octave_idx_type &neval)
Definition: Quad.h:85
IndefQuad(integrand_fcn fcn)
Definition: Quad.h:166
float bound
Definition: Quad.h:247
double lower_limit
Definition: Quad.h:152
issues an error eealso double
Definition: ov-bool-mat.cc:594
IntegralType type
Definition: Quad.h:183
IntegralType type
Definition: Quad.h:248
~IndefQuad(void)
Definition: Quad.h:172
b
Definition: cellfun.cc:398
virtual float float_integrate(octave_idx_type &ier)
Definition: Quad.h:78
integrand_fcn f
Definition: Quad.h:117
FloatDefQuad(float_integrand_fcn fcn)
Definition: Quad.h:192
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE * x
virtual ~Quad(void)
Definition: Quad.h:55