主要内容

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) 使用一个或多个名称-值参量指定选项。例如,您可以指定绝对和相对误差容限以及积分方法。

示例

示例

全部折叠

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

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

创建函数。

fun = @(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

有关此方法的详细信息,请参阅参数化函数

自 R2026a 开始提供

创建采用标量输入的函数 f(x,y)=ln(x2+y2)

fun = @(x,y) log(x^2+y^2);

0x20y2 限定的区域计算积分。将 Vectorized 名称-值参量指定为 false,以在不使用向量化的情况下计算二重积分。

q = integral2(fun,0,2,0,2,Vectorized=false)
q = 
2.6010

输入参数

全部折叠

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

x 的下限,指定为有限或无限的实数。

数据类型: double | single

x 的上限,指定为有限或无限的实数。

数据类型: double | single

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

数据类型: double | single | function_handle

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

数据类型: double | single | function_handle

名称-值参数

全部折叠

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

示例: q = integral2(fun,xmin,xmax,ymin,ymax,AbsTol=1e-12) 将绝对误差容限设置为约 12 位小数精度。

绝对误差容限,指定为非负实数。integral2 使用绝对误差容限来限制绝对误差容限估计值,即 |qQ|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小绝对误差容限,integral2 可以提供更多位小数的精度。

注意

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

示例: q = integral2(fun,xmin,xmax,ymin,ymax,AbsTol=1e-12)

数据类型: double | single

相对误差容限,指定为非负实数。integral2 使用相对误差容限来限制相对误差容限估计值,即 |qQ|/|Q|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小相对误差容限,integral2 可以为精度提供更多的有效数位。

注意

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

示例: q = integral2(fun,xmin,xmax,ymin,ymax,RelTol=1e-9)

数据类型: double | single

积分方法,指定为下表中的值之一。

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

自 R2026a 起

执行向量化计算,指定为数值或逻辑值 1 (true) 或 0 (false)。默认情况下,Vectorizedtrue,并且积分的计算是向量化的,以便运行更快。被积函数 fun 必须接受两个具有相同大小的数组并按元素运算,从而返回一个对应值数组。如果 y 的下限或上限是函数句柄,则 yminymax 必须接受向量参量并返回一个对应值向量。

如果您将 Vectorized 指定为 false,则 funyminymax 只接受标量参量并返回标量值。

输出参量

全部折叠

二重积分的计算值,以数值标量或数组形式返回。

提示

  • integral2 函数尝试满足以下表达式,其中 q 是积分的计算值,而 Q 是(未知的)精确值。

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

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

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

  • 如果 "iterated"ymin 为或两者都为无边界函数,请使用 ymax 方法。

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

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

参考

[1] Shampine, L.F. “Vectorized Adaptive Quadrature in MATLAB®.” Journal of Computational and Applied Mathematics 211, no. 2 (February 2008): 131–40. https://doi.org/10.1016/j.cam.2006.11.021.

[2] Shampine, L.F. "MATLAB Program for Quadrature in 2D." Applied Mathematics and Computation 202, no. 1 (August 2008): 266–74. https://doi.org/10.1016/j.amc.2008.02.012.

扩展功能

全部展开

版本历史记录

在 R2012a 中推出

全部展开