如何生成正态分布的随机数

时间:2014-09-12 02:36:40

标签: matlab random gaussian normal-distribution

有人可以解释或指向一个页面,解释如何使用误差函数,误差函数的反函数和rand()(0和1之间的均匀随机数生成器)在matlab中创建正态分布的随机数?随机数不必限定到某个间隔。我有问题理解错误函数的概念及其反函数,以及它与创建通常分布的随机数有什么关系

2 个答案:

答案 0 :(得分:2)

您需要应用名为inverse transform sampling的方法,该方法包括以下内容。假设您要生成具有给定分布函数 F 的随机变量。如果你可以计算反函数 F -1 ,那么你可以通过应用 F -1来获得所需的随机变量在区间[0,1]上均匀分布的随机样本。

错误函数(Matlab中的erf几乎给出了正态随机变量的分布函数。其反函数在Matlab中称为erfinv。使用rand生成均匀分布的随机数。

使用这些成分,您应该能够完成任务。请试一试,然后看到将鼠标悬停在矩形上的代码:

  

N = 1e6; % number of samples
 x = erfinv(2*rand(1,N)-1); % note factor 2, because of definition of erf
 hist(x,31) % plot histogram to check it is (approximately) normal

答案 1 :(得分:0)

Mathworks的这个link似乎给出了答案。

以下是链接中的示例:

% First, initialize the random number generator to make the results in this
% example repeatable.
rng(0,'twister');

% Create a vector of 1000 random values drawn from a normal distribution
% with a mean of 500 and a standard deviation of 5.
a = 5;
b = 500;
y = a.*randn(1000,1) + b;

% Calculate the sample mean, standard deviation, and variance.
stats = [mean(y) std(y) var(y)]

% stats =
% 
%   499.8368    4.9948   24.9483
%
% The mean and variance are not 500 and 25 exactly because they are
% calculated from a sampling of the distribution.