文章目录
-
- OU过程简介
- 数值求解
- 解析对比与绘图
OU过程简介
Ornstein-Uhlenbeck(OU) 过程是均值回归(Mean-Reverting)随机过程的经典代表,具有以下几个特征
- 系统存在一个长期平衡值
μ
\\mu
μ - 偏离平衡时会受到与偏离量成正比的恢复力
- 叠加随机扰动
据此,可创建朗之万方程
d
X
t
d
t
=
−
θ
(
X
t
−
μ
)
+
σ
ξ
(
t
)
\\frac{\\mathrm dX_t}{\\mathrm dt}=-\\theta(X_t-\\mu)+\\sigma\\xi(t)
dtdXt=−θ(Xt−μ)+σξ(t)
式中
θ
\\theta
θ为均值回归速率,
μ
\\mu
μ为长期均值,
σ
\\sigma
σ为造成强度,
ξ
(
t
)
\\xi(t)
ξ(t)为高斯白噪声。将其转换为伊藤SDE如下
d
X
t
=
θ
(
μ
−
X
t
)
d
t
+
σ
d
W
t
\\mathrm dX_t=\\theta(\\mu-X_t)\\mathrm dt+\\sigma\\mathrm dW_t
dXt=θ(μ−Xt)dt+σdWt
OU过程的解析解为
X
t
=
X
0
e
−
θ
t
+
μ
(
1
−
e
−
θ
t
)
+
σ
∫
0
t
e
−
θ
(
t
−
s
)
d
W
s
X_t=X_0e^{-\\theta t}+\\mu(1-e^{-\\theta t})+\\sigma\\int^t_0e^{-\\theta(t-s)}\\mathrm dW_s
Xt=X0e−θt+μ(1−e−θt)+σ∫0te−θ(t−s)dWs
易得
lim
t
→
∞
E
(
X
t
)
=
μ
\\lim_{t\\to\\infty}E(X_t)=\\mu
limt→∞E(Xt)=μ,这就是长期均值的来源。
数值求解
基于Julia的StochasticDiffEq,其数值求解结果为

代码如下
using StochasticDiffEq, GLMakie, Random
θ = 2.0
μ = 1.0
σ = 0.5
X0 = 0.0
tspan = (0.0, 5.0)
dt = 1/2^10
# ===== SDE 定义 =====
f(u, p, t) = θ * (μ – u)
g(u, p, t) = σ
prob = SDEProblem(f, g, X0, tspan)
Random.seed!(42)
sol = solve(prob, EM(), dt=dt, save_noise=true)
上述代码中,指定随机数种子的目的,是确保可复现。而求解SDE的关键步骤,只有两行代码,其中
- 【SDE.SDEProblem】用于构建SDE问题,其输入为漂移项函数、扩散项函数、初始值以及数值坐标范围
- 【SDE.solve】用于求解SDE问题,其输入分别是SDE问题、求解方法以及数值坐标间隔
- 【SDE.EM()】是Euler-Maruyama 方法,相当于在常微分方程的Euler方法上,新增了对随机过程的采样。
解析对比与绘图
解析解对比与绘图代码如下
t = sol.t
W = [sol.W(τ)[1] for τ in t]
m_t = X0 .* exp.(-θ .* t) .+ μ .* (1 .- exp.(-θ .* t))
fig = Figure(size=(800, 400))
ax = Axis(fig[1,1], xlabel="t", ylabel="X(t)", title="OU Process: Path vs Mean")
lines!(ax, t, sol.u, label="Numerical Path", color=:steelblue, alpha=0.7)
lines!(ax, t, m_t, label="Theoretical Mean 𝔼[Xₜ]", color=:red, linewidth=2, linestyle=:dash)
hlines!(ax, [μ], label="Long-term Mean μ", color=:gray, linestyle=:dot)
axislegend(ax, position=:rb)
fig