Mercurial > octave
annotate scripts/general/integral.m @ 31063:451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
* integral.m: Modify integrator selection so that calls with ‘ArrayValued’ go
to quadgk instead of quadv. Remove error checks for previously incompatible
parameter combinations. Update docstring to remove mention of quadv, point
'ArrayValued' reference to quadgk, change returned error parameter description
to match current behavior, and remove parameter incompatibility note. Add BIST
to verify combined parameter functionality, and change BISTs checking quadv
err parameter.
* quadgk.m: Correct parameter name in docstring.
* NEWS.8.md: Under General Improvements add note about quadgk now accepting
'ArrayValued' parameter and update integral improvement description of
optional returned error parameter. Under Matlab Compatibility add note about
integral now accepting all parameter combinations.
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Thu, 02 Jun 2022 19:56:15 -0400 |
parents | 7711b5e38ebc |
children | b390f662a150 |
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 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
35 ## integrands and limits), and @code{quadgk} (integrals with specified |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
36 ## integration paths and array-valued integrands) that is intended to provide |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
37 ## @sc{matlab} compatibility. More control of the numerical integration may be |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
38 ## achievable by calling the various quadrature functions 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 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
65 ## @pxref{XREFquadgk,,@code{quadgk}}. |
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 ## |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
76 ## The optional output @var{err} contains the absolute error estimate used by |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
77 ## the called integrator. |
30983
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
78 ## |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
79 ## 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
|
80 ## following is satisfied: |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
81 ## @tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
82 ## $$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
|
83 ## @end tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
84 ## @ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
85 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
86 ## @example |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
87 ## @group |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
88 ## @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
|
89 ## @end group |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
90 ## @end example |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
91 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
92 ## @end ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
93 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
94 ## Known @sc{matlab} incompatibilities: |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
95 ## |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
96 ## @enumerate |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
97 ## @item |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
98 ## 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
|
99 ## 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
|
100 ## 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
|
101 ## 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
|
102 ## @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
|
103 ## 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
|
104 ## @end enumerate |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
105 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24062
diff
changeset
|
106 ## @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
|
107 ## dblquad, triplequad} |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
108 ## @end deftypefn |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
109 |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
110 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
|
111 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
112 if (nargin < 3 || (mod (nargin, 2) == 0)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
113 print_usage (); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
114 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
115 |
30983
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
116 error_flag = (nargout == 2); |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
117 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
118 ## quadcc can't handle complex limits or integrands, but quadgk can. |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
119 ## 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
126 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
127 if (nargin == 3) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
128 ## 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
|
129 ## 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
|
130 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
|
131 try |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
132 if (error_flag) |
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
133 [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
|
134 else |
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
135 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
|
136 endif |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
137 catch quaderror |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
138 if (strcmp (quaderror.message, |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
139 "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
|
140 if (error_flag) |
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
141 [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
|
142 else |
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
143 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
|
144 endif |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
145 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
146 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
|
147 endif |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
148 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
|
149 |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
150 else |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
151 ## Complex-valued integral |
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 endif |
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
158 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
159 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
|
160 ## 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
|
161 abstol = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
162 reltol = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
163 waypoints = []; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
164 arrayvalued = false; |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
165 use_quadgk = false; |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
166 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
167 idx = 1; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
168 while (idx < nargin - 3) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
169 prop = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
170 if (! ischar (prop)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
171 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
|
172 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
173 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
174 switch (tolower (prop)) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
175 case "reltol" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
176 reltol = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
177 case "abstol" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
178 abstol = varargin{idx++}; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
179 case "waypoints" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
180 waypoints = varargin{idx++}(:); |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
181 use_quadgk = true; |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
182 case "arrayvalued" |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
183 arrayvalued = varargin{idx++}; |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
184 use_quadgk = true; |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
185 otherwise |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
186 error ("integral: unknown property '%s'", prop); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
187 endswitch |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
188 endwhile |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
189 |
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
|
190 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
|
191 || 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
|
192 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
193 if (isempty (abstol)) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
194 abstol = ifelse (issingle, 1e-5, 1e-10); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
195 endif |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
196 if (isempty (reltol)) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
197 reltol = ifelse (issingle, 1e-4, 1e-6); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
198 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
199 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
200 if (use_quadgk) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
201 ## Array valued functions or waypoint definitions require quadgk |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
202 ## no need to test for complex components |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
203 if (error_flag) |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
204 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol, |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
205 "WayPoints", waypoints, "ArrayValued", arrayvalued); |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
206 else |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
207 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol, |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
208 "WayPoints", waypoints, "ArrayValued", arrayvalued); |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
209 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
|
210 |
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 else |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
212 ## otherwise try quadcc first, switch to quadgk if complex test fails |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
213 if (! f_is_complex) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
214 try |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
215 if (error_flag) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
216 [q, err] = quadcc (f, a, b, [abstol, reltol]); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
217 else |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
218 q = quadcc (f, a, b, [abstol, reltol]); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
219 endif |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
220 catch quaderror |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
221 if (strcmp (quaderror.message, |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
222 "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
|
223 if (error_flag) |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
224 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
225 else |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
226 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
227 endif |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
228 else |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
229 error (quaderror.message); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
230 endif |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
231 end_try_catch |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
232 else |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
233 ## Complex-valued integral |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
234 if (error_flag) |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
235 [q, err] = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
236 else |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
237 q = quadgk (f, a, b, "AbsTol", abstol, "RelTol", reltol); |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
238 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
|
239 endif |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
240 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
241 endif |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
242 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
243 endfunction |
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 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
246 ## Matlab compatibility tests |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
247 %!test |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
248 %! 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
|
249 %! emgamma = 0.57721566490153286; |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
250 %! 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
|
251 %! 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
|
252 %! 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
|
253 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
254 %!test # with parameter |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
255 %! 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
|
256 %! 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
|
257 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
258 %!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
|
259 %! f = @(x) log (x); |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
260 %! 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
|
261 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
262 %!test # waypoints |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
263 %! 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
|
264 %! 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
|
265 |
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
|
266 %!test # an array-valued function |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
267 %! f = @(x) sin ((1:5)*x); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
268 %! 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
|
269 %! 1e-10); |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
270 |
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
|
271 %!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
|
272 %! 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
|
273 %! 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
|
274 %! 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
|
275 %! 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
|
276 %! 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
|
277 %! 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
|
278 %! 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
|
279 %! 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
|
280 |
28731
4f1e8a79bd44
integral.m: Fix input validation to handle complex integrands (bug #58636).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
27961
diff
changeset
|
281 %!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
|
282 %! 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
|
283 %! 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
|
284 %! 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
|
285 %! 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
|
286 %! 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
|
287 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
288 %!test |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
289 %! 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
|
290 %! 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
|
291 |
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
|
292 ## 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
|
293 %!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
|
294 %!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
|
295 %!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
|
296 %!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
|
297 %!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
|
298 %!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
|
299 %!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
|
300 %! "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
|
301 %! 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
|
302 %!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
|
303 %!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
|
304 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
305 ## 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
|
306 %!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
|
307 %! 0, 1e-6) |
27961
27a5cc0614f1
integral.m: Fix failing BIST test after changes to quadgk.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
308 %!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
|
309 %!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
|
310 %! complex (0, pi), 1e-10) |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
311 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
312 ## 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
|
313 %!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
|
314 %! [2, 0], 1e-10) |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
315 |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
316 ## Test matrix-valued functions |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
317 %!assert (integral (@(x) [x,x,x; x,exp(x),x; x,x,x], 0, 1, "ArrayValued", 1), |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
318 %! [0.5,0.5,0.5; 0.5,(exp (1) - 1),0.5; 0.5,0.5,0.5], 1e-10); |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
319 |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
320 ## Test combined parameters |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
321 %!assert (integral (@(x) [sin(x), cos(x)], 0, pi, "ArrayValued", 1, |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
322 %! "Waypoints", [0.5]), [2, 0], eps); |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
323 |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
324 ##test 2nd output |
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
325 %!test <*62412> |
30983
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
326 %! [~, err] = integral (@(x) ones (size (x)), 0, 1); # quadcc |
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
327 %! assert (err, 0, 5*eps); # err ~3e-16 |
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
328 %! [~, err] = integral (@(x) ones (size (x)), 0, 1, "waypoints", 1); # quadgk |
7711b5e38ebc
integral.m: small coding convention tweaks to cset e8ced722b19e.
Rik <rik@octave.org>
parents:
30978
diff
changeset
|
329 %! assert (err, 0, 1000*eps); # err ~7e-14 |
31063
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
330 %! [~, err] = integral (@(x) ones (size (x)), 0, 1, "arrayvalued", true); # quadgk |
451fb63a10a0
update integral to call quadgk for 'ArrayValued' integrations (bug #62468)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30983
diff
changeset
|
331 %! assert (err, 0, 1000*eps); # err ~7e-14 |
30978
e8ced722b19e
integral: Add optional output error argument (bug #62412)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
30564
diff
changeset
|
332 |
24055
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
333 ## Test input validation |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
334 %!error integral (@sin) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
335 %!error integral (@sin, 0) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
336 %!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
|
337 %!error integral (@sin, 0, 1, "DummyArg") |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
338 %!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
|
339 %!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
|
340 %!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
|
341 %!error integral (@sin, 0, 1, "AbsTol", -1) |
2eae2ad53eb9
Add missing function integral.m (bug #42037).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
342 %!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
|
343 %!error integral (@sin, 0, 1, "RelTol", -1) |