zoukankan      html  css  js  c++  java
  • 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; %根据公式画概率密度曲线

  • 相关阅读:
    20145总结
    2014515 总结
    2014514 总结
    20148总结
    20147总结
    20146总结
    20149总结
    2014512 总结
    2014513 总结
    【Visual Lisp】驱动器、目录、文件和注册表
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879776.html
Copyright © 2011-2022 走看看