生成具有协方差矩阵的正态分布随机向量

时间:2010-12-06 15:47:25

标签: matlab normal-distribution

在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;

但我不知道他们到底在做什么。

2 个答案:

答案 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)