用python生成OU过程随机样本轨道并画出95%置信区间
时间: 2024-03-05 20:51:06 浏览: 137
Python求解正态分布置信区间教程
好的,我可以帮你解决这个问题。首先,我们需要导入一些必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后,我们可以定义一个函数来生成OU过程的样本轨迹:
```python
def generate_ou_process(theta, mu, sigma, x0, dt, T):
# 计算OU过程的参数
mean = mu + (x0 - mu) * np.exp(-theta * np.arange(0, T, dt))
var = sigma ** 2 / (2 * theta) * (1 - np.exp(-2 * theta * np.arange(0, T, dt)))
# 生成OU过程的样本轨迹
x = np.zeros(int(T/dt) + 1)
x[0] = x0
for i in range(1, len(x)):
x[i] = x[i-1] + theta * (mu - x[i-1]) * dt + sigma * np.sqrt(dt) * np.random.normal()
# 返回样本轨迹和相应的均值和方差
return x, mean, var
```
其中,`theta`、`mu`、`sigma`分别为OU过程的参数,`x0`为初始值,`dt`为时间步长,`T`为总模拟时间。函数返回样本轨迹、相应的均值和方差。
接着,我们可以使用上面的函数来生成样本轨迹,并计算95%置信区间:
```python
# 设置OU过程的参数
theta = 0.1
mu = 0.5
sigma = 0.2
x0 = 0.3
dt = 0.01
T = 10
# 生成OU过程的样本轨迹和均值方差
x, mean, var = generate_ou_process(theta, mu, sigma, x0, dt, T)
# 计算95%置信区间
lower_bound = mean - 1.96 * np.sqrt(var)
upper_bound = mean + 1.96 * np.sqrt(var)
# 绘制OU过程的样本轨迹和置信区间
plt.plot(np.arange(0, T+dt, dt), x, label='Sample path')
plt.plot(np.arange(0, T+dt, dt), mean, label='Mean')
plt.fill_between(np.arange(0, T+dt, dt), lower_bound, upper_bound, alpha=0.2, label='95% Confidence interval')
plt.legend()
plt.show()
```
运行上述代码,即可得到OU过程的样本轨迹和95%置信区间的图像。
阅读全文