Mercurial > octave
annotate scripts/general/integral.m @ 29359:7854d5752dd2
maint: merge stable to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 10 Feb 2021 10:10:40 -0500 |
parents | a948253f9976 0a5b15007766 |
children | 796f54d4ddbf |
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 ## |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27961
diff
changeset
|
3 ## Copyright (C) 2017-2021 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{}) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
29 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
30 ## 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
|
31 ## adaptive quadrature. |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
32 ## |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
33 ## @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
|
34 ## 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
|
35 ## paths), and @code{quadv} (array-valued integrands) that is intended to |
28753 | 36 ## provide @sc{matlab} compatibility. More control of the numerical |
37 ## integration may be achievable by calling the various quadrature functions | |
38 ## directly. | |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
39 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
40 ## @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
|
41 ## 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
|
42 ## 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
|
43 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
44 ## @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
|
45 ## 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
|
46 ## 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
|
47 ## 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
|
48 ## the @qcode{"Waypoints"} option (see below). |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
49 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
50 ## Additional optional parameters can be specified using |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
51 ## @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
|
52 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
53 ## @table @code |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
54 ## @item Waypoints |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
55 ## 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
|
56 ## 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
|
57 ## 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
|
58 ## 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
|
59 ## |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
60 ## @item ArrayValued |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
61 ## @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
|
62 ## @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
|
63 ## @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
|
64 ## @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
|
65 ## @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
|
66 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
67 ## @item AbsTol |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
68 ## 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
|
69 ## 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
|
70 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
71 ## @item RelTol |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
72 ## 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
|
73 ## 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
|
74 ## @end table |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
75 ## |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
76 ## 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
|
77 ## following is satisfied: |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
78 ## @tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
79 ## $$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
|
80 ## @end tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
81 ## @ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
82 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
83 ## @example |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
84 ## @group |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
85 ## @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
|
86 ## @end group |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
87 ## @end example |
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 ## @end ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
90 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
91 ## Known @sc{matlab} incompatibilities: |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
92 ## |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
93 ## @enumerate |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
94 ## @item |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
95 ## 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
|
96 ## 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
|
97 ## 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
|
98 ## 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
|
99 ## @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
|
100 ## 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
|
101 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
102 ## @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
|
103 ## 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
|
104 ## 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
|
105 ## @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
|
106 ## @qcode{"Waypoints"}. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
107 ## @end enumerate |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
108 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
109 ## @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
|
110 ## dblquad, triplequad} |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
111 ## @end deftypefn |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
112 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
113 function q = integral (f, a, b, varargin) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
114 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
115 if (nargin < 3 || (mod (nargin, 2) == 0)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
116 print_usage (); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
117 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
118 |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
119 ## 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
|
120 ## 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
127 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
128 if (nargin == 3) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
129 ## 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
|
130 ## 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
|
131 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
|
132 try |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
133 q = quadcc (f, a, b); |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
134 catch quaderror |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
135 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
|
136 "quadcc: integrand F must return a single, real-valued vector")) |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
137 q = quadgk (f, a, b); |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
138 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
139 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
|
140 endif |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
141 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
|
142 |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
143 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
144 ## Complex-valued integral |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
145 q = quadgk (f, a, b); |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
146 endif |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
147 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
148 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
|
149 ## 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
|
150 abstol = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
151 reltol = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
152 waypoints = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
153 arrayvalued = false; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
154 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
155 idx = 1; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
156 while (idx < nargin - 3) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
157 prop = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
158 if (! ischar (prop)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
159 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
|
160 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
161 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
162 switch (tolower (prop)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
163 case "reltol" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
164 reltol = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
165 case "abstol" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
166 abstol = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
167 case "waypoints" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
168 waypoints = varargin{idx++}(:); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
169 case "arrayvalued" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
170 arrayvalued = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
171 otherwise |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
172 error ("integral: unknown property '%s'", prop); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
173 endswitch |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
174 endwhile |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
175 |
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
|
176 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
|
177 || 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
|
178 |
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
|
179 if (arrayvalued) |
24159
c4dac7a0da7e
integral.m: Remove specific code to preserve single type.
Rik <rik@octave.org>
parents:
24155
diff
changeset
|
180 ## 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
|
181 |
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
|
182 ## 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
|
183 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
|
184 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
|
185 "unable to handle WayPoints. WayPoints are ignored."]); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
186 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
187 |
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
|
188 ## 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
|
189 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
|
190 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
|
191 " RelTol ignored."]); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
192 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
|
193 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
|
194 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
|
195 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
196 |
24062
6570fdb7d3a0
integral.m: Pass tolerances to underlying integrators, correct precision in BIST tests (bug #42037).
Rik <rik@octave.org>
parents:
24059
diff
changeset
|
197 q = quadv (f, a, b, abstol); |
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
|
198 |
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 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 |
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
|
207 if (! isempty (waypoints)) |
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
|
208 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", 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
|
209 "WayPoints", waypoints); |
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
|
210 else |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
211 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
|
212 try |
29127
a948253f9976
maint: strip trailing spaces from code base.
Rik <rik@octave.org>
parents:
28958
diff
changeset
|
213 q = quadcc (f, a, b, [abstol, reltol]); |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
214 catch quaderror |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
215 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
|
216 "quadcc: integrand F must return a single, real-valued vector")) |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
217 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
218 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
219 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
|
220 endif |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
221 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
|
222 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
223 ## Complex-valued integral |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
224 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
225 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
|
226 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
227 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
228 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
229 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
230 endfunction |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
231 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
232 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
233 ## Matlab compatibility tests |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
234 %!test |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
235 %! 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
|
236 %! emgamma = 0.57721566490153286; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
237 %! 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
|
238 %! 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
|
239 %! 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
|
240 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
241 %!test # with parameter |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
242 %! 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
|
243 %! 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
|
244 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
245 %!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
|
246 %! f = @(x) log (x); |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
247 %! 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
|
248 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
249 %!test # waypoints |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
250 %! 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
|
251 %! 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
|
252 |
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
|
253 %!test # an array-valued function |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
254 %! f = @(x) sin ((1:5)*x); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
255 %! 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
|
256 %! 1e-10); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
257 |
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
|
258 %!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
|
259 %! 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
|
260 %! 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
|
261 %! 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
|
262 %! 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
|
263 %! 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
|
264 %! 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
|
265 %! 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
|
266 %! 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
|
267 |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
268 %!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
|
269 %! 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
|
270 %! 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
|
271 %! 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
|
272 %! 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
|
273 %! 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
|
274 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
275 %!test |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
276 %! 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
|
277 %! 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
|
278 |
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
|
279 ## 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
|
280 %!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
|
281 %!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
|
282 %!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
|
283 %!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
|
284 %!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
|
285 %!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
|
286 %!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
|
287 %! "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
|
288 %! 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
|
289 %!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
|
290 %!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
|
291 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
292 ## 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
|
293 %!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
|
294 %! 0, 1e-6) |
27961
27a5cc0614f1
integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
295 %!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
|
296 %!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
|
297 %! complex (0, pi), 1e-10) |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
298 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
299 ## tests from quadv |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
300 ## 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
|
301 %!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
|
302 %! [2, 0], 1e-10) |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
303 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
304 ## Test matrix-valued functions |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
305 %!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
|
306 %! 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
|
307 %! [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
|
308 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
309 ## Test input validation |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
310 %!error integral (@sin) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
311 %!error integral (@sin, 0) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
312 %!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
|
313 %!error integral (@sin, 0, 1, "DummyArg") |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
314 %!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
|
315 %!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
|
316 %!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
|
317 %!error integral (@sin, 0, 1, "AbsTol", -1) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
318 %!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
|
319 %!error integral (@sin, 0, 1, "RelTol", -1) |