matlab 求已知概率密度函数的随机数生成

 

N=10000; %需要随机数的个数
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; %根据公式画概率密度曲线

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrCharles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值