annotate scripts/general/integral3.m @ 33623:4517f929c59d bytecode-interpreter tip

maint: Merge default to bytecode-interpreter
author Arun Giridhar <arungiridhar@gmail.com>
date Fri, 24 May 2024 16:22:41 -0400
parents 2da9214df7a4
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])