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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
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])