2012-05-01 55 views
0

嗨,我不知道如果我的算法是正確的我試圖複製matlab的mvnrnd函數,但在gsl。我在一些期刊文章中發現了一個生成多元正態向量的算法,但是我需要一個多元正態隨機數的矩陣matlab mvnrnd in gsl

可以說分佈是Z〜(mu,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 

我下面

方法是belowcorrect產品以下更改隨機變量的矩陣

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 

回答

2

是的,那是正確的。見例如this Wikipedia entry on multivariate normal RNGs具有這種部分:從分發

繪圖值

用於從與平均向量μ和 協方差矩陣Σ作品 N維多元正態分佈繪製隨機向量x的廣泛使用的方法如下所示:

  1. 找到任何實數矩陣A,例如 A AT =Σ。當Σ是正定的時,Cholesky分解通常使用 。 [...]

  2. 設z =(Z1,...,Zn)的T爲一矢量,其分量是N 獨立標準正常變元(其可被產生, 例如,通過使用箱穆勒變換)。

  3. 令x爲μ+ Az。由於仿射變換屬性,這有 期望的分佈。

它描述了相同的算法。

R也有幾種實現方式,例如MASS包中的mvrnorm,它隨R安裝一起提供。

+0

謝謝!沒想到我會像你這樣有名的人回答我的問題 – pyCthon