【问题标题】:generation of normally distributed random vector with covariance matrix用协方差矩阵生成正态分布随机向量
【发布时间】:2011-05-21 01:37:05
【问题描述】:

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

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

【问题讨论】:

  • 你不明白哪一部分? 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 可以接受它,这个问题将被存档以供任何人查阅 :)

标签: matlab normal-distribution


【解决方案1】:

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

您需要采用 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

【讨论】:

    【解决方案2】:

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

    mvnrnd(mu,SIGMA)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      相关资源
      最近更新 更多