第2章:有限差分法入门
好,咱们今天聊聊有限差分法。说实话,我刚入行那会儿,看到「偏微分方程」这几个字就头大。后来做期权定价项目,被逼着啃下来,才发现这东西其实没那么玄乎。
有限差分法,说白了就是「用离散代替连续」。你想想看,期权价格随时间和标的价格变化,这是个连续的过程。但计算机没法处理连续,只能处理离散的点。那怎么办?把时间和价格切成一小块一小块,在网格上求解。
2.1 网格剖分原理
网格剖分,就是给问题画格子。我习惯把时间轴和价格轴分别处理。
假设期权剩余期限是 T,我们把时间分成 N 等份:
Δt = T / N
t_n = n * Δt, n = 0, 1, 2, ..., N
价格方面,假设标的价格范围是 [0, S_max],分成 M 等份:
ΔS = S_max / M
S_i = i * ΔS, i = 0, 1, 2, ..., M
这样我们就得到了一个 (M+1) × (N+1) 的网格。每个节点 (i, n) 对应价格 S_i、时间 t_n 处的期权价值 V_i^n。
关键点:S_max 怎么选?我一般取标的价格的 3-4 倍。取太小了边界条件会扭曲结果,取太大了浪费计算资源。曾经有个项目,我偷懒取了 2 倍,结果深度实值期权的定价偏差大到离谱。
下面这张图展示了网格剖分的核心逻辑:
2.2 显式差分格式
显式格式,思路很直接。我们用差分近似代替偏导数。
对于时间导数,用向前差分:
∂V/∂t ≈ (V_i^{n+1} - V_i^n) / Δt
对于价格的一阶和二阶导数,用中心差分:
∂V/∂S ≈ (V_{i+1}^n - V_{i-1}^n) / (2ΔS)
∂²V/∂S² ≈ (V_{i+1}^n - 2V_i^n + V_{i-1}^n) / (ΔS)²
代入 Black-Scholes 方程,整理后得到:
V_i^{n+1} = α_i * V_{i-1}^n + β_i * V_i^n + γ_i * V_{i+1}^n
其中系数 α_i、β_i、γ_i 由参数 σ、r、Δt、ΔS 决定。
我的经验:显式格式写起来最顺手,代码也就十几行。但坑也最多。我曾经用显式格式算一个美式期权,网格取太粗,结果算出来的价格比理论值高了 5%。后来一查,稳定性条件没满足。
2.3 隐式差分格式
隐式格式和显式正好相反。时间导数用向后差分:
∂V/∂t ≈ (V_i^{n+1} - V_i^n) / Δt
但空间导数全部用 n+1 时刻的值:
∂V/∂S ≈ (V_{i+1}^{n+1} - V_{i-1}^{n+1}) / (2ΔS)
∂²V/∂S² ≈ (V_{i+1}^{n+1} - 2V_i^{n+1} + V_{i-1}^{n+1}) / (ΔS)²
这就麻烦了。每个时间步,我们得到的是一个线性方程组:
A * V^{n+1} = V^n + 边界条件
矩阵 A 是三对角的,可以用追赶法高效求解。
注意:隐式格式虽然无条件稳定,但每步都要解方程组。我刚开始写的时候,矩阵索引搞错了好几次,算出来的结果全是 NaN。调试了整整一个下午。
2.4 Crank-Nicolson 格式
Crank-Nicolson 格式,说白了就是显式和隐式的加权平均。取 θ = 0.5:
空间导数 = 0.5 * (显式格式的空间导数) + 0.5 * (隐式格式的空间导数)
写成矩阵形式:
(I - 0.5 * Δt * L) * V^{n+1} = (I + 0.5 * Δt * L) * V^n
其中 L 是空间差分算子。
为什么选 Crank-Nicolson?精度高,时间方向是二阶收敛。显式和隐式都只有一阶。我做过对比测试,同样的网格,Crank-Nicolson 的误差比显式小一个数量级。
2.5 稳定性分析
稳定性这东西,说白了就是「误差会不会越算越大」。
显式格式的稳定性条件(冯·诺依曼分析):
Δt ≤ (ΔS)² / (σ² * S_max² + r * (ΔS)²)
简化后常用:
Δt ≤ (ΔS)² / (2 * σ² * S_max²)
隐式格式无条件稳定。Crank-Nicolson 也是无条件稳定。
| 格式 | 精度(时间方向) | 稳定性条件 | 每步计算量 |
|---|---|---|---|
| 显式 | 一阶 | 有条件(Δt 受限) | O(M) |
| 隐式 | 一阶 | 无条件 | O(M) |
| Crank-Nicolson | 二阶 | 无条件 | O(M) |
避坑指南:我曾经在算一个波动率很高的期权时,显式格式的 Δt 要求小到 0.0001 年,算到天荒地老。后来换成 Crank-Nicolson,Δt 取 0.01 年,结果精度还更好。所以我的建议是:能用 Crank-Nicolson 就别用显式。
嗯,到这里,有限差分法的基础就讲完了。网格怎么画、三种格式怎么写、稳定性怎么判断,这些是后面所有内容的地基。下一节我们会把这些方法真正用到期权定价上,到时候你会看到,这些抽象的公式是怎么变成真金白银的。