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: