matlab mvnrnd在gsl中

时间:2012-05-01 23:48:00

标签: c++ c matlab gsl

嗨我不确定我的算法是否正确我试图复制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

1 个答案:

答案 0 :(得分:2)

是的,这是正确的。参见例如具有此部分的this Wikipedia entry on multivariate normal RNGs

  

从分布中绘制值

     

一种广泛使用的从中绘制随机向量x的方法   具有平均向量μ和β的N维多元正态分布   协方差矩阵Σ的工作原理如下:

     
      
  1. 找到任何真正的矩阵A.   A =Σ。当Σ为正定时,Cholesky分解为   通常使用。 [...]

  2.   
  3. 设z =(z1,...,zN)T是其分量为N的向量   独立标准正态变量(可以生成,用于   例如,使用Box-Muller变换)。

  4.   
  5. 设x为μ+ Az。这有   由于仿射变换属性所需的分布。

  6.   

描述了相同的算法。

R还有几种实现,例如MASS包中的mvrnorm,每次安装都会附带。