comparison libinterp/corefcn/quadcc.cc @ 21966:112b20240c87

move docstrings in C++ files out of C strings and into comments * __contourc__.cc, __dispatch__.cc, __dsearchn__.cc, __ichol__.cc, __ilu__.cc, __lin_interpn__.cc, __luinc__.cc, __magick_read__.cc, __pchip_deriv__.cc, __qp__.cc, balance.cc, besselj.cc, betainc.cc, bitfcns.cc, bsxfun.cc, cellfun.cc, colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, data.cc, debug.cc, defaults.cc, det.cc, dirfns.cc, dlmread.cc, dot.cc, eig.cc, ellipj.cc, error.cc, fft.cc, fft2.cc, fftn.cc, file-io.cc, filter.cc, find.cc, gammainc.cc, gcd.cc, getgrent.cc, getpwent.cc, getrusage.cc, givens.cc, graphics.cc, hash.cc, help.cc, hess.cc, hex2num.cc, input.cc, inv.cc, kron.cc, load-path.cc, load-save.cc, lookup.cc, ls-oct-text.cc, lsode.cc, lu.cc, mappers.cc, matrix_type.cc, max.cc, mgorth.cc, nproc.cc, oct-hist.cc, octave-link.cc, ordschur.cc, pager.cc, pinv.cc, pr-output.cc, profiler.cc, psi.cc, pt-jit.cc, quad.cc, quadcc.cc, qz.cc, rand.cc, rcond.cc, regexp.cc, schur.cc, sighandlers.cc, sparse.cc, spparms.cc, sqrtm.cc, str2double.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symtab.cc, syscalls.cc, sysdep.cc, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, urlwrite.cc, utils.cc, variables.cc, __delaunayn__.cc, __eigs__.cc, __fltk_uigetfile__.cc, __glpk__.cc, __init_fltk__.cc, __init_gnuplot__.cc, __osmesa_print__.cc, __voronoi__.cc, amd.cc, audiodevinfo.cc, audioread.cc, ccolamd.cc, chol.cc, colamd.cc, convhulln.cc, dmperm.cc, fftw.cc, qr.cc, symbfact.cc, symrcm.cc, ov-base.cc, ov-bool-mat.cc, ov-cell.cc, ov-class.cc, ov-classdef.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-flt-re-mat.cc, ov-int16.cc, ov-int32.cc, ov-int64.cc, ov-int8.cc, ov-java.cc, ov-null-mat.cc, ov-oncleanup.cc, ov-range.cc, ov-re-mat.cc, ov-struct.cc, ov-typeinfo.cc, ov-uint16.cc, ov-uint32.cc, ov-uint64.cc, ov-uint8.cc, ov-usr-fcn.cc, ov.cc, octave.cc, pt-arg-list.cc, pt-binop.cc, pt-eval.cc, pt-mat.cc, lex.ll, oct-parse.in.yy: Docstrings are now comments instead of C strings. * build-aux/mk-opts.pl: Emit docstrings as comments instead of C strings. * DASPK-opts.in, LSODE-opts.in: Don't quote " in docstring fragments. * builtins.h: Include builtin-defun-decls.h unconditionally. * defun.h (DEFUN, DEFUNX, DEFCONSTFUN): Simply emit declaration. (DEFALIAS): Always expand to nothing. * defun-dld.h: No special macro expansions for MAKE_BUILTINS. (DEFUN_DLD): Use FORWARD_DECLARE_FUN. (DEFUNX_DLD): Use FORWARD_DECLARE_FUNX. * defun-int.h: No special macro expansions for MAKE_BUILTINS. (FORWARD_DECLARE_FUN, FORWARD_DECLARE_FUNX): New macros. (DEFINE_FUN_INSTALLER_FUN): If compiling an Octave source file, pass "external-doc" to DEFINE_FUNX_INSTALLER_FUN. (DEFUN_INTERNAL, DEFCONSTFUN_INTERNAL, DEFUNX_INTERNAL, DEFALIAS_INTERNAL): Delete. * common.mk (move_if_change_rule): New macro. (simple_move_if_change_rule): Define using move_if_change_rule. * find-defun-files.sh (DEFUN_PATTERN): Update. Don't transform file name extension to ".df". * libinterp/mk-pkg-add, gendoc.pl: Operate directly on source files. * mkbuiltins: New argument, SRCDIR. Operate directly on source files. * mkdefs: Delete. * libinterp/module.mk (BUILT_SOURCES): Update list to contain only files included in other source files. (GENERATED_MAKE_BUILTINS_INCS, DEF_FILES): Delete. (LIBINTERP_BUILT_DISTFILES): Include $(OPT_HANDLERS) here. (LIBINTERP_BUILT_NODISTFILES): Not here. Remove $(ALL_DEF_FILES from the list. (libinterp_EXTRA_DIST): Remove mkdefs from the list. (FOUND_DEFUN_FILES): Rename from SRC_DEF_FILES. (DLDFCN_DEFUN_FILES): Rename from DLDFCN_DEF_FILES. (SRC_DEFUN_FILES): Rename from SRC_DEF_FILES. (ALL_DEFUN_FILES): Rename from ALL_DEF_FILES. (%.df: %.cc): Delete pattern rule. (libinterp/build-env-features.cc, libinterp/builtins.cc, libinterp/dldfcn/PKG_ADD): Use mv instead of move-if-change. (libinterp/builtins.cc, libinterp/builtin-defun-decls.h): Update mkbuiltins command. ($(srcdir)/libinterp/DOCSTRINGS): Update gendoc.pl command. * liboctave/module.mk (BUILT_SOURCES): Don't include liboctave-build-info.cc in the list.
author John W. Eaton <jwe@octave.org>
date Tue, 21 Jun 2016 16:07:51 -0400
parents aab79a1885cc
children bac0d6f07a3e
comparison
equal deleted inserted replaced
21965:da218a61ce4a 21966:112b20240c87
1476 } 1476 }
1477 1477
1478 // The actual integration routine. 1478 // The actual integration routine.
1479 1479
1480 DEFUN (quadcc, args, , 1480 DEFUN (quadcc, args, ,
1481 "-*- texinfo -*-\n\ 1481 doc: /* -*- texinfo -*-
1482 @deftypefn {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b})\n\ 1482 @deftypefn {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b})
1483 @deftypefnx {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b}, @var{tol})\n\ 1483 @deftypefnx {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b}, @var{tol})
1484 @deftypefnx {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b}, @var{tol}, @var{sing})\n\ 1484 @deftypefnx {} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b}, @var{tol}, @var{sing})
1485 @deftypefnx {} {[@var{q}, @var{err}, @var{nr_points}] =} quadcc (@dots{})\n\ 1485 @deftypefnx {} {[@var{q}, @var{err}, @var{nr_points}] =} quadcc (@dots{})
1486 Numerically evaluate the integral of @var{f} from @var{a} to @var{b}\n\ 1486 Numerically evaluate the integral of @var{f} from @var{a} to @var{b}
1487 using doubly-adaptive @nospell{Clenshaw-Curtis} quadrature.\n\ 1487 using doubly-adaptive @nospell{Clenshaw-Curtis} quadrature.
1488 \n\ 1488
1489 @var{f} is a function handle, inline function, or string containing the name\n\ 1489 @var{f} is a function handle, inline function, or string containing the name
1490 of the function to evaluate. The function @var{f} must be vectorized and\n\ 1490 of the function to evaluate. The function @var{f} must be vectorized and
1491 must return a vector of output values if given a vector of input values.\n\ 1491 must return a vector of output values if given a vector of input values.
1492 For example,\n\ 1492 For example,
1493 \n\ 1493
1494 @example\n\ 1494 @example
1495 f = @@(x) x .* sin (1./x) .* sqrt (abs (1 - x));\n\ 1495 f = @@(x) x .* sin (1./x) .* sqrt (abs (1 - x));
1496 @end example\n\ 1496 @end example
1497 \n\ 1497
1498 @noindent\n\ 1498 @noindent
1499 which uses the element-by-element ``dot'' form for all operators.\n\ 1499 which uses the element-by-element ``dot'' form for all operators.
1500 \n\ 1500
1501 @var{a} and @var{b} are the lower and upper limits of integration. Either\n\ 1501 @var{a} and @var{b} are the lower and upper limits of integration. Either
1502 or both limits may be infinite. @code{quadcc} handles an inifinite limit\n\ 1502 or both limits may be infinite. @code{quadcc} handles an inifinite limit
1503 by substituting the variable of integration with @code{x = tan (pi/2*u)}.\n\ 1503 by substituting the variable of integration with @code{x = tan (pi/2*u)}.
1504 \n\ 1504
1505 The optional argument @var{tol} defines the relative tolerance used to stop\n\ 1505 The optional argument @var{tol} defines the relative tolerance used to stop
1506 the integration procedure. The default value is @math{1e^{-6}}.\n\ 1506 the integration procedure. The default value is @math{1e^{-6}}.
1507 \n\ 1507
1508 The optional argument @var{sing} contains a list of points where the\n\ 1508 The optional argument @var{sing} contains a list of points where the
1509 integrand has known singularities, or discontinuities\n\ 1509 integrand has known singularities, or discontinuities
1510 in any of its derivatives, inside the integration interval.\n\ 1510 in any of its derivatives, inside the integration interval.
1511 For the example above, which has a discontinuity at x=1, the call to\n\ 1511 For the example above, which has a discontinuity at x=1, the call to
1512 @code{quadcc} would be as follows\n\ 1512 @code{quadcc} would be as follows
1513 \n\ 1513
1514 @example\n\ 1514 @example
1515 int = quadcc (f, a, b, 1.0e-6, [ 1 ]);\n\ 1515 int = quadcc (f, a, b, 1.0e-6, [ 1 ]);
1516 @end example\n\ 1516 @end example
1517 \n\ 1517
1518 The result of the integration is returned in @var{q}.\n\ 1518 The result of the integration is returned in @var{q}.
1519 \n\ 1519
1520 @var{err} is an estimate of the absolute integration error.\n\ 1520 @var{err} is an estimate of the absolute integration error.
1521 \n\ 1521
1522 @var{nr_points} is the number of points at which the integrand was\n\ 1522 @var{nr_points} is the number of points at which the integrand was
1523 evaluated.\n\ 1523 evaluated.
1524 \n\ 1524
1525 If the adaptive integration did not converge, the value of @var{err} will be\n\ 1525 If the adaptive integration did not converge, the value of @var{err} will be
1526 larger than the requested tolerance. Therefore, it is recommended to verify\n\ 1526 larger than the requested tolerance. Therefore, it is recommended to verify
1527 this value for difficult integrands.\n\ 1527 this value for difficult integrands.
1528 \n\ 1528
1529 @code{quadcc} is capable of dealing with non-numeric values of the integrand\n\ 1529 @code{quadcc} is capable of dealing with non-numeric values of the integrand
1530 such as @code{NaN} or @code{Inf}. If the integral diverges, and\n\ 1530 such as @code{NaN} or @code{Inf}. If the integral diverges, and
1531 @code{quadcc} detects this, then a warning is issued and @code{Inf} or\n\ 1531 @code{quadcc} detects this, then a warning is issued and @code{Inf} or
1532 @code{-Inf} is returned.\n\ 1532 @code{-Inf} is returned.
1533 \n\ 1533
1534 Note: @code{quadcc} is a general purpose quadrature algorithm and, as such,\n\ 1534 Note: @code{quadcc} is a general purpose quadrature algorithm and, as such,
1535 may be less efficient for a smooth or otherwise well-behaved integrand than\n\ 1535 may be less efficient for a smooth or otherwise well-behaved integrand than
1536 other methods such as @code{quadgk}.\n\ 1536 other methods such as @code{quadgk}.
1537 \n\ 1537
1538 The algorithm uses @nospell{Clenshaw-Curtis} quadrature rules of increasing\n\ 1538 The algorithm uses @nospell{Clenshaw-Curtis} quadrature rules of increasing
1539 degree in each interval and bisects the interval if either the function does\n\ 1539 degree in each interval and bisects the interval if either the function does
1540 not appear to be smooth or a rule of maximum degree has been reached. The\n\ 1540 not appear to be smooth or a rule of maximum degree has been reached. The
1541 error estimate is computed from the L2-norm of the difference between two\n\ 1541 error estimate is computed from the L2-norm of the difference between two
1542 successive interpolations of the integrand over the nodes of the respective\n\ 1542 successive interpolations of the integrand over the nodes of the respective
1543 quadrature rules.\n\ 1543 quadrature rules.
1544 \n\ 1544
1545 Reference: @nospell{P. Gonnet}, @cite{Increasing the Reliability of Adaptive\n\ 1545 Reference: @nospell{P. Gonnet}, @cite{Increasing the Reliability of Adaptive
1546 Quadrature Using Explicit Interpolants}, ACM Transactions on\n\ 1546 Quadrature Using Explicit Interpolants}, ACM Transactions on
1547 Mathematical Software, Vol. 37, Issue 3, Article No. 3, 2010.\n\ 1547 Mathematical Software, Vol. 37, Issue 3, Article No. 3, 2010.
1548 @seealso{quad, quadv, quadl, quadgk, trapz, dblquad, triplequad}\n\ 1548 @seealso{quad, quadv, quadl, quadgk, trapz, dblquad, triplequad}
1549 @end deftypefn") 1549 @end deftypefn */)
1550 { 1550 {
1551 // Some constants that we will need. 1551 // Some constants that we will need.
1552 static const int n[4] = { 4, 8, 16, 32 }; 1552 static const int n[4] = { 4, 8, 16, 32 };
1553 static const int skip[4] = { 8, 4, 2, 1 }; 1553 static const int skip[4] = { 8, 4, 2, 1 };
1554 static const int idx[4] = { 0, 5, 14, 31 }; 1554 static const int idx[4] = { 0, 5, 14, 31 };