布朗运动模拟
文章目录
- 布朗运动模拟
- @[toc]
- 1 布朗运动定义
- 2 布朗运动模拟
- 3 布朗桥
- 4 带漂移布朗运动
- 5 几何布朗运动
文章目录
- 布朗运动模拟
- @[toc]
- 1 布朗运动定义
- 2 布朗运动模拟
- 3 布朗桥
- 4 带漂移布朗运动
- 5 几何布朗运动
1 布朗运动定义
给定随机过程 { W ( t ) , t ≥ 0 } \{W(t),t \ge 0 \} {W(t),t≥0},满足以下条件,则称 W ( t ) W(t) W(t)为标准布朗运动,简称布朗运动(Brownian motion)。
- W ( t ) W(t) W(t)连续, W ( 0 ) = 0 W(0)=0 W(0)=0
- W ( t ) ∼ N ( 0 , t ) W(t)\sim \mathscr{N}(0,t) W(t)∼N(0,t)
- W ( s + t ) − W ( s ) ∼ N ( 0 , t ) W(s+t)-W(s)\sim \mathscr{N}(0,t) W(s+t)−W(s)∼N(0,t);
- W ( t ) W(t) W(t)是独立增量过程。
2 布朗运动模拟
考虑时间段
[
0
,
t
]
[0,t]
[0,t],将时间段划分为等距
n
n
n个子段,同时产生
n
n
n个变量
W
(
t
i
)
,
i
=
1
,
2
…
n
W(t_i),i=1,2\dots n
W(ti),i=1,2…n,且
W
(
0
)
=
0
W(0)=0
W(0)=0。由于
W
(
t
i
)
=
W
(
t
i
−
1
)
+
X
i
W(t_i) = W(t_{i-1})+X_i
W(ti)=W(ti−1)+Xi
其中
X
i
∼
N
(
0
,
t
/
n
)
X_i\sim \mathscr{N}(0,t/n)
Xi∼N(0,t/n).
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('bmh')
# 1布朗运动
n = 1000
t = 100
P = list(np.random.normal(0, t / n, n))
W = [0]
num = 1
while num <= n:
W.append(W[num - 1] + P[num - 1])
plt.plot(W, c="red", linewidth=1)
plt.pause(0.01)
num += 1
3 布朗桥
W
(
t
)
W(t)
W(t)是布朗运动,
X
(
t
)
=
W
(
t
)
−
t
T
W
(
T
)
,
t
∈
[
0
,
T
]
X(t) = W(t)-\dfrac{t}{T}W(T),t\in[0,T]
X(t)=W(t)−TtW(T),t∈[0,T]
称
X
(
t
)
X(t)
X(t)为布朗桥。其中
X
(
0
)
=
X
(
T
)
=
0
X(0)=X(T)=0
X(0)=X(T)=0。这里初始点与终点均为0,也记作
X
0
→
0
(
t
)
X^{0\rightarrow 0}(t)
X0→0(t)
# 2布朗桥0-0
n = 1000
t = 10
step = t / n
W = np.random.normal(0, t / n, n)
W = list(np.cumsum(W))
W.insert(0, 0)
time = [value for value in np.arange(0, t + step, step)]
X = []
for i in range(0, n + 1):
X.append(W[i] - W[-1] * step * i / t)
plt.subplots()
plt.plot(time, X, c="red", linewidth=1)
plt.plot([0, t], [0, 0], c="blue", linewidth=2)
此外,布朗桥也可以定义为
X
(
0
)
=
a
X(0)=a
X(0)=a和
X
(
T
)
=
b
X(T)=b
X(T)=b,定义
a
→
b
a\rightarrow b
a→b上的布朗桥为
X
a
→
b
(
t
)
=
a
+
(
b
−
a
)
t
T
+
X
(
t
)
X^{a\rightarrow b}(t) = a+(b-a)\dfrac{t}{T}+X(t)
Xa→b(t)=a+(b−a)Tt+X(t)
Xab = []
a, b = 2, 5
for i in range(0, n + 1):
Xab.append(a + (b - a) * step * i / t + X[i])
plt.subplots()
plt.plot(time, Xab, c="red", linewidth=1)
plt.plot([0, t], [a, b], c="blue", linewidth=1, linestyle=':')
4 带漂移布朗运动
假设
W
(
t
)
W(t)
W(t)为布朗运动,则下列随机过程为布朗运动
X
(
t
)
=
μ
t
+
σ
W
(
t
)
X(t) = \mu t+\sigma W(t)
X(t)=μt+σW(t)
其中
μ
\mu
μ是漂移系数,
σ
\sigma
σ表示波动率。
mu, sigma = 0.2, 1
X_shift = []
for i in range(0, n + 1):
X_shift.append(mu * step * i + sigma * W[i])
plt.subplots()
plt.plot(time, X_shift, c="red", linewidth=1)
plt.plot([0, t], [0, mu * t], c="blue", linewidth=1, linestyle=':')
5 几何布朗运动
假设
X
(
t
)
X(t)
X(t)为带漂移的布朗运动,漂移系数为
μ
\mu
μ,波动率为
σ
\sigma
σ,即
X
(
t
)
=
μ
t
+
σ
W
(
t
)
X(t) = \mu t+\sigma W(t)
X(t)=μt+σW(t),定义
G
(
t
)
=
G
(
0
)
e
x
p
[
X
(
t
)
]
,
G
(
0
)
>
0
G(t) = G(0)exp[X(t)],G(0)>0
G(t)=G(0)exp[X(t)],G(0)>0
G0 = 2
G = []
for i in range(0, n + 1):
G.append(G0 * np.exp(X_shift[i]))
plt.subplots()
plt.plot(time, G, c="red", linewidth=1)