Matlab高尔顿板仿真模拟实验

1.前言

学习了概率论,决定动手编程实现高尔顿板仿真模拟实验,其中本文代码部分参考了这篇文章.

2.实验目的

通过模拟实验实现高尔顿板模型,并对结果与二项分布进行比较.

3.实验原理

在高尔顿钉板中倒入小球,下落过程中小球掉在左边和掉在右边的概率相同.放入若干小球,当小球数量足够多时,落下的小球所呈现的曲线符合二项分布概率.

4.实验过程

本实验采用动画的形式直观的表现实验过程,并通过柱状图表现每一次实验结果,方便与二项分布曲线进行比较,实验设置高尔顿板为7层,函数将通过生成随机数来模拟每一次小球下落的结果,并通过更改小球个数 n n n来得到不同的结果.

5.实验结果

n = 100 n=100 n=100时:
在这里插入图片描述在这里插入图片描述
n = 1000 n=1000 n=1000时:

在这里插入图片描述在这里插入图片描述
n = 10000 n=10000 n=10000时:
在这里插入图片描述在这里插入图片描述

6.实验结论

对结果进行比较可知,n取100时初步体现了二项分布的特征,n取1000时结果更加接近二项分布曲线,当n取到10000时实验结果几乎与二项分布曲线重合.对此,我们可以推测,当试验次数足够多时,即n足够大时,高尔顿版实验结果满足二项分布规律。

7.Matlab代码

K=10000;  %控制实验的次数,可更改
n=zeros(1,7);  % 矩阵n为1*5的矩阵初值为0
delay=0.0005;  %设置delay变量等于0.005
clf;  %清除当前窗口的图案
axis([-8 8 -15 0]);  %设置x范围-44 y范围-70
aa=sqrt(3)/2;  %aa=(根号3/2
bb=1/2;  %bb= 1/2
dd=3/2;  %d= 3/2
a=0.9*aa;  %a= 0.9 * aa
b=0.9*bb;  %b= 0.9 * bb
xxx=[-3*sqrt(3),-2*sqrt(3),-1*sqrt(3),0,1*sqrt(3),2*sqrt(3),3*sqrt(3)]; % 设定柱形图横坐标
xx=[0,-aa,aa,-2*aa,0,2*aa,-3*aa,-aa,aa,3*aa,-4*aa,-2*aa,0,2*aa,4*aa,-5*aa,-3*aa,-aa,aa,3*aa,5*aa];  % 每个六边形顶点的坐标
yy=[0,-dd,-dd,-2*dd,-2*dd,-2*dd,-3*dd,-3*dd,-3*dd,-3*dd,-4*dd,-4*dd,-4*dd,-4*dd,-4*dd,-5*dd,-5*dd,-5*dd,-5*dd,-5*dd,-5*dd];  % 每个六边形顶点的坐标
for k=1:K  %循环K次
   figure(1);
   clf  %清除当前窗口的图案
   r=round(rand(1,6));  %round函数四舍五入取整 rand函数生成一个14列的随机数
   x0=0;y0=0;    %
   for i=1:21  % i 循环 从110,10个六边形
      x=xx(i);  % x等于每一个六边形的顶端
      y=yy(i)-0.1;  %y等于每一个六边形的顶端
      X=[x,x-a,x-a,x,x+a,x+a];  % 标出六边形的六个点的坐标
      Y=[y,y-b,y-b-0.9,y-1.8,y-b-0.9,y-b];  % 标出六边形的六个点的坐标
      patch(X,Y,'g');hold on;  %用绿色把XY中的部分填充
   end  
   n(sum(r)+1)=n(sum(r)+1)+1;  %
   plot(x0,y0,'mo');  %画(00)的红圈圈
   for j=1:6  % j 循环 从14
      if r(j)==0  %如果r矩阵中的第j个元素为0
         x0=x0-aa;y0=y0-bb;  % 球往左移动
         plot(x0,y0,'mo');hold on;  %画红圈圈,红圈圈暂时保留,暂停0.0005s
         y0=y0-1;  %y0往下一单位距离,即往下走的圈圈
         plot(x0,y0,'mo');hold on;  %画红圈圈,红圈圈暂时保留,暂停0.0005s
      else  %如果r矩阵中的第j个元素为1
         x0=x0+aa;y0=y0-bb;  % 球往右移动
         plot(x0,y0,'mo');hold on;  %画红圈圈,红圈圈暂时保留,暂停0.0005s
         y0=y0-1;  %y0往下一单位距离,即往下走的圈圈
         plot(x0,y0,'mo');hold on;  %画红圈圈,红圈圈暂时保留,暂停0.0005s
      end  
   end  
   for m=1:7  % m 循环 从15
      text((m-4)*sqrt(3),-9.5,num2str(n(m)));  % 最底端的位置显示字符串(掉落球的实时结果)
   end
   figure(2);
   bar(xxx,n); % 柱形图
   figure(1);  
   pause(1*delay);  %暂停 初始时间20*0.0005=0.001s
end  
  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值