Mercurial > octave
annotate scripts/general/integral3.m @ 32886:2da9214df7a4 stable
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
* scripts/general/integral2.m, quad2d.m: Correct description of integrand f to
indicate requirement for elementwise operation and describe workarounds with
'vectorized' option. Expand vectorized option description to explain option
and potential costs. Add third example demonstrating incorrect results and
corrective options for nonvectorized integrands.
* scripts/general/integral3.m: Make same changes as above. Correct docstring
entries still referring to 2-D operation.
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Wed, 31 Jan 2024 00:21:31 -0500 |
parents | 2e484f9f1f18 |
children |
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 ## |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
32002
diff
changeset
|
3 ## Copyright (C) 2017-2024 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27800
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/>. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
7 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
8 ## This file is part of Octave. |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
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:
24158
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
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:
24158
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
13 ## (at your option) any later version. |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
14 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
18 ## GNU General Public License for more details. |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
19 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
20 ## You should have received a copy of the GNU General Public License |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
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:
24158
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 ######################################################################## |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
25 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
26 ## -*- texinfo -*- |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
27 ## @deftypefn {} {@var{q} =} integral3 (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
28 ## @deftypefnx {} {@var{q} =} integral3 (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb}, @var{prop}, @var{val}, @dots{}) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
29 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
30 ## Numerically evaluate the three-dimensional integral of @var{f} using |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
31 ## adaptive quadrature over the three-dimensional domain defined by |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
32 ## @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{za}, @var{zb} (scalars may |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
33 ## be finite or infinite). Additionally, @var{ya} and @var{yb} may be |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
34 ## scalar functions of @var{x} and @var{za}, and @var{zb} maybe be scalar |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
35 ## functions of @var{x} and @var{y}, allowing for integration over |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
36 ## non-rectangular domains. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
37 ## |
32886
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
38 ## @var{f} is a function handle, inline function, or string containing the |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
39 ## name of the function to evaluate. The function @var{f} must be of the form |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
40 ## @math{z = f(x,y,z)}, and all operations must be vectorized such that |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
41 ## @var{x}, @var{y}, and @var{z} accept array inputs and return array outputs |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
42 ## of the same size. (It can be assumed that @var{x}, @var{y}, and @var{z} |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
43 ## will either be same-size arrays or scalars.) The underlying integrators |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
44 ## will input arrays of integration points into @var{f} and/or use internal |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
45 ## vector expansions to speed computation that can produce unpredictable |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
46 ## results if @var{f} is not restricted to elementwise operations. For |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
47 ## integrands where this is unavoidable, the @qcode("Vectorized") option |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
48 ## described below may produce more reliable results. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
49 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
50 ## Additional optional parameters can be specified using |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
51 ## @qcode{"@var{property}", @var{value}} pairs. Valid properties are: |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
52 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
53 ## @table @code |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
54 ## @item AbsTol |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
55 ## 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:
diff
changeset
|
56 ## value 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:
diff
changeset
|
57 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
58 ## @item RelTol |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
59 ## 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:
diff
changeset
|
60 ## value is 1e-6 (1e-4 for single). |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
61 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
62 ## @item Method |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
63 ## Specify the two-dimensional integration method to be used, with valid |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
64 ## options being @qcode{"auto"} (default), @qcode{"tiled"}, or |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
65 ## @qcode{"iterated"}. When using @qcode{"auto"}, Octave will choose the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
66 ## @qcode{"tiled"} method unless any of the integration limits are infinite. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
67 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
68 ## @item Vectorized |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
69 ## Enable or disable vectorized integration. A value of @code{false} forces |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
70 ## Octave to use only scalar inputs when calling the integrand, which enables |
32886
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
71 ## integrands @math{f(x,y,z)} that have not been vectorized or only accept |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
72 ## scalar values of @var{x}, @var{y}, or @var{z}. The default value is |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
73 ## @code{true}. Note that this is achieved by wrapping @math{f(x,y,z)} with |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
74 ## the function @code{arrayfun}, which may significantly decrease computation |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
75 ## speed. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
76 ## @end table |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
77 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
78 ## 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:
diff
changeset
|
79 ## following is satisfied: |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
80 ## @tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
81 ## $$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:
diff
changeset
|
82 ## @end tex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
83 ## @ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
84 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
85 ## @example |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
86 ## @group |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
87 ## @var{error} <= max (@var{AbsTol}, @var{RelTol}*|@var{q}|) |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
88 ## @end group |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
89 ## @end example |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
90 ## |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
91 ## @end ifnottex |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
92 ## |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
93 ## @var{err} is an approximate bound on the error in the integral |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
94 ## @code{abs (@var{q} - @var{I})}, where @var{I} is the exact value of the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
95 ## integral. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
96 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
97 ## Example 1 : integrate over a rectangular volume |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
98 ## |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
99 ## @example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
100 ## @group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
101 ## @var{f} = @@(@var{x},@var{y},@var{z}) ones (size (@var{x})); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
102 ## @var{q} = integral3 (@var{f}, 0, 1, 0, 1, 0, 1) |
26600
f6730533820e
doc: clean up doc example blocks for accuracy and consistent formatting
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
103 ## @result{} @var{q} = 1.00000 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
104 ## @end group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
105 ## @end example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
106 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
107 ## For this constant-value integrand, the result is a volume which is just |
25579
07c2c42f457e
doc: Miscellaneous documentation fixes all over the manual (bug #54288).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
108 ## @code{@var{Length} * @var{Width} * @var{Height}}. |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
109 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
110 ## Example 2 : integrate over a spherical volume |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
111 ## |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
112 ## @example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
113 ## @group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
114 ## @var{f} = @@(@var{x},@var{y}) ones (size (@var{x})); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
115 ## @var{ymax} = @@(@var{x}) sqrt (1 - @var{x}.^2); |
26600
f6730533820e
doc: clean up doc example blocks for accuracy and consistent formatting
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
116 ## @var{zmax} = @@(@var{x},@var{y}) sqrt (1 - @var{x}.^2 - @var{y}.^2); |
f6730533820e
doc: clean up doc example blocks for accuracy and consistent formatting
Mike Miller <mtmiller@octave.org>
parents:
26376
diff
changeset
|
117 ## @var{q} = integral3 (@var{f}, 0, 1, 0, @var{ymax}, 0, @var{zmax}) |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
118 ## @result{} @var{q} = 0.52360 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
119 ## @end group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
120 ## @end example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
121 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
122 ## For this constant-value integrand, the result is a volume which is 1/8th |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
123 ## of a unit sphere or @code{1/8 * 4/3 * pi}. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
124 ## |
32886
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
125 ## Example 3 : integrate a non-vectorized function over a cubic volume |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
126 ## |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
127 ## @example |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
128 ## @group |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
129 ## @var{f} = @@(@var{x},@var{y}) sinc (@var{x}) * sinc (@var{y}), * sinc (@var{z}); |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
130 ## @var{q} = integral3 (@var{f}, -1, 1, -1, 1, -1, 1) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
131 ## @result{} @var{q} = 14.535 (incorrect) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
132 ## @var{q} = integral3 (@var{f}, -1, 1, -1, 1, -1, 1, "Vectorized", false) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
133 ## @result{} @var{q} = 1.6388 (correct) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
134 ## @var{f} = @@(@var{x},@var{y},@var{z}) sinc (@var{x}) .* sinc (@var{y}), .* sinc (@var{z}); |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
135 ## @var{q} = integral3 (@var{f}, -1, 1, -1, 1, -1, 1) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
136 ## @result{} @var{q} = 1.6388 (correct) |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
137 ## @end group |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
138 ## @end example |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
139 ## |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
140 ## The first result is incorrect as the non-elementwise operator between the |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
141 ## sinc functions in @var{f} create unintended matrix multiplications between |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
142 ## the internal integration arrays used by @code{integral3}. In the second |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
143 ## result, setting @qcode{"Vectorized"} to false forces @code{integral3} to |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
144 ## perform scalar internal operations to compute the integral, resulting in |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
145 ## the correct numerical result at the cost of about a 30x increase in |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
146 ## computation time. In the third result, vectorizing the integrand @var{f} |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
147 ## using the elementwise multiplication operator gets the correct result |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
148 ## without increasing computation time. |
2da9214df7a4
doc: Correct integrand restriction descriptions in integral funcs (bug #59403)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
32632
diff
changeset
|
149 ## |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
150 ## Programming Notes: If there are singularities within the integration region |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
151 ## it is best to split the integral and place the singularities on the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
152 ## boundary. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
153 ## |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
154 ## Known @sc{matlab} incompatibility: If tolerances are left unspecified, and |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
155 ## any integration limits are of type @code{single}, then Octave's integral |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
156 ## functions automatically reduce the default absolute and relative error |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
157 ## tolerances as specified above. If tighter tolerances are desired they |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
158 ## must be specified. @sc{matlab} leaves the tighter tolerances appropriate |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
159 ## for @code{double} inputs in place regardless of the class of the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
160 ## integration limits. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
161 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
162 ## Reference: @nospell{L.F. Shampine}, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
163 ## @cite{@sc{matlab} program for quadrature in 2D}, Applied Mathematics and |
27800
5a6a19a4e3da
doc: Use Texinfo non-sentence ending periods in citations.
Rik <rik@octave.org>
parents:
26600
diff
changeset
|
164 ## Computation, pp.@: 266--274, Vol 1, 2008. |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
165 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
166 ## @seealso{triplequad, integral, quad, quadgk, quadv, quadl, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
167 ## quadcc, trapz, integral2, quad2d, dblquad} |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
168 ## @end deftypefn |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
169 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
170 function q = integral3 (f, xa, xb, ya, yb, za, zb, varargin) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
171 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
172 if (nargin < 7 || mod (nargin, 2) == 0) |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
173 print_usage (); |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
174 endif |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
175 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
176 if (! is_function_handle (f)) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
177 print_usage (); |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
178 endif |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
179 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
180 if (! (isreal (xa) && isscalar (xa) && isreal (xb) && isscalar (xb))) |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
181 print_usage (); |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
182 endif |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
183 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
184 ## Check for single or double limits to set appropriate default tolerance. |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
185 issingle = (isa ([xa, xb], "single") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
186 || (! is_function_handle (ya) && isa (ya, "single")) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
187 || (! is_function_handle (yb) && isa (yb, "single")) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
188 || (! is_function_handle (za) && isa (za, "single")) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
189 || (! is_function_handle (zb) && isa (zb, "single"))); |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
190 |
24158
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
191 ## Communicate to downstream quadrature routines that at least one limit of |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
192 ## integration was of single type by casting xa, xb to single. |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
193 if (issingle) |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
194 xa = single (xa); |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
195 xb = single (xb); |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
196 endif |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
197 |
f9549e90d620
integral3.m: Return single type output if an input is of single type (bug #52243).
Rik <rik@octave.org>
parents:
24149
diff
changeset
|
198 ## Set default tolerances, and then update with any specified parameters. |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
199 if (issingle) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
200 abstol = 1e-5; |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
201 reltol = 1e-4; |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
202 else |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
203 abstol = 1e-10; |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
204 reltol = 1e-6; |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
205 endif |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
206 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
207 method = "auto"; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
208 vectorized = true; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
209 idx = 1; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
210 while (idx < nargin - 7) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
211 prop = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
212 if (! ischar (prop)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
213 error ("integral3: property PROP must be a string"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
214 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
215 |
32002
939e5d952675
Use upper/lower in preference to toupper/tolower to match Matlab.
Rik <rik@octave.org>
parents:
31706
diff
changeset
|
216 switch (lower (prop)) |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
217 case "abstol" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
218 abstol = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
219 if (! (isnumeric (abstol) && isscalar (abstol) && abstol >= 0)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
220 error ("integral3: AbsTol value must be a numeric scalar >= 0"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
221 endif |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
222 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
223 case "reltol" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
224 reltol = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
225 if (! (isnumeric (reltol) && isscalar (reltol) && reltol >= 0)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
226 error ("integral3: RelTol value must be a numeric scalar >= 0"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
227 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
228 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
229 case "method" |
32002
939e5d952675
Use upper/lower in preference to toupper/tolower to match Matlab.
Rik <rik@octave.org>
parents:
31706
diff
changeset
|
230 method = lower (varargin{idx++}); |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
231 if (! any (strcmp (method, {"auto", "iterated", "tiled"}))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
232 error ("integral3 : unrecognized method '%s'", method); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
233 endif |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
234 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
235 case "vectorized" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
236 vectorized = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
237 if (! (isscalar (vectorized) && isreal (vectorized))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
238 error ('integral3: Vectorized must be a logical value'); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
239 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
240 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
241 otherwise |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
242 error ("integral3: unknown property '%s'", prop); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
243 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
244 endswitch |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
245 endwhile |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
246 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
247 if (strcmp (method, "auto")) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
248 if (isinf (xa) || isinf (xb) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
249 || (! is_function_handle (ya) && isinf (ya)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
250 || (! is_function_handle (yb) && isinf (yb)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
251 || (! is_function_handle (za) && isinf (za)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
252 || (! is_function_handle (zb) && isinf (zb))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
253 method = "iterated"; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
254 else |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
255 method = "tiled"; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
256 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
257 endif |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
258 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
259 ## check upper and lower bounds of y |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
260 if (! is_function_handle (ya)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
261 if (! (isreal (ya) && isscalar (ya))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
262 error ("integral3: YA must be a real scalar or a function"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
263 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
264 ya = @(x) ya * ones (size (x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
265 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
266 if (! is_function_handle (yb)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
267 if (! (isreal (yb) && isscalar (yb))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
268 error ("integral3: YB must be a real scalar or a function"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
269 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
270 yb = @(x) yb * ones (size (x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
271 endif |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
272 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
273 ## check upper and lower bounds of z |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
274 if (! is_function_handle (za)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
275 if (! (isreal (za) && isscalar (za))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
276 error ("integral3: ZA must be a real scalar or a function"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
277 endif |
28912
0de38a6ef693
maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents:
28907
diff
changeset
|
278 za = @(x, y) za * ones (size (y)); |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
279 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
280 if (! is_function_handle (zb)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
281 if (! (isreal (zb) && isscalar (zb))) |
28928
ae7ce8358953
maint: Add semicolon to end of all warning() and error() invocations.
Rik <rik@octave.org>
parents:
28912
diff
changeset
|
282 error ("integral3: ZB must be a real scalar or a function"); |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
283 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
284 zb = @(x, y) zb * ones (size (y)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
285 endif |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
286 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
287 finner = @(x) inner (x, f, ya, yb, za, zb, vectorized, method, abstol, reltol); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
288 q = quadcc (finner, xa, xb, [abstol, reltol]); |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
289 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
290 endfunction |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
291 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
292 function q = inner (x, f, ya, yb, za, zb, vectorized, method, abstol, reltol) |
30379
363fb10055df
maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents:
30330
diff
changeset
|
293 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
294 q = zeros (size (x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
295 for i = 1 : length (x) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
296 za2 = @(y) za(x(i), y); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
297 zb2 = @(y) zb(x(i), y); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
298 f2 = @(y, z) f(x(i), y, z); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
299 if (! vectorized) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
300 f2 = @(y, z) arrayfun (f2, y, z); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
301 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
302 if (strcmp (method, "iterated")) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
303 finner_iter = @(y) inner_iterated (y, f2, za2, zb2, abstol, reltol); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
304 q(i) = quadcc (finner_iter, ya(x(i)), yb(x(i)), [abstol, reltol]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
305 else |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
306 q(i) = quad2d (f2, ya(x(i)), yb(x(i)), za2, zb2, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
307 "AbsTol", abstol, "RelTol", reltol); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
308 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
309 endfor |
30379
363fb10055df
maint: Style check m-files ahead of 7.1 release.
Rik <rik@octave.org>
parents:
30330
diff
changeset
|
310 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
311 endfunction |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
312 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
313 function q = inner_iterated (y, f2, za2, zb2, abstol, reltol) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
314 q = zeros (size (y)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
315 for i = 1 : length (y) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
316 q(i) = quadcc (@(z) f2(y(i), z), za2(y(i)), zb2(y(i)), [abstol, reltol]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
317 endfor |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
318 endfunction |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
319 |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
320 |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
321 ## method tests |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
322 %!shared f |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
323 %! f = @(x, y, z) x .* y .* z; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
324 |
28907
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
325 %!assert (integral3 (f, 0, 1, 0, 1, 0, 1), 0.125, 1e-10) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
326 %!assert (integral3 (f, 0, 1, 0, 1, 0, 1, "method", "tiled"), 0.125, 1e-10) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
327 %!assert (integral3 (f, 0, 1, 0, 1, 0, 1, "method", "iterated"), 0.125, 1e-10) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
328 %!assert (integral3 (f, 0, 1, 0, 1, 0, 1, "method", "auto"), 0.125, 1e-10) |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
329 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
330 ## vectorized = false test |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
331 %!test |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
332 %! f = @(x, y, z) x * y * z; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
333 %! assert (integral3 (f, 0, 1, 0, 1, 0, 1, "vectorized", false), 0.125, 1e-10); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
334 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
335 ## tolerance tests |
24149
1a3229a2f1ab
integral2.m, integral3.m: Clean up BIST tests.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
336 %!test |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
337 %! f = @(x, y, z) 2 * x.^2 + 3 * y.^2 + 4 * z.^2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
338 %!assert (integral3 (f, 0, 5, -5, 0, 0, 5, "AbsTol", 1e-9), 9375, 1e-9) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
339 %!assert (integral3 (f, 0, 5, -5, 0, 0, 5, "RelTol", 1e-5), 9375, -1e-5) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
340 %!assert (integral3 (f, 0, 5, -5, 0, 0, 5, "RelTol", 1e-6, "AbsTol", 1e-9), |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
341 %! 9375, 1e-9) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
342 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
343 ## non-rectangular region |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
344 ## This test is too slow with "iterated" method |
24149
1a3229a2f1ab
integral2.m, integral3.m: Clean up BIST tests.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
345 %!test |
1a3229a2f1ab
integral2.m, integral3.m: Clean up BIST tests.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
346 %! f = @(x,y,z) 1 ./ (x + y + z); |
1a3229a2f1ab
integral2.m, integral3.m: Clean up BIST tests.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
347 %! ymax = @(x) 1 - x; |
1a3229a2f1ab
integral2.m, integral3.m: Clean up BIST tests.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
348 %! zmax = @(x, y) 1 - x - y; |
30330
01de0045b2e3
maint: Shorten some long lines to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
349 %! assert (integral3 (f, 0, 1, 0, ymax, 0, zmax, "method", "tiled"), |
01de0045b2e3
maint: Shorten some long lines to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
350 %! 0.25, 1e-6); |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
351 |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
352 ## Test input validation |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
353 %!error integral3 |
24102
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
354 %!error integral3 (@plus) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
355 %!error integral3 (@plus, 1) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
356 %!error integral3 (@plus, 1, 2) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
357 %!error integral3 (@plus, 1, 2, 3) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
358 %!error integral3 (@plus, 1, 2, 3, 4) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
359 %!error integral3 (@plus, 1, 2, 3, 4, 5) |
c723faa56ab4
Add missing functions integral2.m and integral3.m (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
360 %!error integral3 (@plus, 1, 2, 3, 4, 5, 6, "foo") |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
361 %!error integral3 (0, 1, 2, 3, 4, 5, 6) # f must be a function handle |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
362 %!error integral3 (@plus, 1i, 2, 3, 4, 5, 6) # real limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
363 %!error integral3 (@plus, 1, 2i, 3, 4, 5, 6) # real limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
364 %!error integral3 (@plus, [1 1], 2, 3, 4, 5, 6) # scalar limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
365 %!error integral3 (@plus, 1, [2 2], 3, 4, 5, 6) # scalar limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
366 %!error <property PROP must be a string> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
367 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, 99, "bar"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
368 %!error <AbsTol value must be a numeric> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
369 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "AbsTol", "foo"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
370 %!error <AbsTol value must be a .* scalar> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
371 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "AbsTol", [1, 2]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
372 %!error <AbsTol value must be.* .= 0> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
373 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "AbsTol", -1); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
374 %!error <RelTol value must be a numeric> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
375 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "RelTol", "foo"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
376 %!error <RelTol value must be a .* scalar> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
377 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "RelTol", [1, 2]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
378 %!error <RelTol value must be.* .= 0> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
379 %! integral3 (@plus, 1, 2, 3, 4, 5, 6, "RelTol", -1); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
380 %!error <unrecognized method 'foo'> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
381 %! integral3 (@plus,1,2,3,4,5,6, "method", "foo"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
382 %!error <Vectorized must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
383 %! integral3 (@plus,1,2,3,4,5,6, "Vectorized", [0 1]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
384 %!error <Vectorized must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
385 %! integral3 (@plus,1,2,3,4,5,6, "Vectorized", {true}); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
386 %!error <unknown property 'foo'> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
387 %! integral3 (@plus, 1, 2, 3, 4, 6, 6, "foo", "bar"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
388 %!error <YA must be a real scalar> integral3 (@plus, 1, 2, 3i, 4, 5, 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
389 %!error <YA must be a real scalar> integral3 (@plus, 1, 2, [3 3], 4, 5, 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
390 %!error <YB must be a real scalar> integral3 (@plus, 1, 2, 3, 4i, 5, 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
391 %!error <YB must be a real scalar> integral3 (@plus, 1, 2, 3, [4 4], 5, 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
392 %!error <ZA must be a real scalar> integral3 (@plus, 1, 2, 3, 4, 5i, 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
393 %!error <ZA must be a real scalar> integral3 (@plus, 1, 2, 3, 4, [5 5], 6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
394 %!error <ZB must be a real scalar> integral3 (@plus, 1, 2, 3, 4, 5, 6i) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
24102
diff
changeset
|
395 %!error <ZB must be a real scalar> integral3 (@plus, 1, 2, 3, 4, 5, [6 6]) |