如何在MATLAB中生成一组在规定范围符合指定分布的随机数

 我来答
dukinkin
2017-02-27 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:889万
展开全部

首先要确定需要的是什么分布的随机数,也就是要知道随机数要符合的概率密度分布函数f(x)的定义,然后求其积分函数F(x),然后求F(x)的反函数

得到反函数的定义之后,利用函数rand产生一系列(0,1)之间的随机数代入反函数中计算得到的结果数列就符合原来f(x)的分布。

这种方法适用于,能够容易得到概率密度分布函数的积分函数的反函数的解析表达式的情况。

下面以指数分布为例给出代码和验证图像

指数分布的概率密度函数形式为


f(x)=   λexp(-λx)  (x>0)

0               (x<=0)

其中λ > 0是分布的一个参数


指数分布的累积分布函数

F(x)= 1-exp(-λx)  (x>0)

=0                  (x<=0)


指数分布的累积分布函数的反函数是

G(y)= -log(1-y)/λ   (0<y<1)


使用直接抽取的方法 先产生 [0,1]间的随机数列

利用累积分布函数的反函数,得到的结果就是符合指数分布的序列

N=10000; %产生随机数的个数
lambda=3; %参数λ
y=rand(1,N);  %生成N个0,1间均匀分布随机数
x=-log(1-y)/lambda; %生成指数分布随机数
 
[n,xout]=hist(x,30);    %分区间统计随机数出现概率
nn=n/N/mean(diff(xout));
bar(xout,nn,1);hold on;  %画图验证随机数是否符合概率密度函数
plot([0 xout],lambda*exp(-lambda*([0 xout])),'r');hold off;
xlabel('x');
ylabel('p(x)');

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式