Mercurial > hg > octave-nkf
comparison liboctave/Quad.h @ 3998:f6df65db67f9
[project @ 2002-07-24 18:10:39 by jwe]
author | jwe |
---|---|
date | Wed, 24 Jul 2002 18:10:40 +0000 |
parents | d92134062783 |
children | 6e86256e9c54 |
comparison
equal
deleted
inserted
replaced
3997:d4091aff6468 | 3998:f6df65db67f9 |
---|---|
43 // variable. | 43 // variable. |
44 // Nonzero means an error occurred in the calculation of the integrand | 44 // Nonzero means an error occurred in the calculation of the integrand |
45 // function, and the user wants us to quit. | 45 // function, and the user wants us to quit. |
46 extern int quad_integration_error; | 46 extern int quad_integration_error; |
47 | 47 |
48 class | 48 #include "Quad-opts.h" |
49 Quad_options | |
50 { | |
51 public: | |
52 | |
53 Quad_options (void) { init (); } | |
54 | |
55 // XXX FIXME XXX -- check for invalid values? | |
56 Quad_options (double abs, double rel) | |
57 : x_absolute_tolerance (abs), x_relative_tolerance (rel) { } | |
58 | |
59 Quad_options (const Quad_options& opt) | |
60 : x_absolute_tolerance (opt.x_absolute_tolerance), | |
61 x_relative_tolerance (opt.x_relative_tolerance) { } | |
62 | |
63 Quad_options& operator = (const Quad_options& opt) | |
64 { | |
65 if (this != &opt) | |
66 set_options (opt); | |
67 | |
68 return *this; | |
69 } | |
70 | |
71 ~Quad_options (void) { } | |
72 | |
73 void init (void) | |
74 { | |
75 double sqrt_eps = ::sqrt (DBL_EPSILON); | |
76 | |
77 x_absolute_tolerance = sqrt_eps; | |
78 x_relative_tolerance = sqrt_eps; | |
79 } | |
80 | |
81 void set_default_options (void) { init (); } | |
82 | |
83 void set_options (const Quad_options& opt) | |
84 { | |
85 x_absolute_tolerance = opt.x_absolute_tolerance; | |
86 x_relative_tolerance = opt.x_relative_tolerance; | |
87 } | |
88 | |
89 // XXX FIXME XXX -- check for invalid values? | |
90 void set_absolute_tolerance (double val) { x_absolute_tolerance = val; } | |
91 void set_relative_tolerance (double val) { x_relative_tolerance = val; } | |
92 | |
93 double absolute_tolerance (void) { return x_absolute_tolerance; } | |
94 double relative_tolerance (void) { return x_relative_tolerance; } | |
95 | |
96 private: | |
97 | |
98 double x_absolute_tolerance; | |
99 double x_relative_tolerance; | |
100 }; | |
101 | 49 |
102 class | 50 class |
103 Quad : public Quad_options | 51 Quad : public Quad_options |
104 { | 52 { |
105 public: | 53 public: |
106 | 54 |
107 Quad (integrand_fcn fcn) | 55 Quad (integrand_fcn fcn) |
108 : Quad_options (), f (fcn) { } | 56 : Quad_options (), f (fcn) { } |
109 | |
110 Quad (integrand_fcn fcn, double abs, double rel) | |
111 : Quad_options (abs, rel), f (fcn) { } | |
112 | 57 |
113 virtual ~Quad (void) { } | 58 virtual ~Quad (void) { } |
114 | 59 |
115 virtual double integrate (void) | 60 virtual double integrate (void) |
116 { | 61 { |
153 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { } | 98 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), singularities () { } |
154 | 99 |
155 DefQuad (integrand_fcn fcn, double ll, double ul) | 100 DefQuad (integrand_fcn fcn, double ll, double ul) |
156 : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { } | 101 : Quad (fcn), lower_limit (ll), upper_limit (ul), singularities () { } |
157 | 102 |
158 DefQuad (integrand_fcn fcn, double ll, double ul, double abs, | |
159 double rel) | |
160 : Quad (fcn, abs, rel), lower_limit (ll), upper_limit (ul), | |
161 singularities () { } | |
162 | |
163 DefQuad (integrand_fcn fcn, double ll, double ul, | 103 DefQuad (integrand_fcn fcn, double ll, double ul, |
164 const ColumnVector& sing) | 104 const ColumnVector& sing) |
165 : Quad (fcn), lower_limit (ll), upper_limit (ul), | 105 : Quad (fcn), lower_limit (ll), upper_limit (ul), |
166 singularities (sing) { } | 106 singularities (sing) { } |
167 | 107 |
168 DefQuad (integrand_fcn fcn, const ColumnVector& sing, double abs, | |
169 double rel) | |
170 : Quad (fcn, abs, rel), lower_limit (0.0), upper_limit (1.0), | |
171 singularities (sing) { } | |
172 | |
173 DefQuad (integrand_fcn fcn, const ColumnVector& sing) | 108 DefQuad (integrand_fcn fcn, const ColumnVector& sing) |
174 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), | 109 : Quad (fcn), lower_limit (0.0), upper_limit (1.0), |
175 singularities (sing) { } | |
176 | |
177 DefQuad (integrand_fcn fcn, double ll, double ul, const ColumnVector& sing, | |
178 double abs, double rel) | |
179 : Quad (fcn, abs, rel), lower_limit (ll), upper_limit (ul), | |
180 singularities (sing) { } | 110 singularities (sing) { } |
181 | 111 |
182 ~DefQuad (void) { } | 112 ~DefQuad (void) { } |
183 | 113 |
184 double do_integrate (int& ier, int& neval, double& abserr); | 114 double do_integrate (int& ier, int& neval, double& abserr); |
202 : Quad (fcn), bound (0.0), type (bound_to_inf) { } | 132 : Quad (fcn), bound (0.0), type (bound_to_inf) { } |
203 | 133 |
204 IndefQuad (integrand_fcn fcn, double b, IntegralType t) | 134 IndefQuad (integrand_fcn fcn, double b, IntegralType t) |
205 : Quad (fcn), bound (b), type (t) { } | 135 : Quad (fcn), bound (b), type (t) { } |
206 | 136 |
207 IndefQuad (integrand_fcn fcn, double b, IntegralType t, double abs, | |
208 double rel) | |
209 : Quad (fcn, abs, rel), bound (b), type (t) { } | |
210 | |
211 IndefQuad (integrand_fcn fcn, double abs, double rel) | |
212 : Quad (fcn, abs, rel), bound (0.0), type (bound_to_inf) { } | |
213 | |
214 ~IndefQuad (void) { } | 137 ~IndefQuad (void) { } |
215 | 138 |
216 double do_integrate (int& ier, int& neval, double& abserr); | 139 double do_integrate (int& ier, int& neval, double& abserr); |
217 | 140 |
218 private: | 141 private: |