在matlab中,很容易生成具有均值和标准差的正态分布随机向量。 从帮助兰德:
从均值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;
但是我不知道他们在这里做什么。
您不了解哪一部分? mu是均值向量(在您的情况下为0,请不要使用),Sigma是协方差矩阵,它们将生成100对随机数。
我不了解repmat部分。 也可以这样做:chol(C,lower)+ randn(N,1); 与C的协方差矩阵
抱歉,我现在知道了。 repmat用于为100对随机数建立均值矩阵。
您可以从统计信息工具箱中使用MVNRND函数,请参见以下相关问题:stackoverflow.com/questions/4041866/gaussian-basis-function
@Donnie或Amro:您应该发布答案,以便Derk可以接受,这个问题将被存档,任何人都可以咨询:)
这有点是数学问题,不是编程问题。但是,我非常喜欢编写既需要扎实的数学知识又需要编程知识的出色代码,因此我将其编写为后代。
您需要进行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
您可以使用以下内置的matlab函数来完成工作
mvnrnd(mu,SIGMA)