利用Cholesky分解对多维高斯随机变量进行采样,计算随机变量的功率谱。我从numpy.linalg.cholesky
得到的结果在高频下总是比从scipy.linalg.cholesky
得到的功率高。
这两个函数之间可能导致这种结果的区别是什么?哪个数值更稳定?
下面是我使用的代码:
n = 2000
m = 10000
c0 = np.exp(-.05*np.arange(n))
C = linalg.toeplitz(c0)
Xn = np.dot(np.random.randn(m,n),np.linalg.cholesky(C))
Xs = np.dot(np.random.randn(m,n),linalg.cholesky(C))
Xnf = np.fft.fft(Xn)
Xsf = np.fft.fft(Xs)
Xnp = np.mean(Xnf*Xnf.conj(),axis=0)
Xsp = np.mean(Xsf*Xsf.conj(),axis=0)
默认情况下,
scipy.linalg.cholesky
给出的是上三角分解,而np.linalg.cholesky
给出的是下三角分解。从scipy.linalg.cholesky
的文档中:例如:
如果我修改您的代码,使其同时使用相同的随机矩阵,并改用
linalg.cholesky(C,lower=True)
,那么我得到的答案如下:相关问题 更多 >
编程相关推荐