跳轉到

1951 年 Itô 公式:鏈鎖律之死#

探案代號 : 二階兇手

一句話案情 : 牛頓的鏈鎖律在布朗世界離奇死亡 , 現場多出一具二階屍體 。

案件檔案

項目 內容
案發時間 1951 年 , Memoirs of the American Mathematical Society
案發地點 美國 , Itô 將戰時研究集結為英文巨著
主角 Itô Kiyosi , 從積分走向微分的集大成者
核心證物 隨機鏈鎖律 , Itô 表 , 幾何布朗運動顯解
涉案人物 Newton , Leibniz , Wiener , Itô , Stratonovich
案件狀態 已破案 , 隨機微積分的王冠
關聯案件 1942 年 Itô 積分 , 1931 年 Kolmogorov 方程 , 1973 年 Black–Scholes 公式

案發現場#

1951 年的分析教室 , 黑板上還寫著牛頓的鏈鎖律 。

若 \(x(t)\) 光滑 , 則 \(df = f^{\prime} dx\) , 一階即可 , 乾淨俐落 。

可是布朗運動 \(W_t\) 根本不光滑 , 二次變差不為零 , 反而等於時間本身 。

學生拿 \(f(W_t) = W_t^2\) 做實驗 , 用普通微分去算 , 結果期望對不上模擬 。

模擬顯示 \(E[W_t^2] = t\) , 普通鏈鎖律卻預言均值為零 , 屍體就是這樣被發現的 。

更離奇的是股市 , 幾何布朗運動的對數漂移總是少一塊 , 少的正是二分之一波動平方 。

物理學家懷疑是計算錯誤 , 數學家懷疑是模型錯誤 , 偵探 Itô 說是微分錯誤 。

他宣告 , 在隨機世界 , Taylor 必須展到二階 , 因為 \(dW^2 = dt\) 。

鏈鎖律沒有失蹤 , 它是被二階項謀殺的 , 兇手就藏在二次變差裡 。

偵查過程#

偵探先亮出兇器 , 即二次變差 \(\langle X \rangle\) 。

對布朗運動 , 在分割加細時平方和收斂至時間 。

\[ \sum_i (W_{t_{i+1}} - W_{t_i})^2 \to T \]

其中收斂為依機率收斂 , 記為 \(\langle W \rangle_t = t\) 。

白話是 , 布朗運動走得太抖 , 一階小量平方後仍是一階 , 不可忽略 。

接著對光滑函數 \(f\) 作 Taylor 展開至二階 。

\[ \Delta f \approx f^{\prime} \Delta X + \frac{1}{2} f^{\prime\prime} (\Delta X)^2 \]

其中 \(\Delta X\) 為小增量 , 第二項在普通微積分中可丟 , 在此不可丟 。

取極限即得 Itô 公式 , 一維版本如下 。

\[ df = f^{\prime} dX + \frac{1}{2} f^{\prime\prime} d\langle X \rangle \]

其中 \(X\) 為 Itô 過程 , \(f\) 為二次可微函數 , \(d\langle X \rangle\) 為二次變差微元 。

若 \(X\) 滿足 \(dX = b dt + \sigma dW\) , 則公式展開為實戰版 。

\[ df(X_t) = ( b f^{\prime} + \frac{1}{2} \sigma^2 f^{\prime\prime} ) dt + \sigma f^{\prime} dW_t \]

其中 \(b\) 為漂移 , \(\sigma\) 為擴散 , \(W\) 為布朗運動 。

偵探將乘法規則濃縮為 Itô 表 , 如下 。

乘積 結果 說明
\(dt \cdot dt\) \(0\) 高階無窮小 , 忽略
\(dt \cdot dW\) \(0\) 階數為 \(dt^{3/2}\) , 忽略
\(dW \cdot dW\) \(dt\) 核心 , 二次變差現形
\(dW \cdot dt\) \(0\) 同第二列

有了此表 , 隨機微分可如代數般運算 , 偵探示範經典命案 \(W_t^2\) 。

設 \(f(x) = x^2\) , 則 \(f^{\prime} = 2x\) , \(f^{\prime\prime} = 2\) 。

\[ d(W_t^2) = 2 W_t dW_t + dt \]

取期望後鞅項消失 , 得 \(E[W_t^2] = t\) , 與模擬吻合 , 冤案昭雪 。

壓軸證據是幾何布朗運動 , 股市模型的核心 。

設股價滿足 \(dS = \mu S dt + \sigma S dW\) , 其中 \(\mu\) 為報酬率 , \(\sigma\) 為波動率 。

對 \(f(S) = \ln S\) 施用 Itô 公式 , 得 \(d \ln S = (\mu - \sigma^2/2) dt + \sigma dW\) 。

積分即得顯解 , Itô 修正項 \(-\sigma^2/2\) 現形 。

\[ S_t = S_0 e^{ (\mu - \sigma^2/2) t + \sigma W_t } \]

其中 \(S_0\) 為初值 , 指數中多出的負項即鏈鎖律之死的代價 。

偵探最後整理普通與隨機鏈鎖律的驗屍報告 。

特徵 普通鏈鎖律 Itô 公式
對象 光滑路徑 \(x(t)\) 半鞅 \(X_t\)
展開階數 一階 \(f^{\prime} dx\) 二階 , 多 \(\frac{1}{2}f^{\prime\prime}d\langle X\rangle\)
二次變差 零 非零 , 如 \(dW^2 = dt\)
期望 無修正 鞅項期望為零 , 漂移多修正
幾何布朗 指數無修正 指數多 \(-\sigma^2/2\)

結案報告#

真兇確認 : 二次變差 , 它讓二階項死而復生 , 謀殺了普通鏈鎖律 。

Itô 公式重建了隨機世界的微分法 , 從此 SDE 可以像 ODE 一樣變換與求解 。

本案遺產有四件 , 第一是 SDE 理論正式完工 , 強解弱解與存在唯一皆以此公式為工具 。

第二 , 生成元與 Itô 公式互證 , 1931 年 Kolmogorov 後向方程有了軌道證明 。

第三 , 金融工程直接封神 , Black–Scholes 偏微分方程的推導全靠此公式 。

第四 , 數值格式得以驗屍 , Milstein 格式多出的一項正是二階 Taylor 的遺腹子 。

當然 , Stratonovich 派仍在抗議 , 他們的對稱積分保留了普通鏈鎖律 , 但代價是失去鞅性 , 金融學家不買帳 。

1951 年之後 , 學隨機微積分的人第一課就是背誦 \(dW^2 = dt\) , 如同學武先蹲馬步 。

證據與工具#

證物一號 : Itô 公式本體 , 一維版 。

\[ df = f^{\prime} dX + \frac{1}{2} f^{\prime\prime} d\langle X \rangle \]

其中 \(f\) 須二次連續可微 , \(X\) 為 Itô 過程 。

證物二號 : 布朗表的核心 , 二次變差 。

\[ dW^2 = dt \]

其中 \(dW^2\) 理解為二次變差微元 , 非逐點乘法 。

證物三號 : 幾何布朗運動顯解 , 修正項的鐵證 。

\[ S_t = S_0 e^{ (\mu - \sigma^2/2) t + \sigma W_t } \]

其中 \(\mu\) 為漂移 , \(\sigma\) 為波動 , \(W_t\) 為布朗運動 。

偵探工具 : Taylor 二階展開 , 局部化與停時 , 單調收斂與控制收斂 , 鞅的可選停時 。

數值呼應可參考程式 _code/1951-ito_gbm.py , 對數均值還原出 \(-\sigma^2/2\) 修正 。

符號速查表如下 。

符號 意義 備註
\(f^{\prime}\) 一階導數 普通微分部分
\(f^{\prime\prime}\) 二階導數 隨機修正係數
\(\langle X \rangle\) 二次變差 抖動的累積能量
\(S_t\) 股價 幾何布朗運動
\(\mu\) 漂移率 平均報酬
\(\sigma\) 波動率 抖動強度

補充:程式實作#

對應程式#

本節對應 1951-ito_gbm.py ,以幾何布朗運動驗證 Itô 修正項。

理論呼應#

本文核心是幾何布朗運動顯解 \(S_t = S_0e^{(\mu-\sigma^2/2)t+\sigma W_t}\) ,修正項 \(-\sigma^2/2\) 來自 \(dW^2 = dt\) 。 取期望後鞅項消失,得 \(E[S_T] = S_0e^{\mu T}\) ,普通鏈鎖律漏掉二階項則系統性偏高 \(e^{\sigma^2T/2}\) 倍。 程式以三十萬條 \(W_T\) 同時模擬正確解與錯誤解,前者還原均值,後者暴露 \(+4.60\%\) 理論偏誤。 實測正確誤差僅 \(0.0176\%\) ,錯誤偏誤 \(+4.62\%\) ,與 \(f^{\prime\prime}\) 修正的預言吻合。

執行方式#

python3 _code/1951-ito_gbm.py

實測輸出#

exact E[S_T]=110.5171 , correct MC mean=110.5365 rel_err=0.0176% , wrong MC mean=115.6243 bias=+4.62% (theory +4.60%) , VERIFY ... PASS 。

讀者實驗#

將 \(\sigma\) 改為 \(0.5\) 再重跑一次,觀察錯誤解的理論偏誤如何隨波動率平方放大。

完整程式如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""1951 Ito GBM 對應 wiki 說明
對應 wiki:1951 年 Ito 引理,GBM dS = mu*S dt + sigma*S dW。
Ito 公式給精確解 S_T = S0*exp((mu-sigma^2/2)T + sigma*W_T),故 E[S_T]=S0*exp(mu*T)。
若誤用常微分鏈鎖律(漏掉 -sigma^2/2)則 S_wrong = S0*exp(mu*T+sigma*W_T),期望系統性偏高 e^{sigma^2 T/2} 倍。
規範:只用 numpy,固定種子,不畫圖只印數字,結尾印 VERIFY 並用 assert 把關。
"""
import numpy as np

np.random.seed(5)

S0 = 100.0
mu = 0.1
sigma = 0.3
T = 1.0
N = 300000

W = np.sqrt(T) * np.random.randn(N)
S_correct = S0 * np.exp((mu - 0.5 * sigma ** 2) * T + sigma * W)
S_wrong = S0 * np.exp(mu * T + sigma * W)  # 誤用常微分鏈鎖律:少了 -sigma^2/2

mean_correct = float(np.mean(S_correct))
mean_wrong = float(np.mean(S_wrong))
exact = S0 * np.exp(mu * T)
rel_err = abs(mean_correct - exact) / exact
wrong_bias = (mean_wrong - exact) / exact
theory_wrong_factor = np.exp(0.5 * sigma ** 2 * T) - 1.0

print(f"GBM S0={S0} mu={mu} sigma={sigma} T={T} N={N}")
print(f"exact E[S_T]={exact:.4f}")
print(f"correct MC mean={mean_correct:.4f} rel_err={rel_err:.4%}")
print(f"wrong   MC mean={mean_wrong:.4f} bias=+{wrong_bias:.2%} (theory +{theory_wrong_factor:.2%})")

assert rel_err < 0.01, f"correct rel err {rel_err} >= 1%"
assert wrong_bias > 0.03, f"wrong bias {wrong_bias} not systematically high"
print(f"VERIFY 1951 Ito GBM: correct_err={rel_err:.4%}<1% wrong_bias=+{wrong_bias:.2%}>3% PASS")