Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

quad2d

计算二重数值积分 - tiled 方法

说明

示例

q = quad2d(fun,a,b,c,d) 逼近 fun(x,y) 在平面区域 axbc(x)yd(x) 上的积分。边界 cd 均可为标量或函数句柄。

示例

q = quad2d(fun,a,b,c,d,Name,Value) 使用一个或多个 Name,Value 对组参数指定其他选项。例如,您可以指定 'AbsTol''RelTol' 来调整算法必须满足的误差阈值。

[q,E] = quad2d(___) 还返回绝对误差 E = | q - I | 的逼近​​上限,其中 I 是积分的确切值。

示例

全部折叠

对以下方程求积分

ysin(x)+xcos(y)

区间为 -πx2π0yπ

fun = @(x,y) y.*sin(x)+x.*cos(y);
Q = quad2d(fun,pi,2*pi,0,pi)
Q = -9.8696

将结果与积分的真值 -π2 进行比较。

-pi^2
ans = -9.8696

求以下函数的积分

[(x+y)1/2(1+x+y)2]-1

区间为 0x10y1-x。此被积函数在原点 (0,0) 是无限的,它位于积分区域的边界。

fun = @(x,y) 1./(sqrt(x + y) .* (1 + x + y).^2 );
ymax = @(x) 1 - x;
Q = quad2d(fun,0,1,0,ymax)
Q = 0.2854

积分的真值为 π/4-1/2

pi/4 - 0.5
ans = 0.2854

quad2d 首先将积分区域映射到矩形。如果区域没有四条边或它的某条边不能顺利映射到直线,对此区域求积分时必然出现问题。如果求积分失败,可以通过几种有用的方法补救:将 Singular 设置为其默认值 true,在笛卡尔坐标与极坐标之间切换,或将积分区域分为几个小块并将这些小块的积分结果相加。

例如:

fun = @(x,y)abs(x.^2 + y.^2 - 0.25);
c = @(x)-sqrt(1 - x.^2);
d = @(x)sqrt(1 - x.^2);
quad2d(fun,-1,1,c,d,'AbsTol',1e-8,...
    'FailurePlot',true,'Singular',false);
Warning: Reached the maximum number of function evaluations (2000). The result fails the global error test.

Figure contains an axes object. The axes object with title QUAD2D -- Areas Needing Refinement contains 2002 objects of type patch.

失败绘图显示两个问题区域,一个在点 (-1,0)(1,0) 附近,一个在圆 x2+y2=0.25 附近。

Singular 的值更改为 true 能解决 (-1,0)(1,0) 处的几何奇异点。较大的着色区域可能需要细化,但问题不大。

Q = quad2d(fun,-1,1,c,d,'AbsTol',1e-8, ... 
     'FailurePlot',true,'Singular',true);
Warning: Reached the maximum number of function evaluations (2000). The result passes the global error test.

Figure contains an axes object. The axes object with title QUAD2D -- Areas Needing Refinement contains 2024 objects of type patch.

从这里,您可以利用对称性:

Q = 4*quad2d(fun,0,1,0,d,'Abstol',1e-8,...
     'Singular',true,'FailurePlot',true)
Q = 0.9817

但代码在奇异点附近仍然应对困难。它可能无法提供更高的准确度:

Q = 4*quad2d(fun,0,1,0,d,'Abstol',1e-10,...
     'Singular',true,'FailurePlot',true);
Warning: Reached the maximum number of function evaluations (2000). The result passes the global error test.

Figure contains an axes object. The axes object with title QUAD2D -- Areas Needing Refinement contains 2011 objects of type patch.

在更高准确度时,更改坐标可能更为奏效。

polarfun = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r;
Q = 4*quad2d(polarfun,0,pi/2,0,1,'AbsTol',1e-10);

最好是通过将积分区域分为两个部分来将奇异点放在边界:

Q1 = 4*quad2d(polarfun,0,pi/2,0,0.5,'AbsTol',5e-11);
Q2 = 4*quad2d(polarfun,0,pi/2,0.5,1,'AbsTol',5e-11);
Q = Q1 + Q2;

输入参数

全部折叠

求积分的函数,指定为函数句柄。函数 Z = fun(X,Y) 必须接受大小相同的二维矩阵 XY,并返回包含相应值的矩阵 Z。因此,函数必须是向量化的(也就是说,必须使用按元素运算符,例如 .^;而不是矩阵运算符,例如 ^)。函数的输入和输出必须为单精度或双精度值。

示例: @(x,y) x.^2 - y.^2

数据类型: function_handle

积分的 x 范围,指定为标量。

数据类型: single | double
复数支持:

积分的 y 范围,指定为标量或函数句柄。每个范围都可以指定为标量或函数句柄。如果将范围指定为函数句柄,则它们是积分 ymin = @x c(x)ymax = @(x) d(x) 的 x 范围的函数。函数句柄 yminymax 必须接受并返回大小相同、带有相应值的矩阵。函数的输入和输出必须为单精度或双精度值。

数据类型: single | double | function_handle
复数支持:

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: quad2d(@(x,y) x.*y.^2, 0, 1, 0, 2, 'AbsTol',1e-3) 将积分的绝对容差指定为 1e-3

绝对误差容限,以逗号分隔的对组形式指定,其中包含 'AbsTol' 和一个标量。

quad2d 尝试满足 ERRBND <= max(AbsTol,RelTol*|Q|)。如果 |Q| 足够小,这是绝对误差控制;如果 |Q| 较大,这是相对误差控制。未指定容差时使用默认容差。AbsTol 的默认值是 1e-5。RelTol 的默认值是 100*eps(class(Q))。这还是 RelTol 的最小值。较小的 RelTol 值会自动增大为默认值。

相对误差容限,以逗号分隔的对组形式指定,其中包含 'RelTol' 和一个标量。

quad2d 尝试满足 ERRBND <= max(AbsTol,RelTol*|Q|)。如果 |Q| 足够小,这是绝对误差控制;如果 |Q| 较大,这是相对误差控制。未指定容差时使用默认容差。AbsTol 的默认值是 1e-5。RelTol 的默认值是 100*eps(class(Q))。这还是 RelTol 的最小值。较小的 RelTol 值会自动增大为默认值。

fun 的最大计算次数,指定为以逗号分隔的对组,其中包含 'MaxFunEvals' 和一个标量。使用此选项可限制 quad2d 计算函数 fun 的次数。

开启或关闭生成失败绘图,指定为以逗号分隔的对组,其中包含 'FailurePlot' 和一个数值或逻辑值 1 (true) 或 0 (false)。将 FailurePlot 设置为 true1,可在达到 MaxFunEvals 时生成需要进一步细化的区域的图形表示形式。如果在达到 MaxFunEvals 前成功计算积分,则不生成绘图。失败绘图包含(通常是)在内部映射到矩形的 4 条边的区域。聚集的小区域表示积分中的问题区域。

开启或关闭转换边界奇异点,指定为以逗号分隔的对组,其中包含 'Singular' 和一个数值或逻辑值 1 (true) 或 0 (false)。默认情况下,quad2d 将利用转换削弱边界奇异点以提高性能。将 'Singular' 设置为 false0 可禁用这些转换,为一些平滑问题提供性能优势。

输出参数

全部折叠

计算的积分,以标量形式返回。

误差边界,以标量形式返回。误差边界提供计算的积分 q 与积分 I 的精确值之间误差的上界,即 E = | q - I |

参考

[1] L.F. Shampine, "MATLAB Program for Quadrature in 2D." Applied Mathematics and Computation. Vol. 202, Issue 1, 2008, pp. 266–274.

扩展功能

版本历史记录

在 R2009a 中推出