繁体   English   中英

Matlab如何生成高斯分布随机数?

[英]How does matlab generate Gaussian distributed random numbers?

我需要在C中创建高斯分布随机数矩阵。我很好奇matlab是如何生成它的,因此我可以以此为先。

要生成普通随机数,C代码:

#include <stdlib.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

double drand()   /* uniform distribution, (0..1] */
{
  return (rand()+1.0)/(RAND_MAX+1.0);
}

double random_normal() 
 /* normal distribution, centered on 0, std dev 1 */
{
  return sqrt(-2*log(drand())) * cos(2*M_PI*drand());
}

如果我想创建一个均值为1和std为0.5的随机变量,

int main()
{

  int i;
  double rands[1000];
  for (i=0; i<1000; i++)
  rands[i] = 1.0 + 0.5*random_normal();
  return 0;

}

如果你正在努力学习,看看这个 最常见的实用方法是Box-MullerMarsaglia

然后看看这个

IMO,您应该使用适当的随机发生器,通常是Mersenne Twister ,您可以在此处找到实现方法。

最后,当然,如果您选择使用C ++,请使用C ++ 11 随机库

Matlab使用ziggurat算法的一种变体。 有关其他可使用的技术,请参见Wikipedia 其他答案中提到的Box-Muller方法相对易于理解和实施,但比之字形算法慢,并且还遭受与线性同余生成器的交互作用,这导致生成的值全部沿螺旋线下降

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM