跳到主要内容

反常积分与数值积分

反常积分通过极限处理无穷区间或无界奇点。只有有限个跳跃点的有界函数仍可有普通黎曼积分;间断本身不意味着积分反常。下列定义要求每个截断积分存在,而收敛要求各个所需极限均存在且有限。可参阅 Paul Dawkins 的反常积分讲解

幂函数的无穷尾部判别须假设 a>0a>0。零点附近的条件相反:01xpdx\int_0^1x^{-p}\,dx 当且仅当 p<1p<1 时收敛。p1p\ne1 时,先积分得到 x1p/(1p)x^{1-p}/(1-p),再取相应端点极限;p=1p=1 时使用 lnx\ln x。因此

1x2dx=limR(11/R)=1,01x1/2dx=limε0+(22ε)=2.\int_1^\infty x^{-2}\,dx=\lim_{R\to\infty}(1-1/R)=1, \qquad \int_0^1x^{-1/2}\,dx=\lim_{\varepsilon\to0^+}(2-2\sqrt\varepsilon)=2.

01x2dx\int_0^1x^{-2}\,dx 发散。比较法的例子是:x1x\ge101/(1+x2)1/x20\le1/(1+x^2)\le1/x^2,所以前者的无穷尾部收敛。参与比较的函数须在有限截断区间上可积。

不能跨奇点抵消无穷大。1/x1/x[1,1][-1,1] 上的左右积分分别发散。对称截断虽给出零,但那是柯西主值,不是反常积分收敛。

反常积分

反常积分(Improper Integrals)处理两类特殊情况:积分区间无限长,或被积函数在区间内存在无界奇点。其核心定义是通过极限来赋予积分值。

无穷限积分

  • 上限为无穷:

    af(x)dx=limtatf(x)dx\int_{a}^{\infty} f(x) \, dx = \lim_{{t \to \infty}} \int_{a}^{t} f(x) \, dx

  • 下限为无穷:

    bf(x)dx=limttbf(x)dx\int_{-\infty}^{b} f(x) \, dx = \lim_{{t \to -\infty}} \int_{t}^{b} f(x) \, dx

  • 双侧无穷:

    需拆分为两部分,且两部分必须同时收敛:

    f(x)dx=cf(x)dx+cf(x)dx\int_{-\infty}^{\infty} f(x) \, dx = \int_{-\infty}^{c} f(x) \, dx + \int_{c}^{\infty} f(x) \, dx

被积函数间断

f(x)f(x) 在区间 [a,b][a, b] 内的某点 cc 处无界,需将积分拆分为两部分,分别取极限:

  • 在左端点 aa 处间断:

    abf(x)dx=limta+tbf(x)dx\int_{a}^{b} f(x) \, dx = \lim_{{t \to a^{+}}} \int_{t}^{b} f(x) \, dx

  • 在右端点 bb 处间断:

    abf(x)dx=limtbatf(x)dx\int_{a}^{b} f(x) \, dx = \lim_{{t \to b^{-}}} \int_{a}^{t} f(x) \, dx

  • 在区间内部 cc 处间断 (a<c<ba < c < b):

    abf(x)dx=acf(x)dx+cbf(x)dx\int_{a}^{b} f(x) \, dx = \int_{a}^{c} f(x) \, dx + \int_{c}^{b} f(x) \, dx (注:两部分积分必须均收敛)

比较判别法

对于定义在 [a,)[a, \infty) 上的非负函数 f(x)f(x)g(x)g(x)

  • 收敛性传递:0f(x)g(x)0 \leq f(x) \leq g(x)ag(x)dx\int_a^\infty g(x)\,dx 收敛,则 af(x)dx\int_a^\infty f(x)\,dx 必收敛。
  • 发散性传递:0g(x)f(x)0 \leq g(x) \leq f(x)ag(x)dx\int_a^\infty g(x)\,dx 发散,则 af(x)dx\int_a^\infty f(x)\,dx 必发散。

关键结论:p-积分

对于 p>0p > 0,积分 a1xpdx\int_{a}^{\infty} \frac{1}{x^p} \, dx 的收敛性仅取决于 pp 的值:

  • p>1p > 1 时收敛;
  • p1p \leq 1 时发散。

数值积分方法

当定积分无法解析求解或计算过于复杂时,数值积分通过离散采样近似计算积分值。以下是三种常用算法。

中点法则 (Midpoint Rule)

将区间 [a,b][a, b] 分为 nn 等份,取每个子区间的中点函数值乘以区间宽度并求和。

abf(x)dxΔx[f(x1)+f(x2)++f(xn)]\int_{a}^{b} f(x) dx \approx \Delta x \left[ f\left(x_1^*\right) + f\left(x_2^*\right) + \ldots + f\left(x_n^*\right) \right]

其中 Δx=ban\Delta x = \frac{b - a}{n}xix_i^* 为第 ii 个子区间的中点。

梯形法则 (Trapezoid Rule)

利用梯形面积公式近似曲线下面积。对每个子区间,取两端点函数值的平均值乘以宽度。

abf(x)dxΔx2[f(x0)+2f(x1)+2f(x2)++2f(xn1)+f(xn)]\int_{a}^{b} f(x) dx \approx \frac{\Delta x}{2} \left[ f(x_0) + 2f(x_1) + 2f(x_2) + \ldots + 2f(x_{n-1}) + f(x_n) \right]

辛普森法则 (Simpson's Rule)

每两个子区间用经过三个相邻采样点的二次曲线近似函数;函数足够光滑时,其收敛阶更高。要求子区间数 nn 必须为偶数

abf(x)dxΔx3[f(x0)+4f(x1)+2f(x2)++4f(xn1)+f(xn)]\int_{a}^{b} f(x) dx \approx \frac{\Delta x}{3} \left[ f(x_0) + 4f(x_1) + 2f(x_2) + \ldots + 4f(x_{n-1}) + f(x_n) \right]

应用场景

在计算机仿真、优化算法及无法符号积分的工程问题中,这些数值方法提供了高效的近似解。

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<ba<bI=abf(x)dxI=\int_a^b f(x)\,dx复合求积公式的误差界

IMnK2(ba)324n2,ITnK2(ba)312n2,ISnK4(ba)5180n4.|I-M_n|\le\frac{K_2(b-a)^3}{24n^2},\qquad |I-T_n|\le\frac{K_2(b-a)^3}{12n^2},\qquad |I-S_n|\le\frac{K_4(b-a)^5}{180n^4}.

前两式要求二阶导数连续且绝对值不超过 K2K_2;辛普森公式要求四阶导数连续且绝对值不超过 K4K_4,并且 nn 为偶数。它们约束离散化误差,不包括浮点舍入误差。步长减半时,误差界分别缩小为原来的 1/41/41/161/16。精确算术下,辛普森法对三次多项式精确,但对不光滑函数不保证总是更准。

[0,1][0,1] 上的 f(x)=x2f(x)=x^2,取 n=2n=2,得到 M2=5/16M_2=5/16T2=3/8T_2=3/8S2=1/3S_2=1/3,而真值 I=1/3I=1/3。绝对误差分别为 1/481/481/241/24 和零,与 K2=2K_2=2K4=0K_4=0 的界一致。若要保证此例的梯形误差不超过 10410^{-4},可取 n1/(6104)=41n\ge\lceil\sqrt{1/(6\cdot10^{-4})}\rceil=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,4nn,2n,4n 的结果观察收敛,但数值接近不是严格误差保证:网格可能漏掉狭窄尖峰。梯形法和辛普森法不能直接采样奇异端点,应先分段或换元。无穷区间截断还会引入独立的尾部误差:把 1x2dx\int_1^\infty x^{-2}\,dx 换成 1Rx2dx\int_1^R x^{-2}\,dx,恰好遗漏 1/R1/R,加密网格也无法消除它。

探索关联打开关联网络