Main Content

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

integral2

对二重积分进行数值计算

说明

示例

q = integral2(fun,xmin,xmax,ymin,ymax) 在平面区域 xminxxmaxymin(x)yymax(x) 上逼近函数 z = fun(x,y) 的积分。

示例

q = integral2(fun,xmin,xmax,ymin,ymax,Name,Value) 使用一个或多个 Name,Value 对组参数指定其他选项。

示例

全部折叠

以下面的函数为例:

f(x,y)=1(x+y)(1+x+y)2.

此函数在 xy 为零时未定义。当奇异性位于积分边界上时,integral2 的性能最佳。

创建匿名函数。

fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 )
fun = function_handle with value:
    @(x,y)1./(sqrt(x+y).*(1+x+y).^2)

0x10y1-x 限定的三角形区域计算积分。

ymax = @(x) 1 - x;
q = integral2(fun,0,1,0,ymax)
q = 0.2854

定义函数

f(θ,r)=rrcosθ+rsinθ(1+rcosθ+rsinθ)2

fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 );
polarfun = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r;

r 的上限定义一个函数。

rmax = @(theta) 1./(sin(theta) + cos(theta));

0θπ/20rrmax 限定的区域计算积分。

q = integral2(polarfun,0,pi/2,0,rmax)
q = 0.2854

使用参数 a=3b=5 创建匿名的参数化函数 f(x,y)=ax2+by2

a = 3; 
b = 5;
fun = @(x,y) a*x.^2 + b*y.^2;

对区域 0x5-5y0 计算积分。指定 'iterated' 方法和约为 10 个有效数字的精度。

format long
q = integral2(fun,0,5,-5,0,'Method','iterated',...
'AbsTol',0,'RelTol',1e-10)
q = 
     1.666666666666667e+03

输入参数

全部折叠

被积函数,指定为函数句柄,用于定义在平面区域 xminxxmaxymin(x) ≤ yymax(x) 上求积分的函数。函数 fun 必须接受两个具有相同大小的数组,并返回一个对应值数组。该函数必须执行按元素运算。

数据类型: function_handle

x 的下限,指定为有限或无限的实标量值。

数据类型: double | single

x 的上限,指定为有限或无限的实标量值。

数据类型: double | single

y 的下限,指定为有限或无限的实标量值。您可以在对非矩形区域积分时将 ymin 指定为函数句柄(x 的函数)。

数据类型: double | function_handle | single

y 的上限,指定为有限或无限的实标量值。您也可以在对非矩形区域积分时将 ymax 指定为函数句柄(x 的函数)。

数据类型: double | function_handle | single

名称-值参数

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

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

示例: 'AbsTol',1e-12 将绝对误差容限设置为约 12 位小数精度。

绝对误差容限,指定为由 'AbsTol' 和非负实数组成的逗号分隔对组。integral2 使用绝对误差容限来限制绝对误差容限估计值,即 |q – Q|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小绝对误差容限,integral2 可以提供更多位小数的精度。默认值为 1e-10

注意

AbsTolRelTol 配合使用。integral2 可满足绝对误差容限或相对误差容限(但不一定同时满足两者)。有关使用这些误差容限的详细信息,请参阅提示一节。

示例: 'AbsTol',1e-12 将绝对误差容限设置为约 12 位小数精度。

数据类型: double | single

相对误差容限,指定为由 'RelTol' 和非负实数组成的逗号分隔对组。integral2 使用相对误差容限来限制相对误差容限估计值,即 |q – Q|/|Q|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小相对误差容限,integral2 可以为精度提供更多的有效数位。默认值为 1e-6

注意

RelTolAbsTol 配合使用。integral2 可满足相对误差容限或绝对误差容限(但不一定同时满足两者)。有关使用这些误差容限的详细信息,请参阅提示一节。

示例: 'RelTol',1e-9 将相对误差容限设置为约 9 位有效数位。

数据类型: double | single

积分法,指定为由 'Method' 和以下所述方法之一组成的逗号分隔对组。

积分法描述
'auto'对于大多数情况,integral2 使用 'tiled' 方法。当任何积分范围为无限时,它将使用 'iterated' 方法。这是默认方法。
'tiled'integral2 将积分区域变换为矩形形状,并根据需要将其划分为更小的矩形区域。积分范围必须是有限的。
'iterated'integral2 调用 integral 执行迭代积分。外积分在 xminxxmax 范围内进行计算。内积分在 ymin(x)yymax(x) 范围内进行计算。积分范围可以是无限的。

示例: 'Method','tiled' 指定 tiled 积分法。

数据类型: char | string

提示

  • integral2 函数尝试满足:

    abs(q - Q) <= max(AbsTol,RelTol*abs(q))
    其中 q 为计算的积分值,Q 为(未知)确切值。绝对和相对误差提供了一种在准确性和计算时间之间权衡的方法。相对误差通常确定积分的准确性。但是,如果 abs(q) 足够小,绝对误差会确定积分的准确性。您通常应同时指定绝对误差和相对误差。

  • 当您的函数在积分区域内不连续时,'iterated' 方法可能会更有效。但是,如果您在不连续点处拆分积分并计算多个积分的结果总和,则可实现最佳性能和精确度。

  • 在对非矩形区域积分时,如果 yminymax(或两者)为函数句柄,则可实现最佳性能和精确度。避免将被积函数值设置为零来对非矩形区域积分。如果您必须执行此操作,请指定 'iterated' 方法。

  • 如果 yminymax(或两者)为无边界函数,请使用 'iterated' 方法。

  • 在对匿名函数进行参数化时,请注意参数值应在函数句柄生命周期内保留。例如,函数 fun = @(x,y) x + y + a 使用创建 fun 时的 a 的值。如果您以后决定更改 a 的值,则必须使用新值重新定义匿名函数。

  • 如果为积分指定了单精度范围,或者如果 fun 返回单精度结果,您可能需要指定较大的绝对误差容限和相对误差容限。

参考

[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB®,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.

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

扩展功能

版本历史记录

在 R2012a 中推出