主要内容

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

integral3

R2026a

对三重积分进行数值计算

描述

q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax) 在区域 w = fun(x,y,z) ≤ xmin ≤ x、xmax ≤ ymin(x) ≤ y 和 ymax(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);

对区域 0≤x≤π、0≤y≤1 和 -1≤z≤1 计算积分。

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);

对区域 -∞≤x≤0、-100≤y≤0 和 -100≤z≤0 计算三重积分。

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;

对 0≤x≤1、0≤y≤1 和 0≤z≤1 限定的区域计算积分。将 Vectorized 名称-值参量指定为 false,以在不使用向量化的情况下计算三重积分。

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

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

使用对 integral3 和 integral 的嵌套调用来计算 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 使用绝对误差容限来限制绝对误差容限估计值,即 |q – Q|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小绝对误差容限,integral3 可以提供更多位小数的精度。

注意

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

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

数据类型: double | single

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

注意

RelTol 和 AbsTol 配合使用。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 调用 integral 对 xmin ≤ x ≤ xmax 计算积分。它使用 integral2 方法来调用 "tiled",以便对 ymin(x) ≤ y ≤ ymax(x) 和 zmin(x,y) ≤ z ≤ zmax(x,y) 计算二重积分。积分范围必须是有限的。
"iterated"integral3 调用 integral 对 xmin ≤ x ≤ xmax 计算积分。它使用 integral2 方法来调用 "iterated",以便对 ymin(x) ≤ y ≤ ymax(x) 和 zmin(x,y) ≤ z ≤ zmax(x,y) 计算二重积分。积分范围可以是无限的。

自 R2026a 起

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

如果您将 Vectorized 指定为 false,则 fun、ymin、ymax、zmin 和 zmax 只接受标量参量并返回标量值。

输出参量

全部折叠

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

提示

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

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

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

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

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

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

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

  • 要求解四维及更高阶积分,您可以嵌套调用 integral、integral2、integral3。另一种选择是在 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 中推出

全部展开