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 积分法求取函数 fun
从 a
到 b
的积分,误差小于 10-6。fun
是函数句柄。它接受向量 x
并返回向量 y
,即在每个 x
元素处计算的函数 fun
。范围 a
和 b
必须是有限的。
参数化函数解释了如何为函数 fun
提供其他参数(如果需要)。
q = quadl(fun,a,b,tol)
使用绝对误差容限 tol
代替默认值 1.0e-6
。tol
值越大,函数计算量越少并且计算速度加快,但结果不太精确。
具有非零 trace
的 quadl(fun,a,b,tol,trace)
在递归期间显示 [fcnt a b-a q]
的值。
[q,fcnt] = quadl(...)
返回函数计算数。
在 fun
的定义中使用数组运算符 .*
、./
和 .^
,这样可以通过向量参量计算该函数。
函数 quad
可能更有效,但被积函数精确度较低并且不均匀。
以下列表包含的信息可以帮助您确定要使用的 MATLAB® 中的求积法函数:
quad
函数适用于精确度较低,被积函数平滑性较差的数值积分。相比
quadl
函数,quad
函数的精确度较高,被积函数也更为平滑。quadgk
函数的精确度最高,会产生震荡被积函数。它支持无限区间并且可以处理端点处的适度奇异性。它还支持沿分段线性路径的围道积分。quadv
函数将数组值fun
的quad
向量化。如果区间是无限区间(例如 ),则要存在
fun(x)
的积分,fun(x)
必须在x
接近无限大时衰减,并且quadgk
要求它快速衰减。特殊方法应该用于无限区间中的振荡函数,但如果fun(x)
衰变足够快,则可以使用quadgk
。如果奇异性不太稳固,
quadgk
函数将对有限端点处的奇异函数求积分。例如,它将对在端点c
处的行为与p >= -1/2
的log|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 之前推出