在matlab中基于正态分布生成随机数
Generating a random number based off normal distribution in 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 是积分的极限。有没有办法做到这一点,或者有更好的方法来随机生成这个数字?
您可以使用内置的 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,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)
我正在尝试根据我拥有的正态分布特征(均值和标准差)生成一个随机数。我没有统计和机器学习工具箱。
我知道一种方法是随机生成一个从 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 是积分的极限。有没有办法做到这一点,或者有更好的方法来随机生成这个数字?
您可以使用内置的 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,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)