matlab求已知概率密度函数的随机数⽣成
N=10000; %需要随机数的个数
matlab生成随机数a=zeros(N,1); %存放随机数的数列
n=0;
f1=@(t) 1./(1.2*pi*(1+5*(t-7.3).^2));
f2=@(t) 1./(1.05*pi*(1+6*(t-8.2).^2));
tt=linspace(0,24,1000);
ff=f1(tt).*(tt<=7.5)+f2(tt).*(tt>7.5);%根据公式计算概率密度
s=trapz(tt,ff); %计算整个区间概率密度的积分
ff=ff/s; %归⼀化概率密度
while n<N
t=rand(1)*24;%⽣成[0,24]均匀分布随机数
if t<=7.5
f=f1(t)/s;
else
f=f2(t)/s;
end %计算对应密度函数值f(t)
r=rand(1); %⽣成[0,1]均匀分布随机数
if r<=f %如果随机数r⼩于f(t),接纳该t并加⼊序列a中
n=n+1;
a(n)=t;
end
end
%以上为⽣成随机数列a的过程,以下为统计检验随机数列是否符合分布
num=100; %分100个区间统计
[x,c]=hist(a,num); %统计不同区间出现的个数
dc=24/num; %区间⼤⼩
x=x/N/dc; %根据统计结果计算概率密度
bar(c,x,1); hold on; %根据统计结果画概率密度直⽅图
plot(tt,ff,'r'); hold off; %根据公式画概率密度曲线
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论