quad2d
计算二重数值积分 - tiled 方法
说明
示例
计算二重积分
对以下方程求积分
区间为 和 。
fun = @(x,y) y.*sin(x)+x.*cos(y); Q = quad2d(fun,pi,2*pi,0,pi)
Q = -9.8696
将结果与积分的真值 进行比较。
-pi^2
ans = -9.8696
位于积分边界具有奇异性的被积函数
求以下函数的积分
区间为 和 。此被积函数在原点 (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
积分的真值为 。
pi/4 - 0.5
ans = 0.2854
quad2d
的局限性
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.
失败绘图显示两个问题区域,一个在点 (-1,0)
和 (1,0)
附近,一个在圆 附近。
将 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.
从这里,您可以利用对称性:
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.
在更高准确度时,更改坐标可能更为奏效。
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;
输入参数
fun
— 求积分的函数
函数句柄
求积分的函数,指定为函数句柄。函数 Z = fun(X,Y)
必须接受大小相同的二维矩阵 X
和 Y
,并返回包含相应值的矩阵 Z
。因此,函数必须是向量化的(也就是说,必须使用按元素运算符,例如 .^
;而不是矩阵运算符,例如 ^
)。函数的输入和输出必须为单精度或双精度值。
示例: @(x,y) x.^2 - y.^2
数据类型: function_handle
a,b
— 积分的 x 范围
标量
积分的 x 范围,指定为标量。
数据类型: single
| double
复数支持: 是
c,d
— 积分的 y 范围
标量 | 函数句柄
积分的 y 范围,指定为标量或函数句柄。每个范围都可以指定为标量或函数句柄。如果将范围指定为函数句柄,则它们是积分 ymin = @x c(x)
和 ymax = @(x) d(x)
的 x 范围的函数。函数句柄 ymin
和 ymax
必须接受并返回大小相同、带有相应值的矩阵。函数的输入和输出必须为单精度或双精度值。
数据类型: 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
— 绝对误差容限
1e-5
(默认) | 标量
绝对误差容限,以逗号分隔的对组形式指定,其中包含 'AbsTol'
和一个标量。
quad2d
尝试满足 ERRBND <= max(AbsTol,RelTol*|Q|)
。如果 |Q|
足够小,这是绝对误差控制;如果 |Q|
较大,这是相对误差控制。未指定容差时使用默认容差。AbsTol
的默认值是 1e-5。RelTol
的默认值是 100*eps(class(Q))
。这还是 RelTol
的最小值。较小的 RelTol
值会自动增大为默认值。
RelTol
— 相对误差容限
100*eps(class(q))
(默认) | 标量
相对误差容限,以逗号分隔的对组形式指定,其中包含 'RelTol'
和一个标量。
quad2d
尝试满足 ERRBND <= max(AbsTol,RelTol*|Q|)
。如果 |Q|
足够小,这是绝对误差控制;如果 |Q|
较大,这是相对误差控制。未指定容差时使用默认容差。AbsTol
的默认值是 1e-5。RelTol
的默认值是 100*eps(class(Q))
。这还是 RelTol
的最小值。较小的 RelTol
值会自动增大为默认值。
MaxFunEvals
— fun
的最大计算次数
2000
(默认) | 标量
fun
的最大计算次数,指定为以逗号分隔的对组,其中包含 'MaxFunEvals'
和一个标量。使用此选项可限制 quad2d
计算函数 fun
的次数。
FailurePlot
— 开启或关闭生成失败绘图
false
或 0
(默认) | true
或 1
开启或关闭生成失败绘图,指定为以逗号分隔的对组,其中包含 'FailurePlot'
和一个数值或逻辑值 1
(true
) 或 0
(false
)。将 FailurePlot
设置为 true
或 1
,可在达到 MaxFunEvals
时生成需要进一步细化的区域的图形表示形式。如果在达到 MaxFunEvals
前成功计算积分,则不生成绘图。失败绘图包含(通常是)在内部映射到矩形的 4 条边的区域。聚集的小区域表示积分中的问题区域。
Singular
— 开启或关闭转换边界奇异点
true
或 1
(默认) | false
或 0
开启或关闭转换边界奇异点,指定为以逗号分隔的对组,其中包含 'Singular'
和一个数值或逻辑值 1
(true
) 或 0
(false
)。默认情况下,quad2d
将利用转换削弱边界奇异点以提高性能。将 'Singular'
设置为 false
或 0
可禁用这些转换,为一些平滑问题提供性能优势。
输出参数
q
— 计算的积分
标量
计算的积分,以标量形式返回。
E
— 误差边界
标量
误差边界,以标量形式返回。误差边界提供计算的积分 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.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
如果内部存储数组的大小不够大,生成的代码将发出警告消息。如果出现警告,可能的解决办法是将积分区域分为几个小块,并求每个小块的积分总和。
版本历史记录
在 R2009a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)