⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 galton.m

📁 动态实现加尔顿顶板演示
💻 M
字号:
function galton
%%%%%%%%%%%%%%%%
M=get(findobj(gcbf,'Tag','ex_edit_m'),'string');
P=get(findobj(gcbf,'Tag','ex_edit_p'),'string');
m=str2num(M);
p=str2num(P);
%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%

n=4;y0=2;      %设置参数。

ballnum=zeros(1,n+1);

q=1-p;                     %q为小球向左下落的概率,p为小球向右下落的概率

for i=n+1:-1:1             %创建钉子的坐标x,y 。  
   x(i,1)=0.5*(n-i+1);y(i,1)=(n-i+1)+y0;
   for j=2:i
      x(i,j)=x(i,1)+(j-1)*1;y(i,j)=y(i,1);
  end
end

%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%

mm=moviein(m);        % 动画开始,模拟小球下落路径。
for i=1:m
   s=rand(1,n);            %产生n个随机数。
   xi=x(1,1);yi=y(1,1);k=1;l=1;    % 小球遇到第一个钉子。
   for j=1:n
      
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      ex_plot1;  %画出小球通道和画钉子的位置 。
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       axis([-1 n+2 0 y0+n+1]),hold on             
       k=k+1;                     % 小球下落一格 。   
      if s(j)>p  
         l=l+0;                    %小球左移 。        
      else
         l=l+1;                    %小球右移 。     
      end
      xt=x(k,l);yt=y(k,l);      	      %小球下落点的坐标。 
      h=plot([xi,xt],[yi,yt]);axis([-1 n+2 0 y0+n+1])  %画小球运动轨迹。
      xi=xt;yi=yt;                          
   end

   ballnum(l)=ballnum(l)+1;                  %计数。
    ballnum1=3*ballnum./m;
    bar([0:n],ballnum1),axis([-1 n+1 0 y0+n+1]) %画各格子的频率 。 
    mm(i)=getframe;                  %存储动画数据。
    hold off

end  
movie(mm,1)                    %播放动画1次
hold off;
a=zeros(1,n+1);
for l=1:n+1
    a(1,l)=ballnum(l);
end

b=a(1,:);

wer1=findobj(gcbf,'Tag','text4');
set(wer1,'string',b(1,1));

wer2=findobj(gcbf,'Tag','text5');
set(wer2,'string',b(1,2));

wer3=findobj(gcbf,'Tag','text6');
set(wer3,'string',b(1,3));

wer4=findobj(gcbf,'Tag','text7');
set(wer4,'string',b(1,4));

wer5=findobj(gcbf,'Tag','text8');
set(wer5,'string',b(1,5));




a=[];

for i=0:4
    d=f(4)/(f(i)*f(4-i));
    c=p^i*(1-p)^(4-i);
    b=d*c;
    a=[a b];
end

a=m*a;
wer6=findobj(gcbf,'Tag','text12');
set(wer6,'string',a(1));

wer7=findobj(gcbf,'Tag','text13');
set(wer7,'string',a(2));

wer8=findobj(gcbf,'Tag','text14');
set(wer8,'string',a(3));

wer9=findobj(gcbf,'Tag','text15');
set(wer9,'string',a(4));

wer10=findobj(gcbf,'Tag','text16');
set(wer10,'string',a(5));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -