📄 galton.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 + -