4

在 matlab 中,很容易生成具有均值和标准差的正态分布随机向量。来自帮助 randn:

从平均值为 1 和标准差为 2 的正态分布生成值。r = 1 + 2.*randn(100,1);

现在我有一个协方差矩阵 C,我想生成 N(0,C)。

但我怎么能这样做呢?

来自 randn 帮助:从具有指定平均向量和协方差矩阵的二元正态分布生成值。亩=[1 2];西格玛 = [1 .5; .5 2];R = 科尔(西格玛);z = repmat(mu,100,1) + randn(100,2)*R;

但我不知道他们在这里做什么。

4

2 回答 2

4

这在某种程度上是一个数学问题,而不是一个编程问题。但我非常喜欢编写需要扎实的数学和编程知识的优秀代码,所以我会为后代编写这个。

您需要采用 Cholesky 分解(或矩阵的任何分解/平方根)从独立变量生成相关随机变量。这是因为如果X是具有均值m和协方差的多元正态D,则Y = AX是具有均值Am和协方差矩阵的多元正态,ADA'其中A'是转置。如果D是单位矩阵,那么协方差矩阵就是您希望与您尝试生成AA'的协方差矩阵相等的矩阵。C

Cholesky 分解计算这样一个矩阵A,是最有效的方法。

欲了解更多信息,请参阅:http ://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf

于 2013-01-25T07:56:29.787 回答
3

您可以使用以下内置 matlab 函数来完成您的工作

mvnrnd(mu,SIGMA)
于 2011-03-27T21:46:19.460 回答