baggio1987 发表于 2010-11-10 23:20:19

【原创】matlab模拟N个人生日相同的概率

纯粹是小程序,顺带熟悉几个matlab的函数。让各位见笑了。

背景:已知某次舞会有30人参加,请问这30人中存在生日相同(仅指月份,不考虑年份)的概率有多大。

matlab模拟程序:用随机数模拟出birthday数组,数组中若存在相同元素,则表示这30人存在生日相同的情况。

count=0;          %总共进行1000次试验, count用来计数存在生日相同情况的数目。                           
for i=1:1000
        birthday=round(365*rand(1,30));
        if length(unique(birthday))<30         %用unique函数来判断是否存在相同元素
                count=count+1;
        end
end

理论解:根据概率论的知识,这30人存在生日相同的情况的概率=1-(365!/(365-30)!)/(365^30)=0.7左右

如果直接用 factorial(365)/(factorial(335)*365^30),由于计算中牵扯的数字太大,在matlab中算不出来。其实
(365!/(365-30)!)/(365^30)=(365/365)*(364/365)*(363/365)*....*(336/365)
等式右边可以用matlab计算
p=1;
for i=1:29
        p=p*(365-i)/365;
end
p=1-p;

上述计算结果可看出,p=0.7左右,跟试验模拟的结果很接近。
页: [1]
查看完整版本: 【原创】matlab模拟N个人生日相同的概率