Mercurial > octave
annotate scripts/general/quad2d.m @ 25579:07c2c42f457e stable
doc: Miscellaneous documentation fixes all over the manual (bug #54288).
* embedded.cc, defaults.cc, error.cc, hex2num.cc, load-save.cc, integral2.m,
integral3.m, quad2d.m, warning_ids.m, decic.m, lsqnonneg.m, pqpnonneg.m,
bicg.m, betaincinv.m: Removal of duplicate words and redundant ')' and ';'
characters. Added missing '"', ')' characters. Renamed variables to match
other occurrences in docstring. Use '*' instead of 'x' for multiply.
Surround variables with @var{}.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 11 Jul 2018 08:40:07 -0700 |
parents | 6652d3823428 |
children | 00f796120a6d |
rev | line source |
---|---|
25054
6652d3823428
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1 ## Copyright (C) 2017-2018 David Bateman |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
2 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
4 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24148
diff
changeset
|
5 ## Octave is free software: you can redistribute it and/or modify it |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
6 ## 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:
24148
diff
changeset
|
7 ## the Free Software Foundation, either version 3 of the License, or |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
8 ## (at your option) any later version. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
9 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
13 ## GNU General Public License for more details. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
14 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
16 ## 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:
24148
diff
changeset
|
17 ## <https://www.gnu.org/licenses/>. |
24148
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
18 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
20 ## @deftypefn {} {@var{q} =} quad2d (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
21 ## @deftypefnx {} {@var{q} =} quad2d (@var{f}, @var{xa}, @var{xb}, @var{ya}, @var{yb}, @var{prop}, @var{val}, @dots{}) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
22 ## @deftypefnx {} {[@var{q}, @var{err}, @var{iter}] =} quad2d (@dots{}) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
23 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
24 ## Numerically evaluate the two-dimensional integral of @var{f} using adaptive |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
25 ## quadrature over the two-dimensional domain defined by @var{xa}, @var{xb}, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
26 ## @var{ya}, @var{yb} using tiled integration. Additionally, @var{ya} and |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
27 ## @var{yb} may be scalar functions of @var{x}, allowing for the integration |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
28 ## over non-rectangular domains. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
29 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
30 ## @var{f} is a function handle, inline function, or string containing the name |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
31 ## of the function to evaluate. The function @var{f} must be of the form |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
32 ## @math{z = f(x,y)} where @var{x} is a vector and @var{y} is a scalar. It |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
33 ## should return a vector of the same length and orientation as @var{x}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
34 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
35 ## Additional optional parameters can be specified using |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
36 ## @qcode{"@var{property}", @var{value}} pairs. Valid properties are: |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
37 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
38 ## @table @code |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
39 ## @item AbsTol |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
40 ## Define the absolute error tolerance for the quadrature. The default |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
41 ## value is 1e-10 (1e-5 for single). |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
42 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
43 ## @item RelTol |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
44 ## Define the relative error tolerance for the quadrature. The default |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
45 ## value is 1e-6 (1e-4 for single). |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
46 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
47 ## @item MaxFunEvals |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
48 ## The maximum number of function calls to the vectorized function @var{f}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
49 ## The default value is 5000. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
50 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
51 ## @item Singular |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
52 ## Enable/disable transforms to weaken singularities on the edge of the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
53 ## integration domain. The default value is @var{true}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
54 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
55 ## @item Vectorized |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
56 ## Option to disable vectorized integration, forcing Octave to use only scalar |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
57 ## inputs when calling the integrand. The default value is @var{false}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
58 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
59 ## @item FailurePlot |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
60 ## If @code{quad2d} fails to converge to the desired error tolerance before |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
61 ## MaxFunEvals is reached, a plot of the areas that still need refinement |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
62 ## is created. The default value is @var{false}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
63 ## @end table |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
64 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
65 ## Adaptive quadrature is used to minimize the estimate of error until the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
66 ## following is satisfied: |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
67 ## @tex |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
68 ## $$error \leq \max \left( AbsTol, RelTol\cdot\vert q\vert \right)$$ |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
69 ## @end tex |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
70 ## @ifnottex |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
71 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
72 ## @example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
73 ## @group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
74 ## @var{error} <= max (@var{AbsTol}, @var{RelTol}*|@var{q}|) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
75 ## @end group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
76 ## @end example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
77 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
78 ## @end ifnottex |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
79 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
80 ## The optional output @var{err} is an approximate bound on the error in the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
81 ## integral @code{abs (@var{q} - @var{I})}, where @var{I} is the exact value |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
82 ## of the integral. The optional output @var{iter} is the number of vectorized |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
83 ## function calls to the function @var{f} that were used. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
84 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
85 ## Example 1 : integrate a rectangular region in x-y plane |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
86 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
87 ## @example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
88 ## @group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
89 ## @var{f} = @@(@var{x},@var{y}) 2*ones (size (@var{x})); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
90 ## @var{q} = quad2d (@var{f}, 0, 1, 0, 1) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
91 ## @result{} @var{q} = 2 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
92 ## @end group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
93 ## @end example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
94 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
95 ## The result is a volume, which for this constant-value integrand, is just |
25579
07c2c42f457e
doc: Miscellaneous documentation fixes all over the manual (bug #54288).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
96 ## @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:
diff
changeset
|
97 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
98 ## Example 2 : integrate a triangular region in x-y plane |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
99 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
100 ## @example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
101 ## @group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
102 ## @var{f} = @@(@var{x},@var{y}) 2*ones (size (@var{x})); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
103 ## @var{ymax} = @@(@var{x}) 1 - @var{x}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
104 ## @var{q} = quad2d (@var{f}, 0, 1, 0, @var{ymax}) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
105 ## @result{} @var{q} = 1 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
106 ## @end group |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
107 ## @end example |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
108 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
109 ## The result is a volume, which for this constant-value integrand, is the |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
110 ## Triangle Area x Height or |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
111 ## @code{1/2 * @var{Base} * @var{Width} * @var{Height}}. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
112 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
113 ## 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:
diff
changeset
|
114 ## 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:
diff
changeset
|
115 ## boundary. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
116 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
117 ## 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:
diff
changeset
|
118 ## 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:
diff
changeset
|
119 ## 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:
diff
changeset
|
120 ## 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:
diff
changeset
|
121 ## 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:
diff
changeset
|
122 ## 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:
diff
changeset
|
123 ## integration limits. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
124 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
125 ## Reference: @nospell{L.F. Shampine}, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
126 ## @cite{@sc{matlab} program for quadrature in 2D}, Applied Mathematics and |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
127 ## Computation, pp. 266--274, Vol 1, 2008. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
128 ## |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
129 ## @seealso{integral2, dblquad, integral, quad, quadgk, quadv, quadl, quadcc, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
130 ## trapz, integral3, triplequad} |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
131 ## @end deftypefn |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
132 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
133 function [q, err, iter] = quad2d (f, xa, xb, ya, yb, varargin) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
134 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
135 if (nargin < 5 || mod (nargin, 2) == 0) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
136 print_usage (); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
137 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
138 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
139 if (ischar (f)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
140 ## Convert function given as a string to a function handle |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
141 f = @(x) feval (f, x); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
142 elseif (! is_function_handle (f)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
143 print_usage (); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
144 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
145 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
146 if (! (isreal (xa) && isscalar (xa) && isreal (xb) && isscalar (xb))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
147 print_usage (); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
148 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
149 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
150 ## Check for single or double limits to set appropriate default tolerance. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
151 issingle = (isa ([xa, xb], "single") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
152 || (! 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:
diff
changeset
|
153 || (! 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:
diff
changeset
|
154 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
155 ## Set defaults, update with any specified parameters. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
156 if (issingle) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
157 abstol = 1e-5; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
158 reltol = 1e-4; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
159 else |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
160 abstol = 1e-10; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
161 reltol = 1e-6; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
162 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
163 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
164 vectorized = true; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
165 singular = true; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
166 idx = 1; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
167 maxiter = 5000; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
168 failureplot = false; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
169 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
170 while (idx < nargin - 5) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
171 prop = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
172 if (! ischar (prop)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
173 error ("quad2d: 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:
diff
changeset
|
174 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
175 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
176 switch (tolower (prop)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
177 case "abstol" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
178 abstol = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
179 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:
diff
changeset
|
180 error ("quad2d: 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:
diff
changeset
|
181 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
182 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
183 case "reltol" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
184 reltol = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
185 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:
diff
changeset
|
186 error ("quad2d: 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:
diff
changeset
|
187 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
188 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
189 case "maxfunevals" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
190 maxiter = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
191 if (! (isnumeric (maxiter) && isscalar (maxiter) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
192 && fix (maxiter) == maxiter && maxiter >= 1)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
193 error ("quad2d: MaxFunEvals value must be a scalar integer >= 1"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
194 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
195 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
196 case "singular" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
197 singular = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
198 if (! (isscalar (singular) && isreal (singular))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
199 error ("quad2d: Singular must be a logical value"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
200 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
201 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
202 case "vectorized" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
203 vectorized = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
204 if (! (isscalar (vectorized) && isreal (vectorized))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
205 error ("quad2d: 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:
diff
changeset
|
206 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
207 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
208 case "failureplot" |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
209 failureplot = varargin{idx++}; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
210 if (! (isscalar (failureplot) && isreal (failureplot))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
211 error ("quad2d: FailurePlot must be a logical value"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
212 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
213 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
214 otherwise |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
215 error ("quad2d: unknown property '%s'", prop); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
216 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
217 endswitch |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
218 endwhile |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
219 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
220 if (! vectorized) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
221 f = @(x, y) arrayfun (f, x, y); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
222 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
223 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
224 ## 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:
diff
changeset
|
225 if (! is_function_handle (ya)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
226 if (! (isreal (ya) && isscalar (ya))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
227 error ("quad2d: 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:
diff
changeset
|
228 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
229 ya = @(x) ya * ones(rows (x), columns (x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
230 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
231 if (! is_function_handle (yb)) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
232 if (! (isreal (yb) && isscalar (yb))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
233 error ("quad2d: 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:
diff
changeset
|
234 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
235 yb = @(x) yb * ones(rows (x), columns (x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
236 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
237 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
238 iter = 0; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
239 qaccept = 0; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
240 qerraccept = 0; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
241 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
242 if (singular) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
243 ## Shampine suggests using the singularity weakening transform |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
244 ## suggested by Havie. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
245 ## \int_a^b f(x) dx = \int_0^pi f (g(t)) (dx / dt) dt |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
246 ## where |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
247 ## g(t) = ((a - b) * cos(t) + (a + b)) / 2 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
248 ## dx = - (a - b) * sin(t) / 2 dt |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
249 ## Now our integral is |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
250 ## \int_a^b \int_0^1 f(x,y) dydx |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
251 ## as we already subsitute for "y", so |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
252 ## gx(tx) = ((a - b) * cos(tx) + (a + b)) / 2 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
253 ## gy(ty) = (1 - cos(ty)) / 2 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
254 ## dydx = (b - a) * sin(tx) * sin(ty) / 4 dtydtx |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
255 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
256 xtrans = @(tx) ((xa - xb) .* cos (tx) + (xa + xb)) ./ 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
257 ytrans = @(ty) (1 - cos (ty)) ./ 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
258 ztrans = @(tx, ty) (xb - xa) .* sin(tx) .* sin(ty) ./ 4; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
259 area = pi ^ 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
260 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
261 ## Initialize tile list |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
262 tilelist(1) = struct ("xa", 0, "xb", pi, "ya", 0, "yb", pi, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
263 "q", 0, "qerr", Inf); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
264 else |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
265 xtrans = @(tx) tx; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
266 ytrans = @(ty) ty; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
267 ztrans = @(tx, ty) 1; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
268 area = (xb - xa); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
269 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
270 ## Initialize tile list |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
271 tilelist(1) = struct ("xa", xa, "xb", xb, "ya", 0, "yb", 1, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
272 "q", 0, "qerr", Inf); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
273 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
274 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
275 while (length (tilelist) > 0 && iter < maxiter) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
276 ## Get tile with the largest error |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
277 [~, idx] = max ([tilelist.qerr]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
278 tile = tilelist(idx); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
279 tilelist(idx) = []; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
280 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
281 ## Subdivide the tile into 4 subtiles |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
282 iter += 4; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
283 tiles(4) = struct ("xa", tile.xa, "xb", tile.xa + (tile.xb - tile.xa) / 2, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
284 "ya", tile.ya, "yb", tile.ya + (tile.yb - tile.ya) / 2, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
285 "q", 0, "qerr", 0); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
286 tiles(3) = struct ("xa", tile.xa, "xb", tile.xa + (tile.xb - tile.xa) / 2, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
287 "ya", tile.ya + (tile.yb - tile.ya) / 2, "yb", tile.yb, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
288 "q", 0, "qerr", 0); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
289 tiles(2) = struct ("xa", tile.xa + (tile.xb - tile.xa) / 2, "xb", tile.xb, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
290 "ya", tile.ya, "yb", tile.ya + (tile.yb - tile.ya) / 2, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
291 "q", 0, "qerr", 0); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
292 tiles(1) = struct ("xa", tile.xa + (tile.xb - tile.xa) / 2, "xb", tile.xb, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
293 "ya", tile.ya + (tile.yb - tile.ya) / 2, "yb", tile.yb, |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
294 "q", 0, "qerr", 0); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
295 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
296 ## Perform the quadrature of 4 subtiles |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
297 for i = 1:4 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
298 [tiles(i).q, tiles(i).qerr] = ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
299 tensorproduct (f, ya, yb, tiles(i), xtrans, ytrans, ztrans, singular); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
300 endfor |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
301 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
302 q = qaccept + sum ([[tilelist.q], tiles.q]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
303 err = qerraccept + sum ([[tilelist.qerr], tiles.qerr]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
304 tol = max (abstol, reltol .* abs (q)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
305 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
306 ## Shampine suggests taking a margin of a factor of 8 for |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
307 ## the local tolerance. That, and the fact that we are subdividing |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
308 ## into 4 tiles, means we divide by 32 at this point. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
309 localtol = tol * ([tile.xb] - [tile.xa]) * ([tile.yb] - [tile.ya]) ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
310 / area / 32; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
311 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
312 ## If global tolerance is met, return. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
313 if (err < tol) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
314 break; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
315 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
316 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
317 ## Accept the tiles meeting the tolerance, and add the others back to |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
318 ## the list of tiles to treat. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
319 idx = find ([tiles.qerr] < localtol); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
320 qaccept += sum ([tiles(idx).q]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
321 qerraccept += sum ([tiles(idx).qerr]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
322 tiles(idx) = []; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
323 tilelist = [tilelist, tiles]; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
324 endwhile |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
325 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
326 ## Verify convergence |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
327 if (iter >= maxiter) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
328 if (err > max (abstol, reltol .* abs (q))) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
329 warning (["quad2d: " ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
330 "Maximum number of sub-tiles reached without convergence"]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
331 else |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
332 warning (["quad2d: " ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
333 "Maximum number of sub-tiles reached, accuracy may be low"]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
334 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
335 if (failureplot) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
336 newplot (); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
337 title ("quad2d : Areas needing refinement"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
338 for tile = tilelist |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
339 xaa = xtrans(tile.xa); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
340 xbb = xtrans(tile.xb); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
341 y1 = ya(xaa) + ytrans(tile.ya) * (yb(xaa) - ya(xaa)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
342 y2 = ya(xaa) + ytrans(tile.yb) * (yb(xaa) - ya(xaa)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
343 y3 = ya(xbb) + ytrans(tile.yb) * (yb(xbb) - ya(xbb)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
344 y4 = ya(xbb) + ytrans(tile.ya) * (yb(xbb) - ya(xbb)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
345 patch ([xaa, xaa, xbb, xbb, xaa], [y1, y2, y3, y4, y1], "b"); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
346 endfor |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
347 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
348 endif |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
349 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
350 endfunction |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
351 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
352 function [q, qerr] = tensorproduct (f, ya, yb, tile, xtrans, ytrans, ztrans, singular) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
353 ## The Shampine TwoD paper proposes using a G3,K7 rule in a tensor product. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
354 ## I couldn't find a tabulated abscissas and weights of a G3,K7 rule publicly |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
355 ## available, so use a G7,K15 rule from Octave's implementation of quadgk. |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
356 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
357 persistent abscissa = [-0.9914553711208126e+00, -0.9491079123427585e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
358 -0.8648644233597691e+00, -0.7415311855993944e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
359 -0.5860872354676911e+00, -0.4058451513773972e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
360 -0.2077849550078985e+00, 0.0000000000000000e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
361 0.2077849550078985e+00, 0.4058451513773972e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
362 0.5860872354676911e+00, 0.7415311855993944e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
363 0.8648644233597691e+00, 0.9491079123427585e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
364 0.9914553711208126e+00]; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
365 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
366 persistent weights15 = [0.2293532201052922e-01, 0.6309209262997855e-01, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
367 0.1047900103222502e+00, 0.1406532597155259e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
368 0.1690047266392679e+00, 0.1903505780647854e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
369 0.2044329400752989e+00, 0.2094821410847278e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
370 0.2044329400752989e+00, 0.1903505780647854e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
371 0.1690047266392679e+00, 0.1406532597155259e+00, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
372 0.1047900103222502e+00, 0.6309209262997855e-01, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
373 0.2293532201052922e-01]; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
374 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
375 persistent weights7 = [0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
376 0.1294849661688697e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
377 0.2797053914892767e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
378 0.3818300505051889e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
379 0.4179591836734694e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
380 0.3818300505051889e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
381 0.2797053914892767e+00, 0.0, ... |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
382 0.1294849661688697e+00, 0.0]; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
383 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
384 xaa = tile.xa; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
385 xbb = tile.xb; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
386 yaa = tile.ya; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
387 ybb = tile.yb; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
388 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
389 tx = ((xbb - xaa) * abscissa + xaa + xbb) / 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
390 x = xtrans(tx); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
391 ty = (abscissa' * (ybb - yaa) + yaa + ybb) / 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
392 y = ones (15, 1) * ya(x) + ytrans(ty) * (yb(x) - ya(x)); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
393 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
394 xhalfwidth = (xbb - xaa ) / 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
395 yhalfwidth = ones (15, 1) * (yb(x) - ya(x)) .* (ybb - yaa) ./ 2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
396 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
397 x = ones (15, 1) * x; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
398 tx = ones (15,1) * tx; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
399 ty = ty * ones (1, 15); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
400 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
401 z = yhalfwidth .* f (x, y) .* ztrans(tx, ty) .* xhalfwidth; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
402 q = weights15 * (weights15 * z)'; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
403 qerr = abs (weights7 * (weights7 * z)' - q); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
404 endfunction |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
405 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
406 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
407 %!shared f |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
408 %! f = @(x, y) x .* y; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
409 %!assert (quad2d (f, 0, 1, 0, 1), 0.25, 1e-10) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
410 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
411 %!test |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
412 %! f = @(x, y) 9 * x.^2 + 15 * y.^2; |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
413 %!assert (quad2d (f, 0, 5, -5, 0, "AbsTol", 1e-9), 5000, 1e-9) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
414 %!assert (quad2d (f, 0, 5, -5, 0, "RelTol", 1e-6), 5000, -1e-6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
415 %!assert (quad2d (f, 0, 5, -5, 0, "RelTol", 1e-6, "AbsTol", 1e-9), 5000, 1e-9) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
416 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
417 ## tests from dblquad |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
418 %!test |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
419 %! f = @(x, y) 1 ./ (x+y); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
420 %!assert (quad2d (f, 0, 1, 0, 1, "AbsTol", 1e-7), 2*log (2), 1e-7) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
421 %!assert (quad2d (f, 0, 1, 0, 1, "RelTol", 1e-5), 2*log (2), -1e-5) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
422 %!assert (quad2d (f, 0, 1, 0, 1, "AbsTol", 1e-8, "RelTol", 1e-6), |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
423 %! 2*log (2), -1e-6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
424 %!assert (quad2d (f, 0, 1, 0, @(x) 1 - x), 1, -1e-6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
425 %!assert (quad2d (f, 0, 1, 0, @(x) 1 - x, "Singular", true), 1, -1e-6) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
426 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
427 %!assert (quad2d (@(x, y) exp (-x.^2 - y.^2) , -1, 1, -1, 1), |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
428 %! pi * erf (1).^2, 1e-10) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
429 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
430 %!assert (quad2d (@plus, 1, 2, 3, 4), 5, 1e-10) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
431 |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
432 ## Test input validation |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
433 %!error quad2d () |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
434 %!error quad2d (@plus) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
435 %!error quad2d (@plus, 1) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
436 %!error quad2d (@plus, 1, 2) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
437 %!error quad2d (@plus, 1, 2, 3) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
438 %!error quad2d (@plus, 1, 2, 3, 4, "foo") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
439 %!error quad2d (0, 1, 2, 3, 4) # f must be function handle |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
440 %!error quad2d (@plus, 1i, 2, 3, 4) # real limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
441 %!error quad2d (@plus, 1, 2i, 3, 4) # real limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
442 %!error quad2d (@plus, [1 1], 2, 3, 4) # scalar limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
443 %!error quad2d (@plus, 1, [2 2], 3, 4) # scalar limits |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
444 %!error <property PROP must be a string> quad2d (@plus, 1, 2, 3, 4, 99, "bar") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
445 %!error <AbsTol value must be a numeric> quad2d (@plus, 1, 2, 3, 4, "AbsTol", "foo") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
446 %!error <AbsTol value must be a .* scalar> quad2d (@plus, 1, 2, 3, 4, "AbsTol", [1, 2]) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
447 %!error <AbsTol value must be.* .= 0> quad2d (@plus, 1, 2, 3, 4, "AbsTol", -1) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
448 %!error <RelTol value must be a numeric> quad2d (@plus, 1, 2, 3, 4, "RelTol", "foo") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
449 %!error <RelTol value must be a .* scalar> quad2d (@plus, 1, 2, 3, 4, "RelTol", [1, 2]) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
450 %!error <RelTol value must be.* .= 0> quad2d (@plus, 1, 2, 3, 4, "RelTol", -1) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
451 %!error <MaxFunEvals value must be a scalar integer> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
452 %! quad2d (@plus,1,2,3,4, "MaxFunEvals", {1}); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
453 %!error <MaxFunEvals value must be a scalar integer> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
454 %! quad2d (@plus,1,2,3,4, "MaxFunEvals", [1 1]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
455 %!error <MaxFunEvals value must be a scalar integer> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
456 %! quad2d (@plus,1,2,3,4, "MaxFunEvals", 1.5); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
457 %!error <MaxFunEvals value must be a scalar integer .= 1> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
458 %! quad2d (@plus,1,2,3,4, "MaxFunEvals", -1); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
459 %!error <Singular must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
460 %! quad2d (@plus,1,2,3,4, "Singular", [0 1]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
461 %!error <Singular must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
462 %! quad2d (@plus,1,2,3,4, "Singular", {true}); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
463 %!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:
diff
changeset
|
464 %! quad2d (@plus,1,2,3,4, "Vectorized", [0 1]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
465 %!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:
diff
changeset
|
466 %! quad2d (@plus,1,2,3,4, "Vectorized", {true}); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
467 %!error <FailurePlot must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
468 %! quad2d (@plus,1,2,3,4, "FailurePlot", [0 1]); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
469 %!error <FailurePlot must be a logical value> |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
470 %! quad2d (@plus,1,2,3,4, "FailurePlot", {true}); |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
471 %!error <unknown property 'foo'> quad2d (@plus, 1, 2, 3, 4, "foo", "bar") |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
472 %!error <YA must be a real scalar> quad2d (@plus, 1, 2, 3i, 4) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
473 %!error <YA must be a real scalar> quad2d (@plus, 1, 2, [3 3], 4) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
474 %!error <YB must be a real scalar> quad2d (@plus, 1, 2, 3, 4i) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
475 %!error <YB must be a real scalar> quad2d (@plus, 1, 2, 3, [4 4]) |
2e64bed0bb3a
Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff
changeset
|
476 %!warning <Maximum number of> quad2d (@plus, 1, 2, 3, 4, "MaxFunEvals", 1); |