嗨我不确定我的算法是否正确我试图复制matlab的mvnrnd函数但是在gsl中。我在一些期刊文章中找到了一个生成多元法线向量的算法,但我需要一个多元正态随机数矩阵
让我们说分布是Z~(mu,sigma);
假设sigma是一个已经肯定的矩阵。
我在网上发现的算法是
1. cholskey(sigma) = A
2. generate uniform gaussian vector r
3. matrix vector triangular product with gsl_blas_dtrmv A * r
4. add mu to Ar and that will be a vector of multivariate normal random numbers
我的方法
以下更改是否正确产生随机变量矩阵
1. cholskey(sigma) = A
2. generate uniform gaussian matrix R
3. matrix matrix scalar product AR
4. add mu to AR and that will be a matrix of multivariate normal random numbers
答案 0 :(得分:2)
是的,这是正确的。参见例如具有此部分的this Wikipedia entry on multivariate normal RNGs:
从分布中绘制值
一种广泛使用的从中绘制随机向量x的方法 具有平均向量μ和β的N维多元正态分布 协方差矩阵Σ的工作原理如下:
找到任何真正的矩阵A. A =Σ。当Σ为正定时,Cholesky分解为 通常使用。 [...]
设z =(z1,...,zN)T是其分量为N的向量 独立标准正态变量(可以生成,用于 例如,使用Box-Muller变换)。
- 醇>
设x为μ+ Az。这有 由于仿射变换属性所需的分布。
描述了相同的算法。