Main Content

quadl

(不推荐)以自适应 Lobatto 积分法计算数值积分

不推荐使用 quadl。请改用 integral

语法

q = quadl(fun,a,b)
q = quadl(fun,a,b,tol)
quadl(fun,a,b,tol,trace)
[q,fcnt] = quadl(...)

说明

q = quadl(fun,a,b) 使用递归自适应 Lobatto 积分法求取函数 funab 的积分,误差小于 10-6fun 是函数句柄。它接受向量 x 并返回向量 y,即在每个 x 元素处计算的函数 fun。范围 ab 必须是有限的。

参数化函数解释了如何为函数 fun 提供其他参数(如果需要)。

q = quadl(fun,a,b,tol) 使用绝对误差容限 tol 代替默认值 1.0e-6tol 值越大,函数计算量越少并且计算速度加快,但结果不太精确。

具有非零 tracequadl(fun,a,b,tol,trace) 在递归期间显示 [fcnt a b-a q] 的值。

[q,fcnt] = quadl(...) 返回函数计算数。

fun 的定义中使用数组运算符 .*./.^,这样可以通过向量参数计算该函数。

函数 quad 可能更有效,但被积函数精确度较低并且不均匀。

以下列表包含的信息可以帮助您确定要使用的 MATLAB® 中的求积法函数:

  • quad 函数适用于精确度较低,被积函数平滑性较差的数值积分。

  • 相比 quadl 函数,quad 函数的精确度较高,被积函数也更为平滑。

  • quadgk 函数的精确度最高,会产生震荡被积函数。它支持无限区间并且可以处理端点处的适度奇异性。它还支持沿分段线性路径的围道积分。

  • quadv 函数将数组值 funquad 向量化。

  • 如果区间是无限区间(例如 [a,)),则要存在 fun(x) 的积分,fun(x) 必须在 x 接近无限大时衰减,并且 quadgk 要求它快速衰减。特殊方法应该用于无限区间中的振荡函数,但如果 fun(x) 衰变足够快,则可以使用 quadgk

  • 如果奇异性不太稳固,quadgk 函数将对有限端点处的奇异函数求积分。例如,它将对在端点 c 处的行为与 p >= -1/2log|x-c||x-c|p 类似的函数求积分。如果函数在 (a,b) 内的各点是奇异函数,则在奇异点为端点的子区间上将积分写入为积分和,通过 quadgk 计算它们,并将结果相加。

示例

将函数句柄 @myfun 传递给 quadl

Q = quadl(@myfun,0,2);

其中,函数 myfun.m 为:

function y = myfun(x) 
y = 1./(x.^3-2*x-5);

将匿名函数句柄 F 传递给 quadl

F = @(x) 1./(x.^3-2*x-5);
Q = quadl(F,0,2); 

诊断

quadl 可能发出以下警告之一:

'Minimum step size reached' 指示递归区间细分已生成其长度类似于原始区间长度中舍入误差的子区间。可能是不可积分的奇异性。

'Maximum function count exceeded' 指示被积函数已计算超过 10,000 次。可能是不可积分的奇异性。

'Infinite or Not-a-Number function value encountered' 指示在计算该区间内的被积函数期间发生浮点溢出或除以零。

算法

quadl 使用自适应 Gauss/Lobatto 积分法则实现高阶方法。

参考

[1] Gander, W. and W. Gautschi, “Adaptive Quadrature – Revisited,” BIT, Vol. 40, 2000, pp. 84-101. This document is also available at https://people.inf.ethz.ch/gander/.

版本历史记录

在 R2006a 之前推出