Main Content

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

integral

数值积分

说明

示例

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

示例

q = integral(fun,xmin,xmax,Name,Value) 指定具有一个或多个 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 设置为零,以便 integral 仅尝试满足绝对误差容限。

q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
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

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

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

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

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

输入参数

全部折叠

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

对于标量值问题,函数 y = fun(x) 必须接受向量参数 x,并返回向量结果 y。这通常意味着 fun 必须使用数组运算符而不是矩阵运算符。例如,使用 .* (times) 而不是 * (mtimes)。如果将 'ArrayValued' 选项设置为 truefun 必须接受标量并返回固定大小的数组。

x 的下限,指定为实数(有限或无限)标量值或复数(有限)标量值。如果 xminxmax 为复数,integralxminxmax 之间沿直线路径逼近路径积分。

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

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

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

名称-值对组参数

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

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

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

注意

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

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

数据类型: single | double

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

注意

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

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

数据类型: single | double

数组值函数标志,指定为以逗号分隔的对组,其中包含 'ArrayValued' 和数值或逻辑值 1 (true) 或 0 (false)。将该标志设为 true1,以指示 fun 是接受标量输入并返回向量、矩阵或 N 维数组输出的函数。

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

示例: integral(fun,a,b,'ArrayValued',true) 表示被积函数是数组值函数。

积分路点,指定为由 'Waypoints' 和实数/复数的向量组成的逗号分隔对组。使用路点表示积分器将在初始网格中使用的积分区间中的点。

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

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

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

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

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

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

提示

  • integral 函数尝试满足:

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

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

参考

[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB®,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.

在 R2012a 中推出