9.3 数值积分
绝大多数金融模型的期望值、折现值都需要积分计算——但解析解往往不存在。数值积分是将这些连续问题离散化的基础工具。
梯形法则(Trapezoidal Rule)
公式
将 均分为 个小区间,每个小区间用梯形近似:
- 误差阶:( 是大O记号,表示数量级。 意思是误差与 成正比—— 缩小一半,误差缩小到 )
- 每增加一倍节点,误差约减少至
手算实例: 用 4 个梯形
,步长 。
| 节点 | 权重 | ||
|---|---|---|---|
| 0 | 0.00 | 1(端点) | |
| 1 | 0.25 | 2 | |
| 2 | 0.50 | 2 | |
| 3 | 0.75 | 2 | |
| 4 | 1.00 | 1(端点) |
理论值:
误差:(约 3.13%)
辛普森法则(Simpson's Rule)
使用抛物线(二次多项式)近似每个小区间,需要 为偶数:
- 误差阶:
- 权重模式:
同例: 用 Simpson 法则()
权重模式为 :
对于二次函数 ,Simpson 法则给出精确解——因为抛物线的二次多项式可以精确拟合二次函数。
Python 示例
python
import numpy as np
def trapezoidal(f, a, b, n):
"""梯形法则数值积分"""
h = (b - a) / n
x = np.linspace(a, b, n + 1)
y = f(x)
return h * (0.5 * y[0] + 0.5 * y[-1] + np.sum(y[1:-1]))
def simpson(f, a, b, n):
"""辛普森法则数值积分(n 必须为偶数)"""
if n % 2 != 0:
raise ValueError("n 必须为偶数")
h = (b - a) / n
x = np.linspace(a, b, n + 1)
y = f(x)
return h / 3 * (y[0] + y[-1] +
4 * np.sum(y[1:-1:2]) +
2 * np.sum(y[2:-2:2]))
f = lambda x: x**2
print(f"梯形法 (n=4): {trapezoidal(f, 0, 1, 4):.6f}")
print(f"Simpson (n=4): {simpson(f, 0, 1, 4):.6f}")
print(f"理论值: {1/3:.6f}")
# 输出:
# 梯形法 (n=4): 0.343750
# Simpson (n=4): 0.333333
# 理论值: 0.333333Quant Link:期权定价中的数值积分
欧式期权定价
Black-Scholes 公式有解析解,但许多衍生品(如亚式期权、障碍期权)没有闭式解,需要使用数值积分:
其中 是到期价格的风险中性密度。当密度函数复杂或非参数化时,用数值积分计算。
扩展方法
| 方法 | 精度 | 适用场景 |
|---|---|---|
| 梯形法则 | 一般积分,低维 | |
| Simpson 法则 | 精度要求较高时 | |
| 高斯求积(Gauss-Legendre quadrature——通过选择最优积分点位置和权重,用很少的点达到很高精度的数值求积方法) | 指数收敛 | 光滑函数,最多 ~100 个节点 |
| 蒙特卡洛积分 | 高维积分(>3 维) |
在蒙特卡洛定价中,数值积分思想延伸为随机采样——高维积分(如亚式期权的路径积分)只能用 MC 方法。 \n> 下一步:继续学习 9.4 数值Greeks