Next: Orthogonal Collocation, Up: Quadrature

— Loadable Function: [`v`, `ier`, `nfun`, `err`] = **quad** (`f, a, b, tol, sing`)

Integrate a nonlinear function of one variable using Quadpack. The first argument is the name of the function, the function handle or the inline function to call to compute the value of the integrand. It must have the form

y = f (x)where

yandxare scalars.The second and third arguments are limits of integration. Either or both may be infinite.

The optional argument

tolis a vector that specifies the desired accuracy of the result. The first element of the vector is the desired absolute tolerance, and the second element is the desired relative tolerance. To choose a relative test only, set the absolute tolerance to zero. To choose an absolute test only, set the relative tolerance to zero.The optional argument

singis a vector of values at which the integrand is known to be singular.The result of the integration is returned in

vandiercontains an integer error code (0 indicates a successful integration). The value ofnfunindicates how many function evaluations were required, anderrcontains an estimate of the error in the solution.You can use the function

`quad_options`

to set optional parameters for`quad`

.

— Loadable Function: **quad_options** (`opt, val`)

When called with two arguments, this function allows you set options parameters for the function

`quad`

. Given one argument,`quad_options`

returns the value of the corresponding option. If no arguments are supplied, the names of all the available options and their current values are displayed.Options include

`"absolute tolerance"`

- Absolute tolerance; may be zero for pure relative error test.
`"relative tolerance"`

- Nonnegative relative tolerance. If the absolute tolerance is zero, the relative tolerance must be greater than or equal to
`max (50*eps, 0.5e-28)`

.

Here is an example of using `quad`

to integrate the function

f(x) =x* sin (1/x) * sqrt (abs (1 -x))

from `x` = 0 to `x` = 3.

This is a fairly difficult integration (plot the function over the range of integration to see why).

The first step is to define the function:

function y = f (x) y = x .* sin (1 ./ x) .* sqrt (abs (1 - x)); endfunction

Note the use of the `dot' forms of the operators. This is not necessary
for the call to `quad`

, but it makes it much easier to generate a
set of points for plotting (because it makes it possible to call the
function with a vector argument to produce a vector result).

Then we simply call quad:

[v, ier, nfun, err] = quad ("f", 0, 3) => 1.9819 => 1 => 5061 => 1.1522e-07

Although `quad`

returns a nonzero value for `ier`, the result
is reasonably accurate (to see why, examine what happens to the result
if you move the lower bound to 0.1, then 0.01, then 0.001, etc.).