主要内容

integral

数值积分

说明

q = integral(fun,xmin,xmax) 使用全局自适应积分和默认误差容限在 funxmin 间以数值形式为函数 xmax 求积分。

示例

q = integral(fun,xmin,xmax,Name=Value) 使用一个或多个名称-值参量指定选项。例如,将 WayPoints 名称-值参量指定为实数或复数向量,为要使用的积分器指示特定点。

示例

示例

全部折叠

创建函数 f(x)=e-x2(lnx)2

fun = @(x) exp(-x.^2).*log(x).^2;

计算 x=0x=Inf 的积分。

q = integral(fun,0,Inf)
q = 
1.9475

创建带有一个参数 c 的函数 f(x)=1/(x3-2x-c)

fun = @(x,c) 1./(x.^3-2*x-c);

c=5 时,计算从 x=0x=2 的积分。

q = integral(@(x) fun(x,5),0,2)
q = 
-0.4605

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

创建函数 f(x)=ln(x)

fun = @(x) log(x);

使用默认误差容限计算 x=0x=1 的积分。

format long
q1 = integral(fun,0,1)
q1 = 
  -1.000000010959678

然后使用 12 位小数精度计算积分。将 RelTol 设置为 0,以便 integral 仅尝试满足绝对误差容限。

q2 = integral(fun,0,1,AbsTol=1e-12,RelTol=0)
q2 = 
  -1.000000000000010

创建函数 f(z)=1/(2z-1)

fun = @(z) 1./(2*z-1);

通过指定路点,在复平面中从 01+1i1-1i0 的三角形路径上计算积分。

q = integral(fun,0,0,Waypoints=[1+1i,1-1i])
q = 
0.0000 - 3.1416i

创建向量值函数 f(x)=[sinx,sin2x,sin3x,sin4x,sin5x] 并求 x=0x=1 的积分。将 ArrayValued 名称-值参量指定为 true,以计算数组值或向量值函数的积分。

fun = @(x) sin((1:5)*x);
q = integral(fun,0,1,ArrayValued=true)
q = 1×5

    0.4597    0.7081    0.6633    0.4134    0.1433

自 R2026a 开始提供

创建采用标量输入的函数 f(x)=2x-x2

fun = @(x) 2*x-x^2;

计算 x=0x=1 的积分。将 Vectorized 名称-值参量指定为 false,以在不使用向量化的情况下计算积分。

q = integral(fun,0,1,Vectorized=false)
q = 
0.6667

创建函数 f(x)=x5e-xsinx

fun = @(x) x.^5.*exp(-x).*sin(x);

计算从 x=0x=Inf 的积分,并调整绝对误差和相对误差。

format long
q = integral(fun,0,Inf,AbsTol=1e-13,RelTol=1e-8)
q = 
 -14.999999999998360

输入参数

全部折叠

被积函数,指定为函数句柄,用于定义求积分的函数。

对于标量值问题,函数 y = fun(x) 必须接受向量参量 x,并返回向量结果 y。因此,fun 通常使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。

如果您将 ArrayValued 名称-值参量指定为 true,则 fun 必须接受标量输入并返回固定大小数组。

x 的下限,指定为实数(有限或无限)或复数(有限)。如果 xminxmax 是复数,则 integral 沿从 xminxmax 的直线逼近路径积分。

数据类型: double | single
复数支持:

x 的上限,指定为实数(有限或无限)或复数(有限)。如果 xminxmax 是复数,则 integral 沿从 xminxmax 的直线逼近路径积分。

数据类型: double | single
复数支持:

名称-值参数

全部折叠

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

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

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

注意

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

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

数据类型: double | single

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

注意

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

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

数据类型: double | single

函数是数组值函数,指定为数值或逻辑值 1 (true) 或 0 (false)。将 ArrayValued 指定为 true1,以指示 fun 是接受标量输入并返回向量、矩阵或 N 维数组输出的函数。

false 的默认值指示 fun 是一个接受向量输入并返回向量输出的函数。

自 R2026a 起

执行向量化计算,指定为数值或逻辑值 1 (true) 或 0 (false)。默认情况下,Vectorizedtrue,并且积分的计算是向量化的,以便运行更快。对于标量值函数,被积函数 y = fun(x) 必须接受向量参量 x 并按元素运算,从而返回向量结果 y

如果您将 Vectorized 指定为 false,则被积函数只接受标量参量 x 并返回标量结果 y

注意

如果您将 ArrayValued 指定为 true,则 integral 会忽略 Vectorized 的值。

积分路点,指定为实数或复数向量。使用路点表示积分器要在初始网格中使用的积分区间中的点:

  • 在关注的函数特征附近添加更多计算点,例如局部极值。

  • 通过指定不连续点的位置,在被积函数的不连续点附近高效求积分。

  • 通过指定复数作为路点来执行复围道积分。如果 xminxmax 或任何路点向量项为复数,则会在复平面中针对直线路径序列求积分。在本例中,所有积分范围和路点必须为有限值。

请勿使用路点指定奇异点。而应拆分区间,并在端点处将单独的积分结果与奇异点相加。

示例: q = integral(fun,xmin,xmax,Waypoints=[1+1i,1-1i]) 指定了积分区间中的两个复数路点。

数据类型: double | single
复数支持:

输出参量

全部折叠

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

提示

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

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

  • 如果为积分指定单精度范围,或者如果 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.

扩展功能

全部展开

版本历史记录

在 R2012a 中推出

全部展开