2016-12-02 185 views
4

我想根据我拥有的正态分布特征(均值和标准差)生成一个随机数。我没有统计和机器学习工具箱。在matlab中生成一个基于正态分布的随机数

我知道一种方法是从0到1随机生成一个随机数r,并找到给出该随机数的概率的值。我可以通过输入标准正常功能

f= @(y) (1/(1*2.50663))*exp(-((y).^2)/(2*1^2)) 

并求解

r=integral(f,-Inf,z) 

,然后从z值外推至最后的答案X与方程

z=(X-mew)/sigma 

做到这一点但据我所知,没有matlab命令允许你求解x,其中x是积分的极限。有没有办法做到这一点,或者有更好的方法来随机产生这个数字?

回答

4

您可以使用内置的randn函数产生的随机数从具有零均值和为1的标准偏差的标准正态分布拉来改变这个分配,你可以通过你的期望的标准倍增的randn输出偏差,然后添加你想要的平均值。

% Define the distribution that you'd like to get 
mu = 2.5; 
sigma = 2.0; 

% You can any size matrix of values 
sz = [10000 1]; 

value = (randn(sz) * sigma) + mu; 

% mean(value) 
%  2.4696 
% 
% std(value) 
%  1.9939 

如果你只是想从分布的单号,就可以使用randn无输入版本,以产生一个标

value = (randn * sigma) + mu; 
+0

哇,完美。谢谢! – curt

3

只是为了好玩,你可以生成使用均匀随机发生器高斯随机变量:

  • 的均匀随机变量对(0,1)对数具有指数分布
  • 该平方根具有瑞利分布
  • 乘以(0,2 * pi)上的均匀随机变量的余弦(或正弦)并且结果为高斯。您需要乘以sqrt(2)才能正常化。

将得到的高斯变量归一化(零均值,单位标准偏差)。如果您需要特定的平均值和标准偏差,请乘以后者,然后添加前者。

实施例(归一化高斯分布):

m = 1; n = 1e5; % desired output size 
x = sqrt(-2*log(rand(m,n))).*cos(2*pi*rand(m,n)); 

检查:

>> mean(x) 
ans = 
    -0.001194631660594 
>> std(x) 
ans = 
    0.999770464360453 
>> histogram(x,41) 

enter image description here

相关问题