Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

integral3

对三重积分进行数值计算

说明

示例

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

示例

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Name,Value) 指定具有一个或多个 Name,Value 对组参数的其他选项。

示例

全部折叠

定义匿名函数 f(x,y,z)=ysinx+zcosx

fun = @(x,y,z) y.*sin(x)+z.*cos(x)
fun = function_handle with value:
    @(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)
fun = function_handle with value:
    @(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

定义匿名的参数化函数 f(x,y,z)=10/(x2+y2+z2+a)

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

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

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

重新计算积分并将精度指定为约 9 位有效数位。

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

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

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

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

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

使用按元素运算符(.^.*)为被积函数创建函数句柄 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

输入参数

全部折叠

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

数据类型: function_handle

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

数据类型: double | single

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

数据类型: double | single

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

数据类型: double | function_handle | single

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

数据类型: double | function_handle | single

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

数据类型: double | function_handle | single

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

数据类型: double | function_handle | single

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

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

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

注意

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

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

数据类型: double | single

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

注意

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

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

数据类型: double | single

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

积分法说明
'auto'对于大多数情况,integral3 使用 'tiled' 方法。当任何积分范围为无限时,它将使用 'iterated' 方法。这是默认方法。
'tiled'integral3 调用 integralxminxxmax 计算积分。它使用 'tiled' 方法来调用 integral2,以便对 ymin(x)yymax(x)zmin(x,y)zzmax(x,y) 计算二重积分。
'iterated'integral3 调用 integralxminxxmax 计算积分。它使用 'iterated' 方法来调用 integral2,以便对 ymin(x)yymax(x)zmin(x,y)zzmax(x,y) 计算二重积分。积分范围可以是无限的。

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

数据类型: char | string

提示

  • integral3 函数尝试满足:

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

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

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

  • 如果以下任意或所有范围满足条件,请使用 'iterated' 方法:ymin(x)ymax(x)zmin(x,y)zmax(x,y) 为无界函数。

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

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

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

参考

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