布朗运动模拟

布朗运动模拟

1 布朗运动定义

给定随机过程 { W ( t ) , t ≥ 0 } \{W(t),t \ge 0 \} {W(t),t0},满足以下条件,则称 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,2n,且 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(ti1)+Xi
其中 X i ∼ N ( 0 , t / n ) X_i\sim \mathscr{N}(0,t/n) XiN(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) X00(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 ab上的布朗桥为
X a → b ( t ) = a + ( b − a ) t T + X ( t ) X^{a\rightarrow b}(t) = a+(b-a)\dfrac{t}{T}+X(t) Xab(t)=a+(ba)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)

在这里插入图片描述


-END-
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值