• MATLAB 概率论题


    1、

    用模拟仿真的方法求解

    clc
    clear
    tic
    n=0;
    N=100000;
    for ii=1:N
        b='MAXAM';  %字符串格式
        a=randperm(5);  %
        b=[b(a(1)),b(a(2))];%选择两个字符,组成新的字符串
        c=randperm(2);
        if (b(1)==b(c(1))) %通过坐标来确定字符串是否一致
           n=n+1;
        end
    end
    rate=n/N;
    time=toc
        
    

    运行时间0.3秒,概率约等于0.6

    注意,如果某一句忘了加分号,有数据一直输出的话,时间如下

    可以看出时间大大增加,所以跑大数据量程序时,避免不必要的输出。

    2、

    有100条龙,101条凤,102条凰,他们两两随机相碰,当同种动物相碰时不发生变化,当不同动物相碰时,自身消失,变成另外的一种动物,例如龙和凤相碰,变成凰。求最后剩下动物的概率。

    clc
    clear
    tic
    c=zeros(1,101);
    N=100000;
    for ii=1:N
        m=100;n=101;p=102;%三种动物初始数据
        while((m~=0)&&(p~=0))&&(n>=0)%条件的设置,正常应该设置为两两为0,第三个不为零,三种情况取或
                                      %但我们经过分析后知道奇数的凤会最终留下,所以简化了条件
            a=rand;
            b=m*n+n*p+m*p;
            if ((a>=0)&(a<(m*n/b)))%通过随机数模拟两两随机的概率比例
                m=m-1;
                n=n-1;
                p=p+1;%凰加1
            elseif ((a>=(m*n/b))&((a<(m*n+n*p)/b)))
                m=m+1;
                n=n-1;
                p=p-1;%龙加1
            elseif ((a>=((m*n+n*p)/b))&((a<(m*n+n*p+m*p)/b)))
                m=m-1;
                n=n+1;
                p=p-1;%凤加1
            end
        end
        c(n)=c(n)+1;%最后剩n个凤时的个数
    end
    time=toc
    hist(c)
    

     

    实验100000次剩余n只凤的个数。

    s=sum(c);
    pro=c./s;求出概率
    stem(1:20,pro(1:20),'o')画图
    xlabel('凤的个数/n')
    ylabel('概率')
    grid on

     

    3、 假设每个人的出生日期是随机的,求一个班上23个同学中至少有两个同学生日相同的概率。

    clc
    clear
    tic
    m=0; %记录相同的天数
    N=10000;%仿真的次数
    for n=1:N
        A=zeros(1,365);%生日的365天
        for jj=1:23
            ii=unidrnd(365);%选择生日的天数
            A(ii)=A(ii)+1;%该天数加1
        end
        B=(A>=2);%选出有相同的天数
        if mean(B)>0 
            m=m+1;%该天数计数
        end
    end
    rate=m/N
    time=toc 
    

    可以看出B为布尔类型,只要某一天有两个人以上,该位置就为1,用平均值得方法来判断有没有1的存在,判断方法很巧妙。

    该程序思路是将365天为主题,生日在天数上加1,巧妙的解决了选出23个数是否相同的比较,思路很新颖。

     

    4、将A和B传递出去,接收端收到A误作为B的概率为0.02,收到B误作为A的概率为0.01,编码端符号A和B出现的概率为2:1,(1)问正确接收的概率为多少(2)若收到符号为A,则发送端发送为A的概率为多少。

    clc
    clear
    tic
    n=0;
    n_aa=0;
    n_ba=0;
    m=0;
    N=10000;%实验次数
    for ii=1:N
        c=rand;%判断发送AorB
        if c>1/3 %发送A
            m=m+1;%发送A的次数
            d=rand;%判断接收到A或者B
            if d>0.02 %接收到A
                n_aa=n_aa+1;
                n=n+1;%正确接收A(B)个数(正确接收A)
            end
        else %发送B
            e=rand;%判断接收AorB
            if e>0.01
                n=n+1;%正确接收到B(A)的次数
            else
                n_ba=n_ba+1;%接收到A的次数(错误接收A)
            end
        end
    end
    p1=n/N %正确接收的概率
    p2=n_aa/(n_aa+n_ba)%发送A的概率
    time=toc
    

    将循环向量化,一次性生成n个数,然后将n分类

    clear
    tic
    N=10000;%循环次数,本质是将循环次数分类
    c=rand(1,N);
    m=length(find(c>1/3));%find 返回大于0.3数的位置,求出发送A的个数
    d=rand(1,m);%判断接收到AorB
    n_aa=length(find(d>0.02));%发A接收A的个数
    e=rand(1,N-m);%发送B的个数
    n_ba=length(find(e<=0.01));%发B接收A的个数
    n=n_aa+(N-m-n_ba);%接收正确的个数
    p1=n/N%接收正确的概率
    p2=n_aa/(n_aa+n_ba)%收A发A的概率
    time=toc
    

    对标两段运行时间,明显向量化后的程序时间更短,更优化。缺点是占用内存。编程时要综合考虑两者问题。

     5、一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?

    策略1:直接选第一层

    策略2:第一层不拿,从第二层开始,采取如下策略(1)如果第二层比第一层大,则选择第二层,否则在上一层,(2)如果第三层比前面两侧都大,则选择第三层,否则继续上一层。(3)循环,如果到第九层还没有取到要求的钻            石,则选择第十层钻石

     

    策略3,前两层不拿,从第三层开始上述的策略

    ……

     

    策略10:直接选择第十层

    clc
    clear
    tic
    N=10000; 
    for kk=0:9 %10种策略
        n=0;
        for ii=1:N %次数
            jj=kk; %策略
            a=randperm(10);%钻石大小
            b=a(1:jj);%jj=0时,产生一个空集
            m=max(b);
            while(m>a(jj+1))&(jj<9)%初始jj=0,m=[],小于a(jj+1),选择a(1);中间,m是前jj个的最大值,如果m<a(jj+1),则选择a(jj+1),否则,继续选择前jj加1个最大,循环;
    %(j<9)的条件是最后的结束条件,此时就是结束条件,选择第10个 jj=jj+1; b=a(1:jj); m=max(b); end if (a(jj+1)==10)|((jj==9)&(m<10))%前一个条件是中间选择了,比价是否是最大的;后面的条件是,前9个最大的值小于10,则选择的第十个一定是最大值。 n=n+1; %选择到最大数的个数 end end rate(kk+1)=n/N; fprintf('rate%d = %5.4f ',kk+1,rate) end time=toc

    plot(rate,'o-')
    xlabel('策略/n')
    ylabel('概率')
    grid on
    

    可以看到策略4可以取到最大的概率。

  • 相关阅读:
    AntDesign(React)学习-9 Dva model reducer实践
    AntDesign(React)学习-8 Menu使用 切换框架页内容页面
    AntDesign(React)学习-7 Menu添加事件
    AntDesign(React)学习-6 Menu展示数据
    AntDesign(React)学习-5 路由及使用Layout布局
    AntDesign(React)学习-4 登录页面提交数据简单实现
    AntDesign(React)学习-3 React基础
    AntDesign(React)学习-2 第一个页面
    AntDesign(React)学习-1 创建环境
    正则表达式分组捕获非捕获的示例理解
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/7780596.html
Copyright © 2020-2023  润新知