2012-05-24 66 views
1

爲這個愚蠢的問題道歉,數學不是我的強項。我試圖在matlab中設計一個函數,根據d維中的正態分佈N(mu,sigma)生成樣本。這是我的代碼到目前爲止,matlab中的正態分佈函數

mu = [1 2]; 
Sigma = [1 .5; .5 2]; R = chol(Sigma); 
z = repmat(mu,100,1) + randn(100,2)*R; 

我發現這個從通過各種維基百科和谷歌的文章讀,不知道是否是正確的?在此先感謝,

生鏽

回答

2

簡短的回答 - 是的。

稍微長一點的答案 - 爲什麼不自己嘗試?

>> z = repmat(mu,1000000,1) + randn(1000000,2)*R; 
>> mean(z) 
ans = 
     1.001  2.0005 
>> cov(z) 
ans = 
     0.99937  0.49942 
     0.49942  2.0017 
+0

謝謝!另外,我還有一個類似的問題,使用randn()像我上面或mvnrnd(MU,SIGMA)生成正常樣本,mvnrnd用於大​​於2的維度有什麼區別? – rusty009

+0

'randn'不是準確的多變量,它只是在每個維度上獨立生成正常數字。你不能強制協變。 'mvnrnd'用於從適當的多變量正態分佈生成樣本。 – Ansari

+0

正如Ansari指出的那樣,randn既是多變量又是單變量,儘管如果你有一個身份協方差矩陣,那麼維數是獨立的。像你一樣使用randn是一個完全有效的方法來生成具有給定協方差矩陣和平均值的樣本,但mvnrnd爲您提供了任何參數集的一般情況。您發現的方法完全適用於更多維數。 – 2012-05-24 18:09:18