首先要确定需要的是什么分布的随机数,也就是要知道随机数要符合的概率密度分布函数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 使用直接抽取的方法 先产生 [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)');