0

嗨,我不确定我的算法是否正确我正在尝试复制 matlab 的mvnrnd函数,但在 gsl 中。我在一些期刊文章中发现了一种算法,它产生了一个多元正态向量,但我需要一个多元正态随机数矩阵

假设分布是 Z~(mu,sigma);

假设 sigma 是一个已经是正定的矩阵。

我在网上找到的一个算法说

1. cholskey(sigma) = A
2. generate uniform gaussian vector r
3. matrix vector triangular product with gsl_blas_dtrmv A * r
4. add mu to Ar and that will be a vector of multivariate normal random numbers

我的方法如下

以下更改是否正确生成随机变量矩阵

    1. cholskey(sigma) = A
    2. generate uniform gaussian matrix R
    3. matrix matrix scalar product AR
    4. add mu to AR and that will be a matrix of multivariate normal random numbers
4

1 回答 1

2

对,那是正确的。参见例如这个 Wikipedia entry on multivariate normal RNGs,它有这个部分:

从分布中提取值

一种广泛使用的从 N 维多元正态分布中绘制随机向量 x 的方法,其中均值向量 μ 和协方差矩阵 Σ 工作如下:

  1. 找到任何实矩阵 A 使得 A AT = Σ。当 Σ 为正定时,通常使用 Cholesky 分解。[...]

  2. 令 z = (z1, ..., zN)T 是一个向量,其分量是 N 个独立的标准正态变量(例如,可以使用 Box–Muller 变换生成)。

  3. 令 x 为 μ + Az。由于仿射变换特性,这具有所需的分布。

它描述了相同的算法。

R也有几个实现,例如mvrnorm在每个 R 安装附带的MASS包中。

于 2012-05-02T00:24:24.377 回答