生日悖论MATLAB仿真
终于熬过了这学期!不知不觉大学的3/8已经过去了。回顾以下本学期让我印象最深刻,也最有成就感的事情是写出了我人生中第一个MATLAB程序!由于先前零基础,所以从idea到code实现的整个过程是非常坎坷的QAQ那么话不多说,我们进入正题~
首先,什么是生日悖论(又名生日攻击)详情请戳度娘~生日悖论
接下来上程序:
for i=1:100; %循环100次
A=unidrnd(365,30,1); %产生30行1列矩阵,每个元素在1~365间随机取值
B=tabulate(A); %统计矩阵内每个数出现的次数以及所占比例
C=B(:,2); %取B矩阵第二列元素
[x,y]=find(C==1); %找到出现一次的数的横坐标x,纵坐标y(y=1)
[row,col]=find(C==2); %找到出现两次的数的横坐标row,纵坐标col(col=1)
plot(y+i-1,x,'kx'); %将坐标为(i,x)的点标记为“黑叉”
hold on; %保留当前绘图
plot(col+i-1,row,'rx'); %将坐标为(i,row)的点标记为“红叉”
hold on; %保留当前绘图
xlabel('times'); %横坐标写times
ylabel('date'); %纵坐标写date
title('Birthday paradox scatter diagram(30 students)'); %图片命名
axis([0,100,0,365]); %横坐标0~100,纵坐标0~365
hold on; %保留当前绘图
end; %结束循环%同时改变代码第二行和倒数第四行“30”位置处的值,以得到模拟不同学生人数时的结果。
仿真图展示:
是不是能够直观的感受到出现红叉叉的试验次数变多了。事实上,对于 60 人的大班,出现至少两人生日相同的概率就已经要大于 99%了。
此篇博文也记录一下我的心得体会:那就是第一次接触某个领域时不要犯怵!!!勇敢突破自己的舒适圈,我的具体实践就是脑子里先有idea然后拆分成步骤一点点百度要怎么用matlab实现。野路子难走但总是能走通的!刚开始入门的道路都是比较坎坷的,熟悉了操作之后就越来越顺利了,所以同学们要对自己有信心!!!
以上