问题描述
我有三个 Vasicek 进程。
我通过 numpy 函数 random.multivariate_normal(MeanVect,CovMat) 模拟这些过程。
MeanVect 是系数矩阵的点积,即下对角线,以及这三个变量的值。
可以这样写。
令 Rho = 系数矩阵(3x3 numpy 数组) 让 F_0 = 变量值(1x3 numpy 数组)
MeanVect = np.dot(Rho,F_0)
协方差矩阵是单位矩阵。
我想模拟这三个因素的 n 个路径。 (因为这是一个精确的解决方案,我不需要小的时间步长,只需要三个变量的实现值的时间)。
目前我可以使用循环来完成此操作。
注意:time_step 内置于协方差矩阵中。
import numpy as np
def F__t(F_0):
MeanVect = np.dot(Rho,F_0)
CovMat = np.identity(3)
x,y,z = np.random.multivariate_normal(MeanVect,CovMat)
return [x,z]
F_t = [0,0]
n = 100
t = 10
for sim in range(n):
#Do some other stuff
for step in range(t):
F_t = F__t(F_t)
#Do some stuff
这里的代码必须经过每个模拟。我认为它可以在没有外循环的情况下完成,当涉及到 MeanVect 时,我被卡住了。
例如我可以做
np.random.multivariate_normal(np.dot(Rho,F_t),np.identity(3),(n,1))
要在时间步长 1 中获得三个变量的 n 个值。我不确定如何为时间步长 2 生成三个变量的 n 个值,此时 n 次绘制中的每一次的 MeanVect 都会不同。
>在单个变量的情况下,例如 Ornstein-Uhlenbeck 过程,可以通过代码对过程进行矢量化
import pandas as pd
import numpy as np
def OU_estimation(M=100000,N=25,T=25,sigma=.1,mu=1,lambda_est=1,S0=1):
dt = T/N # simulation time step
S = np.zeros((M,N+1))
S[:,0] = S0
for n in range(N):
#Partially vectorized
eps = np.random.normal(0,1,(M))
S[:,n+1] = S[:,n] + lambda_est*(mu - S[:,n])*dt + sigma*eps
df = pd.DataFrame(S)
return df
任何关于如何进步的建议将不胜感激,如果实际上可以消除这两个循环,那将是一个真正的奖励。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)