在Matlab中根据正态分布生成随机数

cur*_*rt 4 integration matlab normal-distribution

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

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

f= @(y) (1/(1*2.50663))*exp(-((y).^2)/(2*1^2))
Run Code Online (Sandbox Code Playgroud)

和解决

r=integral(f,-Inf,z)
Run Code Online (Sandbox Code Playgroud)

然后从z值外推到X方程式的最终答案

z=(X-mew)/sigma
Run Code Online (Sandbox Code Playgroud)

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

Sue*_*ver 5

您可以使用内置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
Run Code Online (Sandbox Code Playgroud)

如果您只想从分布中获得一个数字,则可以使用无输入版本的randn来生成标量

value = (randn * sigma) + mu;
Run Code Online (Sandbox Code Playgroud)