Mercurial > octave
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 |
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 | 37 ## provide @sc{matlab} compatibility. More control of the numerical |
38 ## integration may be achievable by calling the various quadrature functions | |
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) |