
用matlab写出这样的函数“给出n个人(n<365)至少有两个人在同一天的概率的计算机上机模拟程序”
3个回答
展开全部
这哪是什么模拟程序啊。。。
所谓模拟程序就是“计算机仿真”,就是要让计算机产生随机数作为生日,来模拟实际情况,进而统计概率。
上面两位根本就是用电脑在运算嘛,根本不是模拟啊。
看我的。
******************************************************
n = 50; %有50个人
TestTime = 1000; %总共模拟1000次,模拟次数越多,结论越准确
SamebirthdayTime = 0; %看模拟的1000次中,有几次是“有相同生日”的情况,初值先设为0
for loop = 1:TestTime %模拟开始
birthday = floor(rand(1,n)*365); %用计算机产生n个随机数,作为n个人的生日
birthday = sort(birthday); %将生日从小到大排序
for i=1:n-1
flag = birthday(i)-birthday(i+1); %看排序后相邻有没有相同的数
if flag == 0 %如果有,就说明此次模拟出现了“有相同生日”的情况
SamebirthdayTime = SamebirthdayTime + 1;
break
end
end
end
P = SamebirthdayTime/TestTime; %算出最终概率
***************************************************
楼主可以运行一下,n=50的时候,模拟出来应该是97%左右,与概率论计算结果是符合的。
所谓模拟程序就是“计算机仿真”,就是要让计算机产生随机数作为生日,来模拟实际情况,进而统计概率。
上面两位根本就是用电脑在运算嘛,根本不是模拟啊。
看我的。
******************************************************
n = 50; %有50个人
TestTime = 1000; %总共模拟1000次,模拟次数越多,结论越准确
SamebirthdayTime = 0; %看模拟的1000次中,有几次是“有相同生日”的情况,初值先设为0
for loop = 1:TestTime %模拟开始
birthday = floor(rand(1,n)*365); %用计算机产生n个随机数,作为n个人的生日
birthday = sort(birthday); %将生日从小到大排序
for i=1:n-1
flag = birthday(i)-birthday(i+1); %看排序后相邻有没有相同的数
if flag == 0 %如果有,就说明此次模拟出现了“有相同生日”的情况
SamebirthdayTime = SamebirthdayTime + 1;
break
end
end
end
P = SamebirthdayTime/TestTime; %算出最终概率
***************************************************
楼主可以运行一下,n=50的时候,模拟出来应该是97%左右,与概率论计算结果是符合的。
展开全部
function p=property(n)
a=1;
for i=0:n-1
a=a*(365-i)/365;
end
p=1-a;
输入n,p为所求概率。
注意:n增大时,a减小,当a减小到一定值时,由于matlab的精度问题,p=1-a会取恒值1。
a=1;
for i=0:n-1
a=a*(365-i)/365;
end
p=1-a;
输入n,p为所求概率。
注意:n增大时,a减小,当a减小到一定值时,由于matlab的精度问题,p=1-a会取恒值1。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
>>n=365;
m=2:n;
temp=1;
for i=1:length(m)
temp=temp*(n-i)/n;
p(i)=1-temp;
end
plot(m,p)
m=2:n;
temp=1;
for i=1:length(m)
temp=temp*(n-i)/n;
p(i)=1-temp;
end
plot(m,p)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |