Mercurial > hg > octave-lyh
diff scripts/general/triplequad.m @ 12612:16cca721117b stable
doc: Update all documentation for chapter on Numerical Integration
* cumtrapz.m, dblquad.m, quadgk.m, quadl.m, quadv.m, trapz.m,
triplequad.m, quad.cc, quadcc.cc: Improve docstrings.
* Quad-opts.in: Keep code sample together on a single line.
* mk-opts.pl: Update quad-options function description
* octave.texi: Update order of detailmenu to match order in quad.texi.
* quad.txi: Add language about when to use each quad function,
add examples of using trapz.
* aspell-octave.en.pws: Add new spelling words from quad.texi chapter
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Sun, 17 Apr 2011 19:57:07 -0700 |
parents | d0b799dafede |
children | 0713ad019e53 f96b9b9f141b |
line wrap: on
line diff
--- a/scripts/general/triplequad.m +++ b/scripts/general/triplequad.m @@ -17,23 +17,34 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} triplequad (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}, @var{tol}, @var{quadf}, @dots{}) -## Numerically evaluate a triple integral. The function over which to -## integrate is defined by @code{@var{f}}, and the interval for the -## integration is defined by @code{[@var{xa}, @var{xb}, @var{ya}, -## @var{yb}, @var{za}, @var{zb}]}. The function @var{f} must accept a -## vector @var{x} and a scalar @var{y}, and return a vector of the same -## length as @var{x}. +## @deftypefn {Function File} {} triplequad (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}) +## @deftypefnx {Function File} {} triplequad (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}, @var{tol}) +## @deftypefnx {Function File} {} triplequad (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}, @var{tol}, @var{quadf}) +## @deftypefnx {Function File} {} triplequad (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}, @var{tol}, @var{quadf}, @dots{}) +## Numerically evaluate the triple integral of @var{f}. +## @var{f} is a function handle, inline function, or string +## containing the name of the function to evaluate. The function @var{f} must +## have the form @math{w = f(x,y,z)} where either @var{x} or @var{y} is a +## vector and the remaining inputs are scalars. It should return a vector of +## the same length and orientation as @var{x} or @var{y}. ## -## If defined, @var{tol} defines the absolute tolerance to which to -## which to integrate each sub-integral. +## @var{xa}, @var{ya}, @var{za} and @var{xb}, @var{yb}, @var{zb} are the lower +## and upper limits of integration for x, y, and z respectively. The +## underlying integrator determines whether infinite bounds are accepted. +## +## The optional argument @var{tol} defines the absolute tolerance used to +## integrate each sub-integral. The default value is @math{1e^{-6}}. +## +## The optional argument @var{quadf} specifies which underlying integrator +## function to use. Any choice but @code{quad} is available and the default +## is @code{quadgk}. ## ## Additional arguments, are passed directly to @var{f}. To use the default -## value for @var{tol} one may pass an empty matrix. +## value for @var{tol} or @var{quadf} one may pass an empty matrix ([]). ## @seealso{dblquad, quad, quadv, quadl, quadgk, quadcc, trapz} ## @end deftypefn -function Q = triplequad(f, xa, xb, ya, yb, za, zb, tol, quadf, varargin) +function q = triplequad(f, xa, xb, ya, yb, za, zb, tol, quadf, varargin) if (nargin < 7) print_usage (); endif @@ -50,13 +61,13 @@ varargin = {}; endif - Q = dblquad(@(y, z) inner (y, z, f, xa, xb, tol, quadf, varargin{:}),ya, yb, za, zb, tol); + q = dblquad(@(y, z) inner (y, z, f, xa, xb, tol, quadf, varargin{:}),ya, yb, za, zb, tol); endfunction -function Q = __triplequad_inner__ (y, z, f, xa, xb, tol, quadf, varargin) - Q = zeros (size(y)); +function q = __triplequad_inner__ (y, z, f, xa, xb, tol, quadf, varargin) + q = zeros (size(y)); for i = 1 : length (y) - Q(i) = feval (quadf, @(x) f (x, y(i), z, varargin{:}), xa, xb, tol); + q(i) = feval (quadf, @(x) f (x, y(i), z, varargin{:}), xa, xb, tol); endfor endfunction @@ -64,3 +75,4 @@ % !#assert (triplequad (@(x,y,z) exp(-x.^2 - y.^2 - z.^2) , -1, 1, -1, 1, -1, 1, [], @quadgk), pi ^ (3/2) * erf(1).^3, 1e-6) % !#assert (triplequad (@(x,y,z) exp(-x.^2 - y.^2 - z.^2) , -1, 1, -1, 1, -1, 1, [], @quadl), pi ^ (3/2) * erf(1).^3, 1e-6) % !#assert (triplequad (@(x,y,z) exp(-x.^2 - y.^2 - z.^2) , -1, 1, -1, 1, -1, 1, [], @quadv), pi ^ (3/2) * erf(1).^3, 1e-6) +