反常积分通过极限处理无穷区间或无界奇点。只有有限个跳跃点的有界函数仍可有普通黎曼积分;间断本身不意味着积分反常。下列定义要求每个截断积分存在,而收敛要求各个所需极限均存在且有限。可参阅 Paul Dawkins 的反常积分讲解。
幂函数的无穷尾部判别须假设 a>0。零点附近的条件相反:∫01x−pdx 当且仅当 p<1 时收敛。p=1 时,先积分得到 x1−p/(1−p),再取相应端点极限;p=1 时使用 lnx。因此
∫1∞x−2dx=R→∞lim(1−1/R)=1,∫01x−1/2dx=ε→0+lim(2−2ε)=2.
但 ∫01x−2dx 发散。比较法的例子是:x≥1 时 0≤1/(1+x2)≤1/x2,所以前者的无穷尾部收敛。参与比较的函数须在有限截断区间上可积。
不能跨奇点抵消无穷大。1/x 在 [−1,1] 上的左右积分分别发散。对称截断虽给出零,但那是柯西主值,不是反常积分收敛。
反常积分
反常积分(Improper Integrals)处理两类特殊情况:积分区间无限长,或被积函数在区间内存在无界奇点。其核心定义是通过极限来赋予积分值。
无穷限积分
-
上限为无穷:
∫a∞f(x)dx=limt→∞∫atf(x)dx
-
下限为无穷:
∫−∞bf(x)dx=limt→−∞∫tbf(x)dx
-
双侧无穷:
需拆分为两部分,且两部分必须同时收敛:
∫−∞∞f(x)dx=∫−∞cf(x)dx+∫c∞f(x)dx
被积函数间断
若 f(x) 在区间 [a,b] 内的某点 c 处无界,需将积分拆分为两部分,分别取极限:
-
在左端点 a 处间断:
∫abf(x)dx=limt→a+∫tbf(x)dx
-
在右端点 b 处间断:
∫abf(x)dx=limt→b−∫atf(x)dx
-
在区间内部 c 处间断 (a<c<b):
∫abf(x)dx=∫acf(x)dx+∫cbf(x)dx
(注:两部分积分必须均收敛)
比较判别法
对于定义在 [a,∞) 上的非负函数 f(x) 和 g(x):
- 收敛性传递: 若 0≤f(x)≤g(x) 且 ∫a∞g(x)dx 收敛,则 ∫a∞f(x)dx 必收敛。
- 发散性传递: 若 0≤g(x)≤f(x) 且 ∫a∞g(x)dx 发散,则 ∫a∞f(x)dx 必发散。
关键结论:p-积分
对于 p>0,积分 ∫a∞xp1dx 的收敛性仅取决于 p 的值:
- p>1 时收敛;
- p≤1 时发散。
数值积分方法
当定积分无法解析求解或计算过于复杂时,数值积分通过离散采样近似计算积分值。以下是三种常用算法。
中点法则 (Midpoint Rule)
将区间 [a,b] 分为 n 等份,取每个子区间的中点函数值乘以区间宽度并求和。
∫abf(x)dx≈Δx[f(x1∗)+f(x2∗)+…+f(xn∗)]
其中 Δx=nb−a,xi∗ 为第 i 个子区间的中点。
梯形法则 (Trapezoid Rule)
利用梯形面积公式近似曲线下面积。对每个子区间,取两端点函数值的平均值乘以宽度。
∫abf(x)dx≈2Δx[f(x0)+2f(x1)+2f(x2)+…+2f(xn−1)+f(xn)]
辛普森法则 (Simpson's Rule)
每两个子区间用经过三个相邻采样点的二次曲线近似函数;函数足够光滑时,其收敛阶更高。要求子区间数 n 必须为偶数。
∫abf(x)dx≈3Δx[f(x0)+4f(x1)+2f(x2)+…+4f(xn−1)+f(xn)]
应用场景
在计算机仿真、优化算法及无法符号积分的工程问题中,这些数值方法提供了高效的近似解。
Python 实现
import numpy as np
def midpoint_rule(f, a, b, n):
if isinstance(n, bool) or not isinstance(n, int) or n <= 0:
raise ValueError("n must be a positive integer")
dx = (b - a) / n
x_mid = np.linspace(a + dx/2, b - dx/2, n)
return np.sum(f(x_mid)) * dx
def trapezoid_rule(f, a, b, n):
if isinstance(n, bool) or not isinstance(n, int) or n <= 0:
raise ValueError("n must be a positive integer")
dx = (b - a) / n
x = np.linspace(a, b, n + 1)
return dx/2 * np.sum(f(x[:-1]) + f(x[1:]))
def simpsons_rule(f, a, b, n):
if isinstance(n, bool) or not isinstance(n, int) or n <= 0:
raise ValueError("n must be a positive integer")
if n % 2 == 1:
raise ValueError("n must be even for Simpson's Rule")
dx = (b - a) / n
x = np.linspace(a, b, n + 1)
y = f(x)
return dx/3 * np.sum(y[0:-1:2] + 4*y[1::2] + y[2::2])
参数说明
f: 被积函数。
a, b: 积分上下限。
n: 子区间数量。
dx: 步长(子区间宽度)。
- 注意:
simpsons_rule 强制要求 n 为偶数。
误差界与可复算示例
设 a<b、I=∫abf(x)dx。复合求积公式的误差界为
∣I−Mn∣≤24n2K2(b−a)3,∣I−Tn∣≤12n2K2(b−a)3,∣I−Sn∣≤180n4K4(b−a)5.
前两式要求二阶导数连续且绝对值不超过 K2;辛普森公式要求四阶导数连续且绝对值不超过 K4,并且 n 为偶数。它们约束离散化误差,不包括浮点舍入误差。步长减半时,误差界分别缩小为原来的 1/4 或 1/16。精确算术下,辛普森法对三次多项式精确,但对不光滑函数不保证总是更准。
对 [0,1] 上的 f(x)=x2,取 n=2,得到 M2=5/16、T2=3/8、S2=1/3,而真值 I=1/3。绝对误差分别为 1/48、1/24 和零,与 K2=2、K4=0 的界一致。若要保证此例的梯形误差不超过 10−4,可取 n≥⌈1/(6⋅10−4)⌉=41。
实现需要已安装的 NumPy、有限上下限,以及能接收数组并返回同形状数组的函数。常函数应写成 lambda x: np.ones_like(x),不能写成 lambda x: 1。这些是固定网格的教学程序,不是自适应奇异积分求解器。
f = lambda x: x**2
assert np.isclose(midpoint_rule(f, 0, 1, 2), 5/16)
assert np.isclose(trapezoid_rule(f, 0, 1, 2), 3/8)
assert np.isclose(simpsons_rule(f, 0, 1, 2), 1/3)
可比较 n,2n,4n 的结果观察收敛,但数值接近不是严格误差保证:网格可能漏掉狭窄尖峰。梯形法和辛普森法不能直接采样奇异端点,应先分段或换元。无穷区间截断还会引入独立的尾部误差:把 ∫1∞x−2dx 换成 ∫1Rx−2dx,恰好遗漏 1/R,加密网格也无法消除它。