在matlab中,很容易生成具有均值和标准差的正态分布随机向量。来自帮助randn:
使用均值1和标准从正态分布生成值 偏差2。 r = 1 + 2. * randn(100,1);
现在我有一个协方差矩阵C,我想生成N(0,C)。
但我怎么能这样做?
来自randn帮助: 从具有指定均值的二元正态分布生成值 向量和协方差矩阵。 mu = [1 2]; 西格玛= [1.5; .5 2]; R = chol(Sigma); z = repmat(mu,100,1)+ randn(100,2)* R;
但我不知道他们到底在做什么。
答案 0 :(得分:4)
这有点是一个数学问题,而不是一个编程问题。但是我非常喜欢编写需要扎实数学和编程知识的优秀代码,所以我会为后代写这个。
您需要采用Cholesky分解(或矩阵的任何分解/平方根)来生成独立的随机变量。这是因为如果X
是具有均值m
和协方差D
的多变量法线,则Y = AX
是具有均值Am
和协方差矩阵{{ADA'
的多变量法线。 1}}其中A'
是转置。如果D
是单位矩阵,则协方差矩阵只是AA'
,您希望它等于您尝试生成的协方差矩阵C
。
Cholesky分解计算了这样一个矩阵A
,并且是最有效的方法。
有关详细信息,请参阅:http://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf
答案 1 :(得分:3)
您可以使用以下内置matlab功能来完成工作
mvnrnd(mu,SIGMA)