annotate scripts/general/quad2d.m @ 27918:b442ec6dda5c

use centralized file for copyright info for individual contributors * COPYRIGHT.md: New file. * In most other files, use "Copyright (C) YYYY-YYYY The Octave Project Developers" instead of tracking individual names in separate source files. The motivation is to reduce the effort required to update the notices each year. Until now, the Octave source files contained copyright notices that list individual contributors. I adopted these file-scope copyright notices because that is what everyone was doing 30 years ago in the days before distributed version control systems. But now, with many contributors and modern version control systems, having these file-scope copyright notices causes trouble when we update copyright years or refactor code. Over time, the file-scope copyright notices may become outdated as new contributions are made or code is moved from one file to another. Sometimes people contribute significant patches but do not add a line claiming copyright. Other times, people add a copyright notice for their contribution but then a later refactoring moves part or all of their contribution to another file and the notice is not moved with the code. As a practical matter, moving such notices is difficult -- determining what parts are due to a particular contributor requires a time-consuming search through the project history. Even managing the yearly update of copyright years is problematic. We have some contributors who are no longer living. Should we update the copyright dates for their contributions when we release new versions? Probably not, but we do still want to claim copyright for the project as a whole. To minimize the difficulty of maintaining the copyright notices, I would like to change Octave's sources to use what is described here: https://softwarefreedom.org/resources/2012/ManagingCopyrightInformation.html in the section "Maintaining centralized copyright notices": The centralized notice approach consolidates all copyright notices in a single location, usually a top-level file. This file should contain all of the copyright notices provided project contributors, unless the contribution was clearly insignificant. It may also credit -- without a copyright notice -- anyone who helped with the project but did not contribute code or other copyrighted material. This approach captures less information about contributions within individual files, recognizing that the DVCS is better equipped to record those details. As we mentioned before, it does have one disadvantage as compared to the file-scope approach: if a single file is separated from the distribution, the recipient won't see the contributors' copyright notices. But this can be easily remedied by including a single copyright notice in each file's header, pointing to the top-level file: Copyright YYYY-YYYY The Octave Project Developers See the COPYRIGHT file at the top-level directory of this distribution or at https://octave.org/COPYRIGHT.html. followed by the usual GPL copyright statement. For more background, see the discussion here: https://lists.gnu.org/archive/html/octave-maintainers/2020-01/msg00009.html Most files in the following directories have been skipped intentinally in this changeset: doc libgui/qterminal liboctave/external m4
author John W. Eaton <jwe@octave.org>
date Mon, 06 Jan 2020 15:38:17 -0500
parents 5a6a19a4e3da
children 1891570abac8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27800
diff changeset
1 ## Copyright (C) 2017-2019 The Octave Project Developers
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27800
diff changeset
2 ##
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27800
diff changeset
3 ## See the file COPYRIGHT.md in the top-level directory of this distribution
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27800
diff changeset
4 ## or <https://octave.org/COPYRIGHT.html/>.
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27800
diff changeset
5 ##
24148
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
6 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
7 ## 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
8 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24148
diff changeset
9 ## 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
10 ## 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
11 ## 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
12 ## (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
13 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
14 ## 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
15 ## 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
16 ## 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
17 ## 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
18 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
19 ## 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
20 ## 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
21 ## <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
22
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
23 ## -*- texinfo -*-
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
24 ## @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
25 ## @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
26 ## @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
27 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
28 ## 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
29 ## 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
30 ## @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
31 ## @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
32 ## 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
33 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
34 ## @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
35 ## 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
36 ## @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
37 ## 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
38 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
39 ## 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
40 ## @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
41 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
42 ## @table @code
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
43 ## @item AbsTol
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
44 ## 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
45 ## 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
46 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
47 ## @item RelTol
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
48 ## 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
49 ## 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
50 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
51 ## @item MaxFunEvals
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
52 ## 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
53 ## 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
54 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
55 ## @item Singular
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
56 ## 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
57 ## 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
58 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
59 ## @item Vectorized
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
60 ## 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
61 ## 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
62 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
63 ## @item FailurePlot
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
64 ## 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
65 ## 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
66 ## 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
67 ## @end table
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
68 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
69 ## 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
70 ## following is satisfied:
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
71 ## @tex
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
72 ## $$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
73 ## @end tex
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
74 ## @ifnottex
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
75 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
76 ## @example
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
77 ## @group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
78 ## @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
79 ## @end group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
80 ## @end example
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
81 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
82 ## @end ifnottex
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
83 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
84 ## 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
85 ## 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
86 ## 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
87 ## 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
88 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
89 ## 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
90 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
91 ## @example
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
92 ## @group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
93 ## @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
94 ## @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
95 ## @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
96 ## @end group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
97 ## @end example
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
98 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
99 ## 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
100 ## @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
101 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
102 ## 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
103 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
104 ## @example
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
105 ## @group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
106 ## @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
107 ## @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
108 ## @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
109 ## @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
110 ## @end group
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
111 ## @end example
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 ## 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
114 ## 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
115 ## @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
116 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
117 ## 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
118 ## 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
119 ## boundary.
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
120 ##
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
121 ## 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
122 ## 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
123 ## 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
124 ## 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
125 ## 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
126 ## 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
127 ## integration limits.
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 ## 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
130 ## @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: 26376
diff changeset
131 ## 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:
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 ## @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
134 ## trapz, integral3, triplequad}
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
135 ## @end deftypefn
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
136
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
137 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
138
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
139 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
140 print_usage ();
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
141 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
142
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
143 if (ischar (f))
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
144 ## 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
145 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
146 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
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 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
151 print_usage ();
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
152 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
153
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
154 ## 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
155 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
156 || (! 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
157 || (! 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
158
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
159 ## 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
160 if (issingle)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
161 abstol = 1e-5;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
162 reltol = 1e-4;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
163 else
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
164 abstol = 1e-10;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
165 reltol = 1e-6;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
166 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
167
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
168 vectorized = true;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
169 singular = true;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
170 idx = 1;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
171 maxiter = 5000;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
172 failureplot = false;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
173
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
174 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
175 prop = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
176 if (! ischar (prop))
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
177 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
178 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
179
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
180 switch (tolower (prop))
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
181 case "abstol"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
182 abstol = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
183 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
184 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
185 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
186
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
187 case "reltol"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
188 reltol = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
189 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
190 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
191 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
192
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
193 case "maxfunevals"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
194 maxiter = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
195 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
196 && 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
197 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
198 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
199
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
200 case "singular"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
201 singular = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
202 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
203 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
204 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
205
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
206 case "vectorized"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
207 vectorized = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
208 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
209 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
210 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
211
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
212 case "failureplot"
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
213 failureplot = varargin{idx++};
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
214 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
215 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
216 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
217
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
218 otherwise
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
219 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
220
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
221 endswitch
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
222 endwhile
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 if (! vectorized)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
225 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
226 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
227
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
228 ## 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
229 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
230 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
231 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
232 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
233 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
234 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
235 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
236 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
237 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
238 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
239 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
240 endif
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 iter = 0;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
243 qaccept = 0;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
244 qerraccept = 0;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
245
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
246 if (singular)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
247 ## 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
248 ## suggested by Havie.
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
249 ## \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
250 ## where
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
251 ## 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
252 ## 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
253 ## 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
254 ## \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
255 ## 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
256 ## 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
257 ## 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
258 ## 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
259
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
260 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
261 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
262 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
263 area = pi ^ 2;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
264
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
265 ## Initialize tile list
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
266 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
267 "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
268 else
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
269 xtrans = @(tx) tx;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
270 ytrans = @(ty) ty;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
271 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
272 area = (xb - xa);
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
273
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
274 ## Initialize tile list
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
275 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
276 "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
277 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
278
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
279 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
280 ## 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
281 [~, 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
282 tile = tilelist(idx);
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
283 tilelist(idx) = [];
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
284
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
285 ## 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
286 iter += 4;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
287 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
288 "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
289 "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
290 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
291 "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
292 "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
293 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
294 "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
295 "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
296 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
297 "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
298 "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
299
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
300 ## 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
301 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
302 [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
303 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
304 endfor
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 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
307 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
308 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
309
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
310 ## 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
311 ## 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
312 ## 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
313 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
314 / area / 32;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
315
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
316 ## 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
317 if (err < tol)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
318 break;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
319 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
320
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
321 ## 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
322 ## 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
323 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
324 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
325 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
326 tiles(idx) = [];
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
327 tilelist = [tilelist, tiles];
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
328 endwhile
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
329
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
330 ## Verify convergence
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
331 if (iter >= maxiter)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
332 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
333 warning (["quad2d: " ...
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
334 "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
335 else
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
336 warning (["quad2d: " ...
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
337 "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
338 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
339 if (failureplot)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
340 newplot ();
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
341 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
342 for tile = tilelist
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
343 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
344 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
345 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
346 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
347 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
348 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
349 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
350 endfor
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
351 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
352 endif
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
353
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
354 endfunction
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
355
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
356 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
357 ## 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
358 ## 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
359 ## 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
360
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
361 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
362 -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
363 -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
364 -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
365 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
366 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
367 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
368 0.9914553711208126e+00];
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
369
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
370 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
371 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
372 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
373 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
374 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
375 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
376 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
377 0.2293532201052922e-01];
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
378
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
379 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
380 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
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.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
383 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
384 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
385 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
386 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
387
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
388 xaa = tile.xa;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
389 xbb = tile.xb;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
390 yaa = tile.ya;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
391 ybb = tile.yb;
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
392
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
393 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
394 x = xtrans(tx);
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
395 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
396 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
397
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
398 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
399 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
400
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
401 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
402 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
403 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
404
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
405 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
406 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
407 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
408 endfunction
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
409
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 %!shared f
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) x .* y;
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, 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
414
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
415 %!test
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
416 %! 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
417 %!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
418 %!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
419 %!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
420
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
421 ## tests from dblquad
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
422 %!test
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
423 %! 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
424 %!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
425 %!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
426 %!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
427 %! 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
428 %!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
429 %!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
430
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
431 %!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
432 %! 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
433
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
434 %!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
435
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
436 ## Test input validation
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
437 %!error quad2d ()
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)
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
439 %!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
440 %!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
441 %!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
442 %!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
443 %!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
444 %!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
445 %!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
446 %!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
447 %!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
448 %!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
449 %!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
450 %!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
451 %!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
452 %!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
453 %!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
454 %!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
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});
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>
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 1]);
2e64bed0bb3a Updated integral2.m and integral3.m and added quad2d (bug #52074).
Nicholas R. Jankowski <jankowskin@asme.org>
parents:
diff changeset
459 %!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
460 %! 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
461 %!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
462 %! 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
463 %!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
464 %! 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
465 %!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
466 %! 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
467 %!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
468 %! 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
469 %!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
470 %! 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
471 %!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
472 %! 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
473 %!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
474 %! 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
475 %!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
476 %!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
477 %!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
478 %!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
479 %!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
480 %!warning <Maximum number of> quad2d (@plus, 1, 2, 3, 4, "MaxFunEvals", 1);