主要内容

integral3

对三重积分进行数值计算

说明

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax) 在区域 w = fun(x,y,z)xminxxmaxymin(x)yymax(x)zmin(x,y)z 逼近函数 zmax(x,y) 的积分。

示例

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Name=Value) 使用一个或多个名称-值参量指定选项。例如,您可以指定绝对和相对误差容限以及积分方法。

示例

示例

全部折叠

创建函数 f(x,y,z)=ysinx+zcosx

fun = @(x,y,z) y.*sin(x)+z.*cos(x);

对区域 0xπ0y1-1z1 计算积分。

q = integral3(fun,0,pi,0,1,-1,1)
q = 
2.0000

创建函数 f(x,y,z)=xcosy+x2cosz

fun = @(x,y,z) x.*cos(y)+x.^2.*cos(z);

将积分范围指定为笛卡尔坐标中的单位球面。

xmin = -1;
xmax = 1;
ymin = @(x)-sqrt(1-x.^2);
ymax = @(x) sqrt(1-x.^2);
zmin = @(x,y)-sqrt(1-x.^2-y.^2);
zmax = @(x,y) sqrt(1-x.^2-y.^2);

使用 "tiled" 方法计算单位球面的积分。

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Method="tiled")
q = 
0.7796

使用参数 a=2 创建参数化函数 f(x,y,z)=10/(x2+y2+z2+a)

a = 2;
fun = @(x,y,z) 10./(x.^2+y.^2+z.^2+a);

对区域 -x0-100y0-100z0 计算三重积分。

format long
q1 = integral3(fun,-Inf,0,-100,0,-100,0)
q1 = 
     2.734244598320928e+03

再次计算积分,将精度指定为约 9 位有效数位。

q2 = integral3(fun,-Inf,0,-100,0,-100,0,AbsTol=0,RelTol=1e-9)
q2 = 
     2.734244599944285e+03

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

自 R2026a 开始提供

创建采用标量输入的函数 f(x,y,z)=x4y-y3z2

fun = @(x,y,z) x^4*y-y^3*z^2;

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

q = integral3(fun,0,1,0,1,0,1,Vectorized=false)
q = 
0.0167

MATLAB® 中的 integral 求积法函数直接支持一维、二维和三维积分。然而,要求解四维和更高阶积分,需要嵌套对函数的调用。

使用对 integral3integral 的嵌套调用来计算 4 维球体的体积。

半径为 r 的四维球体的体积为

V4(r)=02π0π0π0rr3sin2(θ)sin(ϕ)drdθdϕdξ.

使用按元素运算符(.^.*)为被积函数创建函数 f(r,θ,ϕ,ξ)

f = @(r,theta,phi,xi) r.^3.*sin(theta).^2.*sin(phi);

接下来,创建一个函数,它使用 integral3 计算三个积分。

Q = @(r) integral3(@(theta,phi,xi) f(r,theta,phi,xi),0,pi,0,pi,0,2*pi);

最后,在对 integral 的调用中使用 Q 作为被积函数。求解此积分需要为半径 r 选择一个值,因此请使用 r=2

I = integral(Q,0,2,ArrayValued=true)
I = 
78.9568

确切答案是 π2r42Γ(2)

I_exact = pi^2*2^4/(2*gamma(2))
I_exact = 
78.9568

输入参数

全部折叠

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

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

数据类型: double | single

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

数据类型: double | single

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

数据类型: double | single | function_handle

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

数据类型: double | single | function_handle

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

数据类型: double | single | function_handle

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

数据类型: double | single | function_handle

名称-值参数

全部折叠

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

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

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

注意

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

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

数据类型: double | single

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

注意

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

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

数据类型: double | single

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

积分方法描述
"auto"integral3 选择使用 "tiled" 方法还是 "iterated" 方法。对于大多数情况,integral3 使用 "tiled" 方法。当任何积分范围为无限时,integral3 使用 "iterated" 方法。
"tiled"integral3 调用 integralxminxxmax 计算积分。它使用 integral2 方法来调用 "tiled",以便对 ymin(x)yymax(x)zmin(x,y)zzmax(x,y) 计算二重积分。积分范围必须是有限的。
"iterated"integral3 调用 integralxminxxmax 计算积分。它使用 integral2 方法来调用 "iterated",以便对 ymin(x)yymax(x)zmin(x,y)zzmax(x,y) 计算二重积分。积分范围可以是无限的。

自 R2026a 起

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

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

输出参量

全部折叠

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

提示

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

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

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

  • 在对非矩形区域进行积分时,如果以下任意或所有范围满足条件,则可实现最佳性能和精确度:yminymaxzminzmax 是函数句柄。避免将被积函数值设置为零来对非矩形区域积分。如果您必须这样做,请指定 "iterated" 方法。

  • 如果以下任意或所有范围满足条件,请使用 "iterated" 方法:yminymaxzminzmax 为无界函数。

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

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

  • 要求解四维及更高阶积分,您可以嵌套调用 integralintegral2integral3。另一种选择是在 MATLAB® File Exchange 上使用 integralN 函数,它可以求解 4 至 6 阶积分。

参考

[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 中推出

全部展开