- 积分
- 0
- 注册时间
- 2008-3-8
- 仿真币
-
- 最后登录
- 1970-1-1
|
纯粹是小程序,顺带熟悉几个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
查看全部评分
-
|