悬赏 5 个论坛币 已解决
我在网上找到了如何用matlab生成服从任意有限离散分布的随机数的方法,代码如下:
function out=drnd(p,n)
%out=drnd(p,n)
%copyright:rocwoods
%p is the probability distribution matrix;
%n is the number of the samples you want to generate;
%=================
a=cumsum(p(2,: ));
b=rand(n,1);
out=zeros(1,n);
for k=1:n
c=find(a<b(k));
if (isempty(c))
out(k)=p(1,1);
else
out(k)=p(1,c(end)+1);
end
end
举例说明:
比方说一个随机变量可以取1 2 3 4 5这5个值。每个值的概率分别为0.1 0.3 0.25 0.25 0.1
则P=[1 2 3 4 5;0.1 0.3 0.25 0.25 0.1]
生成1000个样本,如下:
out=drnd(P,1000)
%结果省略
当然在R中可以直接调用sample函数得到结果,但我尝试着编写Rcode编写相同的程序(因为个人觉得R和matlab有很多相似之处),
比如说X的分布律满足x=(x1,x2,.....,xk),相应概率为p=(p1,p2,....,pk),要生成n个满足所给分布律的随机数z,则先要生成n个(0,1)随机数,记为r,
当0<r[i]<=p1时,z[i]=x1; 当p1<r[i]<=p1+p2时,z[i]=x2;........ 当pk<r[i]<=1时,z[i]=xk; 我编写了R程序,但是结果老是出错。
本人刚接触软件不久,希望高手赐教,悬赏不多,还请包涵。