182 int nargin = args.
length ();
184 if (nargin < 3 || nargin > 5)
187 warned_imaginary =
false;
193 error (
"quad: invalid recursive call");
199 if (args(1).is_single_type () || args(2).is_single_type ())
201 float a = args(1).xfloat_value (
"quad: lower limit of integration A must be a scalar");
202 float b = args(2).xfloat_value (
"quad: upper limit of integration B must be a scalar");
208 if (math::isinf (a) && math::isinf (b))
213 else if (math::isinf (a))
219 else if (math::isinf (b))
230 bool have_sing =
false;
238 error (
"quad: singularities not allowed on infinite intervals");
242 sing = args(4).xfloat_vector_value (
"quad: fifth argument SING must be a vector of singularities");
246 tol = args(3).xfloat_vector_value (
"quad: TOL must be a 1 or 2-element vector");
248 switch (tol.
numel ())
251 quad_opts.set_single_precision_relative_tolerance (tol (1));
255 quad_opts.set_single_precision_absolute_tolerance (tol (0));
259 error (
"quad: TOL must be a 1 or 2-element vector");
268 iq.set_options (quad_opts);
276 dq.set_options (quad_opts);
282 dq.set_options (quad_opts);
289 error (
"quad: unexpected nargin = %d - please report this bug", nargin);
293 retval =
ovl (val, ier, nfev, abserr);
298 double a = args(1).xdouble_value (
"quad: lower limit of integration A must be a scalar");
299 double b = args(2).xdouble_value (
"quad: upper limit of integration B must be a scalar");
304 if (math::isinf (a) && math::isinf (b))
309 else if (math::isinf (a))
315 else if (math::isinf (b))
326 bool have_sing =
false;
334 error (
"quad: singularities not allowed on infinite intervals");
338 sing = args(4).xvector_value (
"quad: fifth argument SING must be a vector of singularities");
342 tol = args(3).xvector_value (
"quad: TOL must be a 1 or 2-element vector");
344 switch (tol.
numel ())
347 quad_opts.set_relative_tolerance (tol (1));
351 quad_opts.set_absolute_tolerance (tol (0));
355 error (
"quad: TOL must be a 1 or 2-element vector");
362 IndefQuad iq (quad_user_function, bound, indef_type);
363 iq.set_options (quad_opts);
370 DefQuad dq (quad_user_function, a, b, sing);
371 dq.set_options (quad_opts);
376 DefQuad dq (quad_user_function, a, b);
377 dq.set_options (quad_opts);
384 error (
"quad: unexpected nargin = %d - please report this bug", nargin);
388 retval =
ovl (val, ier, nfev, abserr);
octave_value_list feval(const char *name, const octave_value_list &args=octave_value_list(), int nargout=0)
Evaluate an Octave function (built-in or interpreted) and return the list of result values.
#define DEFMETHODX(name, fname, interp_name, args_name, nargout_name, doc)
Macro to define a builtin method with certain internal name.