Matlab 利用协方差矩阵生成正态分布随机向量

Matlab 利用协方差矩阵生成正态分布随机向量,matlab,normal-distribution,Matlab,Normal Distribution,在matlab中,很容易生成具有均值和标准偏差的正态分布随机向量。从帮助randn: 从平均值为1和标准值的正态分布生成值 偏差2。 r=1+2.*randn(100,1) 现在我有一个协方差矩阵C,我想生成N(0,C) 但我怎么能做到这一点呢 从randn帮助中: 从具有指定平均值的二元正态分布生成值 向量和协方差矩阵。 mu=[12]; 西格玛=[1.5;.52];R=chol(σ); z=repmat(mu,100,1)+randn(100,2)*R 但是我不知道他们到底在做什么。您可以使

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

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

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

但我怎么能做到这一点呢

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


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

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

mvnrnd(mu,SIGMA)

这是一个数学问题,而不是编程问题。但我非常喜欢编写既需要扎实的数学知识又需要编程知识的优秀代码,所以我将为子孙后代撰写这篇文章

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

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


有关更多信息,请参阅:

您不了解哪部分
mu
是平均向量(在你的例子中是0,所以不要使用它),
Sigma
是协方差矩阵,它们生成100对随机数。我不理解repmat部分。也可以这样做:chol(C,'较低')+randn(N,1);对于协方差矩阵,我想我现在明白了。repmat用于为100对随机数构建均值矩阵。您可以使用统计工具箱中的MVNRND函数,请参阅此相关问题:@Donnie或Amro:您应该发布一个答案,以便Derk可以接受,此问题将存档供任何人查阅:)