annotate scripts/general/integral.m @ 30978:e8ced722b19e

integral: Add optional output error argument (bug #62412) * /scripts/general/integral.m: Add optional second output argument that directly passes the error measurement from the underlying integrator. Add BISTs to test second argument. Update docstring with new behavior. * etc/NEWS.8.md: Note integral change under General improvements.
author Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
date Wed, 04 May 2022 22:51:33 -0400
parents 796f54d4ddbf
children 7711b5e38ebc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
3 ## Copyright (C) 2017-2022 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
7 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
8 ## This file is part of Octave.
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24159
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24159
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
13 ## (at your option) any later version.
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
14 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
18 ## GNU General Public License for more details.
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
19 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24159
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
25
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
26 ## -*- texinfo -*-
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
27 ## @deftypefn {} {@var{q} =} integral (@var{f}, @var{a}, @var{b})
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
28 ## @deftypefnx {} {@var{q} =} integral (@var{f}, @var{a}, @var{b}, @var{prop}, @var{val}, @dots{})
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
29 ## @deftypefnx {} {[@var{q}, @var{err}] =} integral (@dots{})
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
30 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
31 ## Numerically evaluate the integral of @var{f} from @var{a} to @var{b} using
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
32 ## adaptive quadrature.
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
33 ##
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
34 ## @code{integral} is a wrapper for @code{quadcc} (general real-valued, scalar
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
35 ## integrands and limits), @code{quadgk} (integrals with specified integration
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
36 ## paths), and @code{quadv} (array-valued integrands) that is intended to
28753
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28731
diff changeset
37 ## provide @sc{matlab} compatibility. More control of the numerical
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28731
diff changeset
38 ## integration may be achievable by calling the various quadrature functions
e82484e1b2f6 doc: grammarcheck documentation.
Rik <rik@octave.org>
parents: 28731
diff changeset
39 ## directly.
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
40 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
41 ## @var{f} is a function handle, inline function, or string containing the name
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
42 ## of the function to evaluate. The function @var{f} must be vectorized and
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
43 ## return a vector of output values when given a vector of input values.
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
44 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
45 ## @var{a} and @var{b} are the lower and upper limits of integration. Either
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
46 ## or both limits may be infinite or contain weak end singularities. If either
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
47 ## or both limits are complex, @code{integral} will perform a straight line
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
48 ## path integral. Alternatively, a complex domain path can be specified using
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
49 ## the @qcode{"Waypoints"} option (see below).
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
50 ##
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
51 ## The optional output @var{err} contains an integration quality measure from
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
52 ## the called integrator. This is an absolute error estimate from @code{quadcc}
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
53 ## and @code{quadgk}, and the number of function evaluations for array-valued
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
54 ## functions passed to @code{quadv}.
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
55 ##
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
56 ## Additional optional parameters can be specified using
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
57 ## @qcode{"@var{property}", @var{value}} pairs. Valid properties are:
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
58 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
59 ## @table @code
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
60 ## @item Waypoints
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
61 ## Specifies points to be used in defining subintervals of the quadrature
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
62 ## algorithm, or if @var{a}, @var{b}, or @var{waypoints} are complex then
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
63 ## the quadrature is calculated as a contour integral along a piecewise
28958
6fd6ad758b10 doc: Use @xref, @pxref rather than "see @code{}" in TexInfo.
Rik <rik@octave.org>
parents: 28912
diff changeset
64 ## continuous path. For more detail, @pxref{XREFquadgk,,@code{quadgk}}.
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
65 ##
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
66 ## @item ArrayValued
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
67 ## @code{integral} expects @var{f} to return a scalar value unless
24059
d8e2fffb371c doc: Fix missing braces in quad documentation (bug #52065).
Rik <rik@octave.org>
parents: 24055
diff changeset
68 ## @var{arrayvalued} is specified as true. This option will cause
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
69 ## @code{integral} to perform the integration over the entire array and return
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
70 ## @var{q} with the same dimensions as returned by @var{f}. For more detail
28958
6fd6ad758b10 doc: Use @xref, @pxref rather than "see @code{}" in TexInfo.
Rik <rik@octave.org>
parents: 28912
diff changeset
71 ## @pxref{XREFquadv,,@code{quadv}}.
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
72 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
73 ## @item AbsTol
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
74 ## Define the absolute error tolerance for the quadrature. The default
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
75 ## absolute tolerance is 1e-10 (1e-5 for single).
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
76 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
77 ## @item RelTol
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
78 ## Define the relative error tolerance for the quadrature. The default
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
79 ## relative tolerance is 1e-6 (1e-4 for single).
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
80 ## @end table
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
81 ##
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
82 ## Adaptive quadrature is used to minimize the estimate of error until the
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
83 ## following is satisfied:
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
84 ## @tex
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
85 ## $$error \leq \max \left( AbsTol, RelTol\cdot\vert q\vert \right)$$
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
86 ## @end tex
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
87 ## @ifnottex
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
88 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
89 ## @example
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
90 ## @group
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
91 ## @var{error} <= max (@var{AbsTol}, @var{RelTol}*|@var{q}|).
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
92 ## @end group
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
93 ## @end example
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
94 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
95 ## @end ifnottex
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
96 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
97 ## Known @sc{matlab} incompatibilities:
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
98 ##
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
99 ## @enumerate
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
100 ## @item
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
101 ## If tolerances are left unspecified, and any integration limits or waypoints
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
102 ## are of type @code{single}, then Octave's integral functions automatically
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
103 ## reduce the default absolute and relative error tolerances as specified
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
104 ## above. If tighter tolerances are desired they must be specified.
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
105 ## @sc{matlab} leaves the tighter tolerances appropriate for @code{double}
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
106 ## inputs in place regardless of the class of the integration limits.
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
107 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
108 ## @item
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
109 ## As a consequence of using @code{quadcc}, @code{quadgk}, and @code{quadv},
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
110 ## certain option combinations are not supported. Currently,
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
111 ## @qcode{"ArrayValued"} cannot be combined with @qcode{"RelTol"} or
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
112 ## @qcode{"Waypoints"}.
24102
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
113 ## @end enumerate
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
114 ##
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
115 ## @seealso{integral2, integral3, quad, quadgk, quadv, quadl, quadcc, trapz,
c723faa56ab4 Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24062
diff changeset
116 ## dblquad, triplequad}
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
117 ## @end deftypefn
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
118
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
119 function [q, err] = integral (f, a, b, varargin)
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
120
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
121 if (nargin < 3 || (mod (nargin, 2) == 0))
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
122 print_usage ();
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
123 endif
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
124
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
125 error_flag = false;
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
126 if (nargout == 2)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
127 error_flag = true;
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
128 endif
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
129
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
130 ## quadcc can't handle complex limits or integrands, but quadgk & quadv can.
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
131 ## Check for simple cases of complex limits and integrand.
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
132 f_is_complex = false;
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
133 if (iscomplex (a) || iscomplex (b))
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
134 f_is_complex = true;
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
135 elseif (iscomplex (feval (f, a)) || iscomplex (feval (f, b)))
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
136 f_is_complex = true;
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
137 endif
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
138
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
139 if (nargin == 3)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
140 ## Pass the simplest case directly to general integrator.
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
141 ## Let quadcc function handle input checks on function and limits.
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
142 if (! f_is_complex)
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
143 try
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
144 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
145 [q, err] = quadcc (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
146 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
147 q = quadcc (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
148 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
149 catch quaderror
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
150 if (strcmp (quaderror.message,
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
151 "quadcc: integrand F must return a single, real-valued vector"))
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
152 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
153 [q, err] = quadgk (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
154 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
155 q = quadgk (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
156 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
157 else
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
158 error (quaderror.message);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
159 endif
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
160 end_try_catch
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
161
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
162 else
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
163 ## Complex-valued integral
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
164 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
165 [q, err] = quadgk (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
166 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
167 q = quadgk (f, a, b);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
168 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
169 endif
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
170
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
171 else
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
172 ## Parse options to determine how to call integrator.
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
173 abstol = [];
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
174 reltol = [];
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
175 waypoints = [];
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
176 arrayvalued = false;
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
177
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
178 idx = 1;
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
179 while (idx < nargin - 3)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
180 prop = varargin{idx++};
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
181 if (! ischar (prop))
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
182 error ("integral: property PROP must be a string");
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
183 endif
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
184
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
185 switch (tolower (prop))
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
186 case "reltol"
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
187 reltol = varargin{idx++};
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
188 case "abstol"
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
189 abstol = varargin{idx++};
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
190 case "waypoints"
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
191 waypoints = varargin{idx++}(:);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
192 case "arrayvalued"
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
193 arrayvalued = varargin{idx++};
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
194 otherwise
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
195 error ("integral: unknown property '%s'", prop);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
196 endswitch
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
197 endwhile
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
198
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
199 issingle = (isa (a, "single") || isa (b, "single")
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
200 || isa (waypoints, "single"));
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
201
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
202 if (arrayvalued)
24159
c4dac7a0da7e integral.m: Remove specific code to preserve single type.
Rik <rik@octave.org>
parents: 24155
diff changeset
203 ## Pass vector-valued function to quadv, checking for conflicting params
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
204
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
205 ## FIXME: Replace warning when have array compatible call with waypoints
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
206 if (! isempty (waypoints))
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28753
diff changeset
207 warning (["integral: array-valued quadrature routine currently ", ...
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
208 "unable to handle WayPoints. WayPoints are ignored."]);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
209 endif
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
210
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
211 ## FIXME: Remove warning once we have reltol compatible arrayval'd quadfn
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
212 if (! isempty (reltol))
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28753
diff changeset
213 warning (["integral: array-valued quadrature only accepts AbsTol.", ...
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
214 " RelTol ignored."]);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
215 endif
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
216 if (isempty (abstol))
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
217 abstol = ifelse (issingle, 1e-5, 1e-10);
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
218 endif
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
219 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
220 [q, err] = quadv (f, a, b, abstol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
221 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
222 q = quadv (f, a, b, abstol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
223 endif
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
224
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
225 else
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
226 if (isempty (abstol))
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
227 abstol = ifelse (issingle, 1e-5, 1e-10);
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
228 endif
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
229 if (isempty (reltol))
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
230 reltol = ifelse (issingle, 1e-4, 1e-6);
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
231 endif
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
232
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
233 if (! isempty (waypoints))
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
234 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
235 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol,
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
236 "WayPoints", waypoints);
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
237 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
238 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol,
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
239 "WayPoints", waypoints);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
240 endif
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
241
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
242 else
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
243 if (! f_is_complex)
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
244 try
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
245 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
246 [q, err] = quadcc (f, a, b, [abstol, reltol]);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
247 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
248 q = quadcc (f, a, b, [abstol, reltol]);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
249 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
250 catch quaderror
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
251 if (strcmp (quaderror.message,
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
252 "quadcc: integrand F must return a single, real-valued vector"))
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
253 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
254 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
255 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
256 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
257 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
258 else
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
259 error (quaderror.message);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
260 endif
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
261 end_try_catch
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
262 else
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
263 ## Complex-valued integral
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
264 if (error_flag)
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
265 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
266 else
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
267 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol);
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
268 endif
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
269 endif
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
270 endif
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
271 endif
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
272 endif
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
273
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
274 endfunction
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
275
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
276
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
277 ## Matlab compatibility tests
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
278 %!test
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
279 %! f = @(x) exp (-x.^2) .* log (x).^2;
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
280 %! emgamma = 0.57721566490153286;
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
281 %! exact = (sqrt (pi)*(8*log (2)^2+8*emgamma*log (2)+pi^2+2*emgamma^2))/16;
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
282 %! assert (integral (f, 0, Inf), exact, -1e-6);
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
283 %! assert (integral (f, 0, Inf, "RelTol", 1e-12), exact, -1e-12);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
284
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
285 %!test # with parameter
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
286 %! f = @(x, c) 1 ./ (x.^3 - 2*x - c);
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
287 %! assert (integral (@(x) f(x,5), 0, 2), -0.4605015338467329, 1e-10);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
288
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
289 %!test # with tolerances
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28753
diff changeset
290 %! f = @(x) log (x);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
291 %! assert (integral (@(x) f(x), 0, 1, "AbsTol", 1e-6), -1, 1e-6);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
292
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
293 %!test # waypoints
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
294 %! f = @(x) 1./(2.*x-1);
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
295 %! assert (integral (f, 0, 0, "Waypoints", [1+1i, 1-1i]), -pi*1i, 1e-10);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
296
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
297 %!test # an array-valued function
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
298 %! f = @(x) sin ((1:5)*x);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
299 %! assert (integral (f, 0, 1, "ArrayValued", true), 1./[1:5]-cos(1:5)./[1:5],
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
300 %! 1e-10);
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
301
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
302 %!test # test single input/output
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28753
diff changeset
303 %! assert (integral (@sin, 0, 1), cos (0)-cos (1), 1e-10);
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
304 %! assert (class (integral (@sin, single (0), 1)), "single");
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
305 %! assert (class (integral (@sin, 0, single (1))), "single");
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
306 %! assert (class (integral (@sin, single (0), single (1))), "single");
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28753
diff changeset
307 %! assert (integral (@sin, 0, 1, "Waypoints", 0.5), cos (0)-cos (1), 1e-10);
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
308 %! assert (class (integral (@sin, 0, 1, "Waypoints", single (0.5))), "single");
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
309 %! assert (class (integral (@sin, single (0), 1, "Waypoints", 0.5)), "single");
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
310 %! assert (class (integral (@sin, 0, single (1), "Waypoints", 0.5)), "single");
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
311
28731
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
312 %!test # test complex argument handling
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
313 %! f = @(x) round (exp (i*x));
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
314 %! assert (integral (f, 0, pi), quadgk (f, 0, pi), eps);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
315 %! assert (integral (f, -1, 1), 2, 5*eps);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
316 %! assert (integral (@sin, -i, i), 0, eps);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
317 %! assert (1.5 * integral (@sqrt, -1, 0), i, eps);
4f1e8a79bd44 integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 27961
diff changeset
318
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
319 %!test
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
320 %! f = @(x) x.^5 .* exp (-x) .* sin (x);
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
321 %! assert (integral (f, 0, inf, "RelTol", 1e-8, "AbsTol", 1e-12), -15, -1e-8);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
322
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
323 ## tests from quadcc
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
324 %!assert (integral (@sin, -pi, pi), 0, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
325 %!assert (integral (inline ("sin"), -pi, pi), 0, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
326 %!assert (integral ("sin", -pi, pi), 0, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
327 %!assert (integral (@sin, -pi, 0), -2, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
328 %!assert (integral (@sin, 0, pi), 2, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
329 %!assert (integral (@(x) 1./(sqrt (x).*(x+1)), 0, Inf), pi, -1e-6)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
330 %!assert (integral (@(x) 1./(sqrt (x).*(x+1)), 0, Inf,
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
331 %! "AbsTol", 0, "RelTol", 1e-8),
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
332 %! pi, -1e-8)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
333 %!assert (integral (@(x) exp (-x .^ 2), -Inf, Inf), sqrt (pi), 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
334 %!assert (integral (@(x) exp (-x .^ 2), -Inf, 0), sqrt (pi)/2, 1e-10)
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
335
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
336 ## tests from quadgk
24155
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
337 %!assert (integral (@sin,-pi,pi, "WayPoints",0, "AbsTol",1e-6, "RelTol",1e-3),
47dd094a6239 integral.m: Update to use recently changed quadcc and preserve type single (bug #42073).
Nicholas R. Jankowski <jankowskin@asme.org>
parents: 24102
diff changeset
338 %! 0, 1e-6)
27961
27a5cc0614f1 integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents: 27923
diff changeset
339 %!assert (integral (@(x) abs (1 - x.^2), 0, 2, "Waypoints", 1), 2, 1e-10)
27a5cc0614f1 integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents: 27923
diff changeset
340 %!assert (integral (@(z) log (z),1+1i,1+1i, "WayPoints", [1-1i, -1,-1i, -1+1i]),
27a5cc0614f1 integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents: 27923
diff changeset
341 %! complex (0, pi), 1e-10)
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
342
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
343 ## tests from quadv
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
344 ## Test vector-valued functions
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
345 %!assert (integral (@(x) [(sin (x)), (sin (2*x))], 0, pi, "ArrayValued", 1),
27961
27a5cc0614f1 integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents: 27923
diff changeset
346 %! [2, 0], 1e-10)
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
347
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
348 ## Test matrix-valued functions
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
349 %!test
24062
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
350 %! assert (integral (@(x) [x,x,x; x,exp(x),x; x,x,x], 0, 1, "ArrayValued", 1),
6570fdb7d3a0 integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents: 24059
diff changeset
351 %! [0.5,0.5,0.5; 0.5,(exp (1) - 1),0.5; 0.5,0.5,0.5], 1e-10);
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
352
30978
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
353 ##test 2nd output
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
354 %!test <*62412>
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
355 %! [~, err] = integral (@(x) ones (size (x)), 0, 1); ##quadcc
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
356 %! assert (err, 0, 5*eps); ## err ~3e-16
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
357 %! [~, err] = integral (@(x) ones (size (x)), 0, 1, "waypoints", 1); ##quadgk
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
358 %! assert (err, 0, 1000*eps); ## err ~7e-14
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
359 %! [~, err] = integral (@(x) ones (size (x)), 0, 1, "arrayvalued", true); ##quadv
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
360 %! assert (err, 0, 20); ## nfev ~13
e8ced722b19e integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
361
24055
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
362 ## Test input validation
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
363 %!error integral (@sin)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
364 %!error integral (@sin, 0)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
365 %!error integral (@sin, 0, 1, 1e-6, true, 4)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
366 %!error integral (@sin, 0, 1, "DummyArg")
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
367 %!error <property PROP must be a string> integral (@sin, 0, 1, 2, 3)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
368 %!error <unknown property 'foo'> integral (@sin, 0, 1, "foo", 3)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
369 %!error integral (@sin, 0, 1, "AbsTol", ones (2,2))
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
370 %!error integral (@sin, 0, 1, "AbsTol", -1)
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
371 %!error integral (@sin, 0, 1, "RelTol", ones (2,2))
2eae2ad53eb9 Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
372 %!error integral (@sin, 0, 1, "RelTol", -1)