matlab mvnrnd in gsl


嗨,我

不确定我的算法是否正确,我正在尝试复制 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

是的,这是正确的。例如,请参阅维基百科关于多元正常RNG的条目,其中包含以下部分:

从分布中绘制值

一种广泛使用的方法,用于从 具有平均向量μ和 协方差矩阵 Σ 的工作原理如下:

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

  2. 设 z = (z1, ..., zN(T 是一个分量为 N 的向量 独立的标准正态变量(可以生成,用于 例如,通过使用 Box-Muller 变换(。

  3. 设 x 为 μ + Az。这有 由于仿射变换属性而产生的所需分布。

它描述了相同的算法。

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

最新更新