2012-05-24 55 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