完全弹性碰撞matlab
- 格式:docx
- 大小:93.34 KB
- 文档页数:10
单自由度含间隙的碰撞matlab在工程学和物理学领域,研究物体的碰撞是非常重要的。
特别是在机械系统中,了解碰撞的过程和影响对于设计和优化系统至关重要。
单自由度系统是一个被广泛用于研究碰撞的简化模型,而含有间隙的碰撞则更贴近现实情况。
在本文中,我们将使用matlab来探索单自由度含间隙的碰撞问题,并分析其影响。
1. 单自由度系统的建模单自由度系统是指只有一个自由度可以运动的系统。
在碰撞问题中,可以将一个简单的弹簧-质量系统作为单自由度系统进行研究。
假设系统中只有一个质点,它可以沿着一条直线运动,并且与一个弹簧相连。
当质点受到外力作用时,会产生振动。
为了建模这样的系统,可以使用牛顿第二定律和胡克定律,建立质点的运动微分方程。
2. 含间隙的碰撞在实际情况中,很少有系统会完全没有间隙地进行碰撞。
考虑一个弹簧-质量系统,在质点受到外力作用振动时,如果外力突然消失,质点会继续振动直到它的动能全部转化为弹性势能。
这种情况下,系统会存在一个间隙,即质点与弹簧的最大伸长距离。
当质点振动到最大位移时,与弹簧发生碰撞,这就是含间隙的碰撞过程。
3. 用matlab模拟单自由度含间隙的碰撞要用matlab模拟单自由度含间隙的碰撞,首先需要建立质点的运动微分方程。
考虑质点的位移、速度和加速度,以及弹簧的力学特性,可以得到微分方程。
需要定义外力的突然消失以及碰撞的条件。
当质点振动到最大位移时,即发生碰撞,系统的动能和弹性势能之间会发生转化。
在matlab中编写程序,对微分方程进行数值求解,并绘制出质点振动的模拟图像。
4. 结论和个人观点通过matlab的模拟,我们可以清晰地看到含间隙的碰撞对单自由度系统的影响。
碰撞后,质点的振动会发生改变,弹簧的振动也会产生不同的响应。
这种模拟有助于我们更好地理解质点-弹簧系统在碰撞时的动态特性。
个人认为,matlab是一个非常强大的工具,能够帮助工程师和科学家更好地研究和分析复杂的系统,尤其在碰撞和动力学方面有着广泛的应用前景。
气体扩散模拟实验报告工程力学1001 陈金刚3100104568一.实验背景:要求用matlab编程模拟分子碰撞,演示气体扩散情况。
本实验中的模型采用简化形式,所发生碰撞均为完全弹性碰撞。
壁面压强产生的原因是大量气体分子对容器壁的持续的、无规则撞击产生的。
各个壁面所受力和压强为单位时间内的平均值来代替。
由Ft=mv-(mv)=2mv,四个壁面在经历相同时间t的情况下,所受的平均压力F与2mv成正比。
又四个壁面长度S一样,所以由P=F/S 可知,壁面所受压强P与所受平均压力成正比。
因此,只需统计分析在相同时间内,四个壁面所受碰撞的总的2mv 即可知道各个壁面所受压力和压强的情况。
二.实验基本情况说明:区域尺寸:2维空间,200*200粒子数目:N个,N可变化粒子半径:各不相同,根据实验情况在一定范围内随机产生粒子质量:各不相同,与粒子半径的平方成正比初始位置:随机分布在左半区域初始速度:随机大小三.实验结果分析:(所有运行时间都一致)由表格数据分析可知:对于不同粒子数目,在运行足够长时间下,区域内分子运动会近似稳定,各个壁面所受压力,趋向稳定,在误差允许范围内,各个壁面所受压强可认为近似相同。
四.源代码:N=50;%球数,可变rad=rand(N,1)*2+4;%球半径,[4,6]pos=[rand(N,1)*90+5 rand(N,1)*190+5];%初始位置:左半边区域vel=rand(N,2)*20-10;%各球初始速度color=rand(N,3);%各球颜色,随机产生mass=5*rad.^2;%各球质量,与半径的平方成正比Left=0; %左边界,下同Right=200;Up=200;Down=0;figure;axis manual;axis equal square; %固定坐标axis([0 200 0 200]);hold on;%===============画不重叠的N个小球====for i=2:Nindex=0;while index==0index2=0;for j=1:i-1pp(j,:)=[pos(i,1)-pos(j,1),pos(i,2)-pos(j,2)];rr(j)=rad(i)+rad(j);ppp(j)=norm(pp(j,:));if ppp(j) <rr(j)+sqrt((vel(i,1)-vel(j,1))^2+(vel(i,2)-vel(j,2))^2)*0.1;%修正一开始若球相切时,后面判断可能误认为相撞index2=1;break;endendif ~index2index=1;else pos(i,:)=[rand()*90+5 rand()*190+5];endendend%==================================================================== couleft=0;%左壁面撞击的总mv,以下类似couright=0;couup=0;coudown=0;dt=0;%最小时间qq=0;%用于循环次数控制while qq<200%=========以下各球两两碰撞最小时间计算k=1;for i=1:Nfor j=i:Ndis=[pos(j,1)-pos(i,1),pos(j,2)-pos(i,2)];vv=[vel(j,1)-vel(i,1),vel(j,2)-vel(i,2)];dist=norm(dis);rr=rad(i)+rad(j);cosAlpha =abs( sqrt(1-(rr/dist)^2));cosTheta=(dot(dis,vv)/norm(vv)/dist);if cosTheta>=cosAlpha && cosTheta<1dd=dist*cosTheta-sqrt(rr^2-(dist*sqrt(1-cosTheta^2))^2);time(k)=dd/norm(vv);k=k+1;endendendtball=min(time);%================各球碰墙最小时间计算for i=1:Nif vel(i,1)>0tx(i)=(Right-pos(i,1))/vel(i,1);elsetx(i)=(Left-pos(i,1))/vel(i,1);endif vel(i,2) >0ty(i)=(Up-pos(i,2))/vel(i,2);elsety(i)=(Down-pos(i,2))/vel(i,2);endendtwall=min(tx,ty);%====tBallWall=min(tball,twall);dt=dt+tBallWall;%与墙相撞改变速度for i=1:Nif pos(i,1)-rad(i)<=Left && vel(i,1)~=0pos(i,1)=rad(i);%修正边couleft=couleft+mass(i)*abs(vel(i,1));vel(i,1)=-vel(i,1);elseif pos(i,1)+rad(i)>=Right && vel(i,1)~=0 pos(i,1)=200-rad(i);%修正边couright=couright+mass(i)*abs(vel(i,1));vel(i,1)=-vel(i,1);endif pos(i,2)-rad(i)<=Down && vel(i,2)~=0pos(i,2)=rad(i);coudown=coudown+mass(i)*abs(vel(i,2));vel(i,2)=-vel(i,2);elseif pos(i,2)+rad(i)>=Up && vel(i,2)~=0pos(i,2)=200-rad(i);couup=couup+mass(i)*abs(vel(i,2));vel(i,2)=-vel(i,2);endend%两球碰撞改变速度for i=1:Nfor j=i+1:NtwoBall=[pos(i,1)-pos(j,1),pos(i,2)-pos(j,2)];D=norm(twoBall);if D-rad(i)-rad(j)<sqrt((vel(i,1)-vel(j,1))^2+(vel(i,2)-vel(j,2))^2)*0.1;if D<rad(i)+rad(j) %修正碰撞误差pos(j,1)=pos(j,1)-vel(j,1)*0.05;pos(j,2)=pos(j,2)-vel(j,2)*0.05;endc=((mass(i)-mass(j))*vel(i,1)+2*mass(j)*vel(j,1))/(mass(i)+mass(j));vel(j,1)=((mass(j)-mass(i))*vel(j,1)+2*mass(i)*vel(i,1))/(mass(i)+mass(j)); vel(i,1)=c;c=((mass(i)-mass(j))*vel(i,2)+2*mass(j)*vel(j,2))/(mass(i)+mass(j));vel(j,2)=((mass(j)-mass(i))*vel(j,2)+2*mass(i)*vel(i,2))/(mass(i)+mass(j)); vel(i,2)=c;endendend%===============每隔一段时间画图while dt>0.05cla;for i=1:Nalpha=0:pi/20:2*pi;xx=pos(i,1)+rad(i)*cos(alpha);yy=pos(i,2)+rad(i)*sin(alpha);plot(xx,yy,'k-','LineWidth',2);fill(xx,yy,color(i,:));enddt=0;drawnowendpos=pos+0.1*vel;qq=qq+1;end%输出各个统计量clc;disp(['LeftSide=',num2str(couleft),' ','RightSide=',num2str(couright),' ',...'UpSide=',num2str(couup),' ','DownSide=',num2str(coudown)]);。
MATLAB包围盒碰撞检测算法1. 简介MATLAB包围盒碰撞检测算法是一种用于计算机图形学和计算机动画中的重要算法。
它主要用于检测两个三维对象之间是否相互碰撞,通过使用包围盒来近似表示物体的位置和形状,从而减少计算量和提高碰撞检测的效率。
2. 算法原理MATLAB包围盒碰撞检测算法的基本原理是将每个三维对象用一个包围盒来近似表示。
包围盒通常是一个矩形立方体,它完全包围住了物体,但不一定和物体的形状完全吻合。
通过比较两个包围盒之间的位置关系,可以快速判断出它们之间是否可能存在碰撞。
3. 算法步骤在MATLAB中,实现包围盒碰撞检测算法通常包括以下步骤:- 定义包围盒:将每个三维对象用一个包围盒来近似表示,通常使用最小包围盒或轴对齐包围盒。
- 碰撞检测:比较两个包围盒之间的位置关系,判断它们是否相互碰撞。
- 碰撞响应:如果发生碰撞,可以根据碰撞的情况进行相应的处理,比如改变物体的运动状态或触发碰撞效果。
4. 深入理解MATLAB包围盒碰撞检测算法的优势在于它能够快速地进行碰撞检测,尤其适用于复杂的三维场景。
通过近似表示物体的形状,不仅可以减少计算量,还可以简化碰撞检测的流程。
然而,包围盒碰撞检测算法也存在一定的局限性,当物体的形状非常不规则时,可能会导致碰撞检测的误判。
5. 个人观点和理解我认为MATLAB包围盒碰撞检测算法在计算机图形学和计算机动画领域具有非常重要的应用价值。
它可以帮助我们快速准确地判断物体之间是否发生碰撞,为虚拟场景的构建和动画效果的实现提供了重要支持。
在实际应用中,我们可以根据具体的场景和要求选择不同类型的包围盒,并结合其他碰撞检测算法进行综合应用,以达到更精确的碰撞检测效果。
6. 总结回顾通过本文的介绍,我深入理解了MATLAB包围盒碰撞检测算法的原理和实现步骤,以及它的优势和局限性。
我对这个算法的应用场景和重要性有了更清晰的认识,并且深刻理解了碰撞检测在计算机图形学和计算机动画中的重要作用。
Matlab设计实验课题名称:完全弹性碰撞一.设计背景:完全弹性碰撞(Perfect Elastic Collision):在理想情况下,完全弹性碰撞的物理过程满足动量守恒和能量守恒。
如果两个碰撞小球的质量相等,联立动量守恒和能量守恒方程时可解得:两个小球碰撞后交换速度。
如果被碰撞的小球原来静止,则碰撞后该小球具有了与碰撞小球一样大小的速度,而碰撞小球则停止。
多个小球碰撞时可以进行类似的分析。
二.设计意义真实情况下,由于小球间的碰撞并非理想的弹性碰撞,还会有能量的损失,所以最后小球还是要停下来。
所以该设计主要用于研究能量守恒中的某些问题。
还有就是用于实验演示。
三.程序设计该程序主要设置了三个不同颜色的小球,在真空环境下(理想环境下)的碰撞实验演示。
该程序可以通过改变各种参数,研究各种情况下的实验数据。
程序:pole=1.8;%定义摆线的长度xmax=2;%定义横坐标长度ymax=2;%定义纵坐标长度basew=2.3;%定义图中方框的宽度baseh=2.3;%定义图中方框的高度instant=0.2;%定义摆线间距%三视图的初始设置%第一幅图figure('name','理想情况下能量守恒定律1','position',[500,340,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'主视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景theta0=7 *pi/6;%摆线1的初始角度x0=pole*cos(theta0);%摆线1末端x坐标y0=pole*sin(theta0)+1.5;%摆线1末端y坐标body1=line([-instant,x0-instant],[1.5,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1head1=line(x0-instant,y0,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小theta1=3*pi/2;%摆线2,3的角度x1=pole*cos(theta1);%摆线2,3末端x坐标y1=pole*sin(theta1)+1.5;%摆线2,3末端y坐标body=line([-0.001,x1],[1.5,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2head=line(x1,y1,'color','k','linestyle','.','erasemode','xor','markersize ',40);%设置第2个小球颜色,大小body2=line([instant;x1+instant],[1.5;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3head2=line(x1+instant,y1,'color','b','linestyle','.','erasemode','xor',' markersize',40);%设置第3个小球颜色,大小theta3=15*pi/6 ;%第二幅图figure('name','理想情况下能量守恒定律2','position',[500,40,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内第一根横杆背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[-ymax+0.55 ,-ymax+0.5,-ymax+0.5,-ymax+0.55 ],'b');%填充方框内第二根横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'俯视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景y01=0;%设置摆球纵坐标值body11=line([-instant,x0-instant],[1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body12=line([-instant,x0-instant],[-1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head01=line(x0-instant,y01,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小body01=line([-0.001,x1],[1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body02=line([-0.001,x1],[-1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head00=line(x1,y01,'color','k','linestyle','.','erasemode','xor','marker size',40);%设置第二个小球颜色,大小body21=line([instant;x1+instant],[1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body22=line([instant;x1+instant],[-1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head02=line(x1+instant,y01,'color','b','linestyle','.','erasemode','xor ','markersize',40);%设置第三个小球颜色,大小%第三幅图figure('name','理想情况下能量守恒定律3','position',[50,340,440,320]);%定义第三幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on%保持当前图形及坐标所有特性text(1.0,1.7,'真空容器');text(-1.8,1.7,'侧视图');%在坐标处标识说明文字text( -1.7,1.5,'a');text( 1.7,1.5,'b');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景x01=0;x02=1.48;y02=1.48;%设置坐标head000=line(-x02,y02,'color','g','linestyle','.','erasemode','xor','markersize',18);%设置横杆ahead000=line(x02,y02,'color','g','linestyle','.','erasemode','xor','mar kersize',18);%设置横杆bbody311=line([-x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body312=line([x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head301=line(x01,y0,'color','r','linestyle','.','erasemode','xor','marke rsize',40);%设置摆球1body301=line([-x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body302=line([x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head300=line(x01,y1,'color','k','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球2body321=line([-x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body322=line([x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head302=line(x01,y1,'color','b','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球3while 1%条件判断theta0=theta0+pi/540;theta3=theta3-pi/540;if theta0>=15*pi/6theta0=7*pi/6;theta3=15*pi/6 ;%设置摆球1运动过程elseif (theta0>=7*pi/6)&(theta0<3*pi/2)x11=pole*cos(theta0);y11=pole*sin(theta0)+1.5;set(body1,'xdata',[-instant,x11-instant],'ydata',[1.5,y11]);%设置主视图中摆线1运动set(head1,'xdata',x11-instant,'ydata',y11);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x11-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y11);%设置侧视图中摆球1运动%设置摆球3运动的过程elseif (theta0>=3*pi/2)&(theta0<11*pi/6)x22=pole*cos(theta0);y22=pole*sin(theta0)+1.5;set(body2,'xdata',[instant,x22+instant],'ydata',[1.5,y22]);%设置主视图中摆线3运动set(head2,'xdata',x22+instant,'ydata',y22);%设置主视图中摆球3运动set(body21,'xdata',[instant,x22+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x22+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x22+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y22]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y22]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y22);%设置侧视图中摆球3运动% 设置摆球3运动过程elseif (theta0>=11*pi/6 )&(theta0<=13*pi/6 )x32=pole*cos(theta3);y32=pole*sin(theta3)+1.5;set(body2,'xdata',[instant,x32+instant],'ydata',[1.5,y32]);%设置主视图中摆线3运动set(head2,'xdata',x32+instant,'ydata',y32);%设置主视图中摆球3运动set(body21,'xdata',[instant,x32+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x32+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x32+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y32]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y32]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y32);%设置侧视图中摆球3运动%设置摆球1运动过程elseif (theta0>=13*pi/6 )&(theta0<15*pi/6 )x41=pole*cos(theta3);y41=pole*sin(theta3)+1.5;set(body1,'xdata',[-instant,x41-instant],'ydata',[1.5,y41]);%设置主视图中摆线1运动set(head1,'xdata',x41-instant,'ydata',y41);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x41-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x41-instant],'ydata',[-1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x41-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y41); %设置侧视图中摆球1运动drawnow;endend四.程序截图主视图俯视图侧视图。
基于MATLAB的α粒子散射实验过程讨论随着科学技术的不断进步,人们对于微观粒子的研究也越来越深入。
其中,α粒子散射实验是一种比较常见和重要的实验方式。
本文将从实验过程、数据处理及分析等方面对α粒子散射实验进行讨论。
实验过程α粒子散射实验是一种基于Rutherford散射理论的实验。
实验过程中,首先需要准备好一个反应采集器,它由一个静止的金属薄膜和一个侧向空心的金属圆筒组成。
其次,需要使用α放射性同位素源,将其放置在反应采集器中心,并使其释放出α粒子。
在实验过程中,需要将α粒子源放置在一定的距离处,使得α粒子可以穿过金属圆筒并撞击到金属薄膜上。
通过调节α粒子源和反应采集器之间的距离,可以改变α粒子的入射能量和入射角度。
当α粒子射入反应采集器中时,它们会被反应采集器中的金属原子核吸引,并发生了弹性碰撞。
这样就会产生一个散射角度,并且散射角度的大小与α粒子的入射能量、入射角度以及靶物质的原子序数等因素都有关系。
数据处理及分析在实验过程中,需要记录下α粒子的散射角度和散射的数量,然后进行数据的处理和分析。
具体实验数据如下表所示:| α粒子散射角度/° | α粒子散射数量 ||------------------|--------------|| 5 | 898 || 10 | 775 || 15 | 630 || 20 | 520 || 25 | 460 || 30 | 390 |数据处理和分析的主要目的是确定金属原子核的结构特征和原子序数。
为了实现这个目的,我们需要使用散射公式得出α粒子的解析值,然后与实验值进行比较,计算误差,进而得出金属原子核的结构特征和原子序数。
在本次实验中,我们可以使用著名物理学家Rutherford的散射公式:θ = 1/2 *arcsin( (Z * e^2 / 4 * π * ε_0 * E ) / 2 * m_r * v^2 )其中,θ为散射角度,Z为原子序数,e为电量,ε_0为真空介电常数,E为入射α粒子的能量,m_r为金属核的质量,v为α粒子的速度。
隔震结构碰撞分析的改进Hertz-damp模型赵大海;刘勇;李宏男;钱辉;刘莎【摘要】Pounding is a complicated nonlinear problem.In order to investigate the structural responses under the impact of collision,a proper collision model was very necessary.For the impact of base-isolated structure,a new damping function was constructed by combining the modified Kelvin model and the Hertz-damp model.The modified Hertz-damp model was proposed,and the reliability of the new impact model was verified by numerical paring with other impact models according to the existing pounding tests,it can be shown that the modified Hertz-damp model is more accurate than the other impact models,and can accurately simulate the pounding responses of the structure.%碰撞是一复杂的非线性问题,为了研究碰撞作用下结构的响应,合理的碰撞模型是非常必要的.针对隔震结构的碰撞现象,结合改进的Kelvin模型和Hertz-damp模型构造了一个新的阻尼函数,提出了改进的Hertz-damp碰撞模型,并对新碰撞模型的可靠性进行了数值验证.通过现有的碰撞试验和其他碰撞模型对比,表明改进后的Hertz-damp碰撞模型较其他碰撞模型具有较高的精度,能更精确地模拟结构的碰撞响应.【期刊名称】《振动与冲击》【年(卷),期】2017(036)012【总页数】7页(P236-242)【关键词】数值分析;Hertz-damp模型;结构碰撞;地震【作者】赵大海;刘勇;李宏男;钱辉;刘莎【作者单位】燕山大学建筑工程与力学学院,秦皇岛066004;燕山大学建筑工程与力学学院,秦皇岛066004;大连理工大学土木工程学院,大连116024;郑州大学土木工程学院,郑州450001;燕山大学建筑工程与力学学院,秦皇岛066004【正文语种】中文【中图分类】TU352.1现代城市人口密集,但土地非常有限,建筑之间的距离越来越近。
Matlab设计实验课题名称:完全弹性碰撞一.设计背景:完全弹性碰撞(Perfect Elastic Collision):在理想情况下,完全弹性碰撞的物理过程满足动量守恒和能量守恒。
如果两个碰撞小球的质量相等,联立动量守恒和能量守恒方程时可解得:两个小球碰撞后交换速度。
如果被碰撞的小球原来静止,则碰撞后该小球具有了与碰撞小球一样大小的速度,而碰撞小球则停止。
多个小球碰撞时可以进行类似的分析。
二.设计意义真实情况下,由于小球间的碰撞并非理想的弹性碰撞,还会有能量的损失,所以最后小球还是要停下来。
所以该设计主要用于研究能量守恒中的某些问题。
还有就是用于实验演示。
三.程序设计该程序主要设置了三个不同颜色的小球,在真空环境下(理想环境下)的碰撞实验演示。
该程序可以通过改变各种参数,研究各种情况下的实验数据。
程序:pole=1.8;%定义摆线的长度xmax=2;%定义横坐标长度ymax=2;%定义纵坐标长度basew=2.3;%定义图中方框的宽度baseh=2.3;%定义图中方框的高度instant=0.2;%定义摆线间距%三视图的初始设置%第一幅图figure('name','理想情况下能量守恒定律1','position',[500,340,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'主视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景theta0=7 *pi/6;%摆线1的初始角度x0=pole*cos(theta0);%摆线1末端x坐标y0=pole*sin(theta0)+1.5;%摆线1末端y坐标body1=line([-instant,x0-instant],[1.5,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1head1=line(x0-instant,y0,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小theta1=3*pi/2;%摆线2,3的角度x1=pole*cos(theta1);%摆线2,3末端x坐标y1=pole*sin(theta1)+1.5;%摆线2,3末端y坐标body=line([-0.001,x1],[1.5,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2head=line(x1,y1,'color','k','linestyle','.','erasemode','xor','markersize ',40);%设置第2个小球颜色,大小body2=line([instant;x1+instant],[1.5;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3head2=line(x1+instant,y1,'color','b','linestyle','.','erasemode','xor',' markersize',40);%设置第3个小球颜色,大小theta3=15*pi/6 ;%第二幅图figure('name','理想情况下能量守恒定律2','position',[500,40,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内第一根横杆背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[-ymax+0.55 ,-ymax+0.5,-ymax+0.5,-ymax+0.55 ],'b');%填充方框内第二根横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'俯视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景y01=0;%设置摆球纵坐标值body11=line([-instant,x0-instant],[1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body12=line([-instant,x0-instant],[-1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head01=line(x0-instant,y01,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小body01=line([-0.001,x1],[1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body02=line([-0.001,x1],[-1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head00=line(x1,y01,'color','k','linestyle','.','erasemode','xor','marker size',40);%设置第二个小球颜色,大小body21=line([instant;x1+instant],[1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body22=line([instant;x1+instant],[-1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head02=line(x1+instant,y01,'color','b','linestyle','.','erasemode','xor ','markersize',40);%设置第三个小球颜色,大小%第三幅图figure('name','理想情况下能量守恒定律3','position',[50,340,440,320]);%定义第三幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on%保持当前图形及坐标所有特性text(1.0,1.7,'真空容器');text(-1.8,1.7,'侧视图');%在坐标处标识说明文字text( -1.7,1.5,'a');text( 1.7,1.5,'b');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景x01=0;x02=1.48;y02=1.48;%设置坐标head000=line(-x02,y02,'color','g','linestyle','.','erasemode','xor','markersize',18);%设置横杆ahead000=line(x02,y02,'color','g','linestyle','.','erasemode','xor','mar kersize',18);%设置横杆bbody311=line([-x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body312=line([x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head301=line(x01,y0,'color','r','linestyle','.','erasemode','xor','marke rsize',40);%设置摆球1body301=line([-x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body302=line([x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head300=line(x01,y1,'color','k','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球2body321=line([-x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body322=line([x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head302=line(x01,y1,'color','b','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球3while 1%条件判断theta0=theta0+pi/540;theta3=theta3-pi/540;if theta0>=15*pi/6theta0=7*pi/6;theta3=15*pi/6 ;%设置摆球1运动过程elseif (theta0>=7*pi/6)&(theta0<3*pi/2)x11=pole*cos(theta0);y11=pole*sin(theta0)+1.5;set(body1,'xdata',[-instant,x11-instant],'ydata',[1.5,y11]);%设置主视图中摆线1运动set(head1,'xdata',x11-instant,'ydata',y11);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x11-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y11);%设置侧视图中摆球1运动%设置摆球3运动的过程elseif (theta0>=3*pi/2)&(theta0<11*pi/6)x22=pole*cos(theta0);y22=pole*sin(theta0)+1.5;set(body2,'xdata',[instant,x22+instant],'ydata',[1.5,y22]);%设置主视图中摆线3运动set(head2,'xdata',x22+instant,'ydata',y22);%设置主视图中摆球3运动set(body21,'xdata',[instant,x22+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x22+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x22+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y22]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y22]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y22);%设置侧视图中摆球3运动% 设置摆球3运动过程elseif (theta0>=11*pi/6 )&(theta0<=13*pi/6 )x32=pole*cos(theta3);y32=pole*sin(theta3)+1.5;set(body2,'xdata',[instant,x32+instant],'ydata',[1.5,y32]);%设置主视图中摆线3运动set(head2,'xdata',x32+instant,'ydata',y32);%设置主视图中摆球3运动set(body21,'xdata',[instant,x32+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x32+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x32+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y32]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y32]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y32);%设置侧视图中摆球3运动%设置摆球1运动过程elseif (theta0>=13*pi/6 )&(theta0<15*pi/6 )x41=pole*cos(theta3);y41=pole*sin(theta3)+1.5;set(body1,'xdata',[-instant,x41-instant],'ydata',[1.5,y41]);%设置主视图中摆线1运动set(head1,'xdata',x41-instant,'ydata',y41);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x41-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x41-instant],'ydata',[-1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x41-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y41); %设置侧视图中摆球1运动drawnow;endend四.程序截图主视图俯视图侧视图。
Matlab中的弹性网格变形技术引言:弹性网格变形技术(Elastic Grid Deformation)是一种常用于图像处理和计算机图形学领域的变形方法。
其核心思想是通过在图像上定义一个网格,并通过改变网格节点的位置来实现图像的变形。
在Matlab中,有许多弹性网格变形的实现方法和工具箱,为图像处理提供了丰富的功能和灵活性。
本文将介绍Matlab中的一些弹性网格变形技术,并讨论其应用和优势。
1. 弹性网格变形基本原理弹性网格变形技术的基本原理是通过在图像上定义一个二维网格,并对网格节点进行移动来实现图像的变形。
网格节点的移动由输入和输出网格之间的映射关系决定,这种映射关系可以通过计算得到。
在Matlab中,可以使用插值算法、优化算法等方法实现网格节点的移动。
2. Matlab中的弹性网格变形工具箱Matlab提供了多个工具箱用于实现弹性网格变形,其中包括Image Processing Toolbox和Computer Vision Toolbox等。
这些工具箱中包含了丰富的函数和工具,可用于实现各种图像变形操作,如旋转、缩放、形变等。
3. 弹性网格变形的应用弹性网格变形技术在图像处理和计算机图形学中有广泛的应用。
例如,在人脸识别领域,可以使用弹性网格变形来对人脸图像进行变形,提取出人脸的关键特征点,并进行人脸匹配和识别。
此外,弹性网格变形还可以用于图像编辑、图像重建和形状分析等领域。
4. Matlab中的示例应用为了演示Matlab中弹性网格变形技术的应用,我们可以通过一个简单的图像编辑例子来说明。
首先,通过读取一幅图像,并选择一些感兴趣区域,我们可以在Matlab中定义一个输入网格。
然后,通过调用Matlab中的弹性网格变形函数,我们可以对输入网格进行变形,并得到输出网格。
最后,通过对输出网格的映射关系进行计算,我们可以将输入图像中的感兴趣区域变形为我们想要的形状。
5. 弹性网格变形技术的优势和限制弹性网格变形技术具有灵活性和高效性的优势。
第31卷第4期大学物理实验Vol.31No.42018年8月PHYSICALEXPERIMENTOFCOLLEGEAug.2018收稿日期:2018 ̄03 ̄15基金项目:江苏省现代教育技术研究课题(2018 ̄R ̄63814)文章编号:1007 ̄2934(2018)04 ̄0069 ̄04小球在空气阻力下弹跳实验的建模与仿真张㊀林(南京林业大学ꎬ江苏南京㊀210037)摘要:使用Matlab/Simulink软件ꎬ建立了小球在空气阻力下反复弹跳的实验模型ꎬ讨论了小球在不同空气阻尼系数下的位移和速度ꎬ加深了学生对质点落体运动以及碰撞问题的认识ꎮ关键词:弹跳运动ꎻMatlab/Simulinkꎻ空气阻尼中图分类号:O4 ̄39文献标志码:ADOI:10.14139/j.cnki.cn22 ̄1228.2018.04.018㊀㊀物体在空气中运动时ꎬ会受到空气阻力ꎬ阻力的方向与速度方向相反ꎮ研究表明[1ꎬ2]:空气对运动物体的阻力大小ꎬ与物体运动的速度有关ꎮ当物体做低速运动时ꎬ空气阻力正比于物体的运动速率ꎻ当物体高速运动时ꎬ它所受到的空气阻力则正比于速率的平方ꎮ这个结论只适用于特定的实验环境ꎬ因为物体所受的空气阻力还会受到其形状㊁大小㊁密度㊁光滑度以及环境等诸多因素[3 ̄7]的制约ꎬ因此在不同时间㊁地点下测量ꎬ可能会得到不同的结论ꎮ所以ꎬ我们希望通过Matlab/Simulink仿真软件建立小球在不同空气阻尼系数下做弹跳运动的虚拟实验模型ꎬ通过改变模型中的控制参数ꎬ来研究小球的运动状态ꎬ从而加深学生对质点动力学问题的认识和理解ꎮ1㊀小球弹跳实验的动力学方程考虑一个质量为mꎬ可看成质点的刚性小球ꎬ在地面上反复弹跳ꎬ以地面为坐标原点ꎬ竖直向上为正方向ꎬ建立一维的坐标系ꎬ如图1所示ꎮ图1 小球的下落和上升过程图左(右)边分别表示小球在下落(上升)过程中所受到的重力mg和空气阻力f=k|v|αꎬ其中|v|表示小球的速率ꎬk是空气阻尼系数ꎬα是空气阻尼指数因子ꎮ根据牛顿第二定律ꎬ小球下落过程的动力学方程可表示为:ma=-mg+k|v|α(1)同理ꎬ上升过程的动力学方程可表示为ma=-mg-k|v|α(2)利用小球下落过程的速度v<0ꎬ上升过程v>0ꎬ可以合并(1)式和(2)式:ma=-mg-kv|v|α-1即a=-g-kmv|v|α-1(3)若小球不受到空气阻力(k=0)时ꎬ则小球在竖直方向做自由落体运动ꎬ其运动方程可表示为:x(t)=x0+v0t+12gt2(4)若空气阻尼指数因子α=1时ꎬ其运动方程为:x(t)=x0-mkgt+mkv0+mkgæèçöø÷1-e-ktm()(5)其中x0表示小球的初始位置ꎬv0表示初速度ꎮ在实际过程中ꎬ空气阻尼指数因子α取非整数ꎬ则(3)式没有解析解ꎬ只能得到数值解ꎬ因此通过Matlab/Simulink仿真平台来模拟小球真实的运动过程是非常有效的ꎮ另外ꎬ小球与地面的碰撞是非弹性碰撞ꎬ其第i次碰撞的恢复系数可定义为:β=vivi0(6)其中vi0和vi分别表示小球与地面碰撞前后的初速度和末速度ꎬ因为vi0<0且vi>0ꎬ则碰撞恢复系数的取值范围是-1£β£0ꎮ若β=-1表示完全弹性碰撞ꎬβ=0则表示完全非弹性碰撞ꎮ2㊀小球弹跳实验的Simulink建模与仿真㊀㊀将使用Matlab/Simulink仿真软件ꎬ对小球在空气阻力下的动力学方程(3)式进行建模ꎬ并得到小球在不同的实验条件下的运动状态ꎮ在图2所示的Matlab/Simulink仿真框图中ꎬ建立一个常数模块gꎬ设置为(3)式中小球的重力加速度ꎮ因为小球的加速度a依赖于速度vꎬ因此需要建立一个二阶积分(IntegratorSecond ̄Order)模块ꎬ通过设置外触发模式ꎬ来设置小球的初速度v0和初位置x0ꎬ并且将瞬时速度v取绝对值|v|ꎬ并经过幂乘因子α-1ꎬ与重力加速度加减组合ꎬ就能实现(3)式等号的右边ꎬ再作为输入量循环积分ꎬ便能得到小球在空气阻力下运动的位移和速度ꎬ并通过虚拟示波器Scope输出图像ꎮ另外ꎬ对于小球与地面之间非弹性碰撞的处理ꎬ我们是通过一个记忆(Memory)模块和一个增益(Gain)模块来实现的ꎮ当小球位移不为0时ꎬ初速度将保持上一个记忆ꎬ否则将按照(5)式ꎬ碰撞前的速度乘上恢复系数βꎬ得到碰撞后的速度ꎬ重新计算小球上升过程的运动方程和速度ꎮ在完成Matlab/Simulink建模后ꎬ为了得到小球的运动方程和速度ꎬ需要设定虚拟实验的参数:取小球质量m为0.003kgꎬ重力加速度g=-9.8m/sꎬ小球的初位置x0=10mꎬ初速度v0=15m/sꎮ图2㊀小球在空气阻力下运动的Simulink仿真框图㊀㊀图3是不考虑空气阻力k=0ꎬ且小球与地面发生完全弹性碰撞(恢复系数β=-1)时的仿真图像ꎮ上图是小球的位置x随时间t的变化曲线ꎬ下图是小球的速度v与时间t的曲线ꎮ从图中可以看出ꎬ位置与时间满足x=x0+v0t+12gt2的经典关系ꎬ当t=v0g=1.53sꎬ小球的速度等于0ꎬ并且07小球在空气阻力下弹跳实验的建模与仿真处于最高点21.5mꎮ当t=3.6s时ꎬ小球第一次下落到地面x=0且速度达到负的最大v=-20.5m/sꎬ并与地面发生弹性碰撞ꎬ以原速度大小反方向弹起ꎬ然后作高度不衰减的周期性弹跳运动ꎬ其弹跳周期近似为4.14sꎮ图3㊀空气阻尼系数k=0Ns/mꎬ且恢复系数β=-1.0时ꎬ小球的位置和速度曲线图4㊀阻尼系数k=0.001Ns/mꎬα=1.1且恢复系数β=-0.8时ꎬ小球的位置和速度曲线17小球在空气阻力下弹跳实验的建模与仿真㊀㊀图4是空气阻尼系数k=0.001Ns/mꎬα=1.1且小球与地面发生非弹性碰撞(恢复系数β=-0.8)时的仿真图像ꎮ如图所示ꎬ虽然位置x仍然近似满足抛物线型曲线ꎬ但是由于空气阻力的存在ꎬ小球运动的最高点要小于20mꎮ另一方面ꎬ由于小球与地面的碰撞是非弹性碰撞ꎬ存在机械能E的损失ꎬ这也加剧了小球反弹后的高度和速度不断地衰减ꎬ经过有限次数的碰撞后ꎬ小球最终会停止运动ꎮ小球的机械能E随时间t的变化ꎬ也可以从弹跳最大高度的变化估算出:E~e-ktmꎬ这与理论结果(5)式是近似符合的ꎮ此外ꎬ小球与地面的碰撞时间间隔也会随着碰撞次数的增加而不断地减小ꎮ3㊀结㊀论利用Matlab/Simulink软件构建了小球在空气阻力下做落体运动的虚拟实验模型ꎬ讨论了小球在无空气阻力ꎬ且与地面发生完全弹性碰撞的无阻尼弹跳ꎬ以及存在空气阻力ꎬ且有碰撞能量损失的阻尼弹跳ꎬ仿真结果与经典理论相符合ꎬ加深了学生对质点动力学问题的认识和理解ꎮ参考文献:[1]㊀蔡志东ꎬ陆建隆.考虑空气阻力时铅球最佳投射角的参数方程和实用方程[J].大学物理ꎬ2006ꎬ25(10):16 ̄22.[2]㊀马文蔚ꎬ解希顺ꎬ周雨青.物理学[M].北京:高等教育出版社.2006:41 ̄42.[3]㊀陈皓ꎬ朱世峰.锥体下落过程的空气阻力[J].河北师范大学学报:自然科学版ꎬ2011ꎬ35(3):265 ̄268. [4]㊀夏清华ꎬ张建华ꎬ杨德军.弹跳球运动的理论分析与数值研究[J].大学物理ꎬ2006ꎬ25(6):16 ̄19. [5]㊀代超超ꎬ杨凯ꎬ龙姝明.空气阻力与球体运动速度的函数关系[J].物理与工程ꎬ2013ꎬ23(4):61 ̄64. [6]㊀刘扬正ꎬ钱仰德.测定不同形状物体空气阻力系数的实验[J].大学物理ꎬ2017ꎬ36(3):16 ̄19. [7]㊀李艳琴.多功能球一球碰撞实验仪的研制[J].大学物理实验ꎬ2016(6):94 ̄97.ModelingandSimulationofaBouncingBallExperimentunderAirFrictionForceZHANGLin(NanjingForestryUniversityꎬJiangsuNanjing210037)Abstract:TheMatlab/Simulinksoftwarewasusedtoestablishanexperimentalmodeloftheballbouncedre ̄peatedlyunderairresistance.Thedisplacementandvelocityoftheballunderdifferentairdampingcoefficientswerediscussedꎬwhichdeepenedstudents understandingoftheparticlefallingandcollisionproblems.Keywords:bouncingballꎻMatlab/Simulinkꎻairdamping27小球在空气阻力下弹跳实验的建模与仿真。
用m a t l a b实现碰撞模型程序代码标准化工作室编码[XX968T-XX89628-XJ668-XT689N]c l c;clear;fill([6,7,7,6],[5,5,0,0],[0,0.5,0]);%右边竖条的填充holdon;%保持当前图形及轴系的所有特性fill([2,6,6,2],[3,3,0,0],[0,0.5,0]);%左边竖条的填充holdon;%保持当前图形及轴系的所有特性t1=0:pi/60:pi;plot(4-2*sin(t1-pi/2),5-2*cos(t1-pi/2));%绘制中间的凹弧图形gridon;%添加网格线axis([0,9,0,9]);%定义坐标轴的比例%axis('off');%关闭所有轴标注,标记,背景fill([1,2,2,1],[5,5,0,0],[0,0.5,0]);%中间长方形的填充holdon;%保持当前图形及轴系的所有特性title('碰撞');%定义图题x0=6;y0=5;head1=line(x0,y0,'color','r','linestyle','.','erasemode','xor','marke rsize',30);head2=line(x0,y0,'color','r','linestyle','.','erasemode','xor','marke rsize',50);%设置小球颜色,大小,线条的擦拭方式t=0;%设置小球的初始值dt=0.001;%设置运动周期t1=0;%设置大球的初始值dt1=0.001;while1%条件表达式t=t+dt;x1=9-1*t;y1=5;x3=6;y3=5;ift>0x2=6;y2=5;%设置小球的运动轨迹endift>2.8t=t+dt;a=sin(t-3);x1=6.1;y1=5.1;x3=4-2*sin(1.5*a);y3=5-2*cos(1.5*a);%设置大球的运动轨迹endset(head1,'xdata',x1,'ydata',y1);%设置球的运动set(head2,'xdata',x3,'ydata',y3);drawnow;end。
球式自动平衡装置数值仿真系统设计谭青;任志湘;魏来【摘要】The Matlab code is used very often in numerical simulation of ball-type automatic balancers. But the results are neither intuitive nor interactive. In this paper, a new dynamic simulation system with VB platform was designed. The mathematical model of the ball-type automatic balancers was solved numerically using Runge-Kutta method. The simulation results show that the system enables interactive visualization and intuition of the simulation results and realizes the dynamic presentation of the state of dynamic motion of the balls. The simulation results obtained by the numerical simulation system of the ball-type automatic balancers are consistent with those of the self-synchronization theory. The amplitude of the unbalanced rotor is reduced effectively.%在球式自动平衡装置的数值仿真中,传统的仿真方法是利用Matlab 进行数值仿真,得到的结果不具直观性和交互性。
Matlab程序设计仿真训练实验报告设计题目:物体碰撞运动建模专业;通信工程班级:三班姓名:张乐学号:201100805524报告时间:2012.06指导老师:蔡益红实验目的:了解matlab的基本特点与功能,基本掌握matlab的功能解决数学物理的相关问题。
实验环境MATLAB 7.9I、题目:质量为m的小球以速度正面碰撞质量为M的静止小球,假设碰撞是完全弹性的,即没有能量损失,求碰撞后两球的速度,及它们与两球质量比K =M/m的关系并对结果进行分析。
II、程序简介根据小球碰撞过程中的机械能守恒和动量守恒,写出两个方程,然后解出两个小球各自的速度表达式,再把已知参量代入到速度表达式即可求的小球完全弹性碰撞后的速度;其中,跟据两个小球的质量关系K=M/m,可以分析两个小球的质量跟碰撞后的速度u和v的方向和大小关系。
III、程序依据(机械能守恒)0.5*m*V^2-0.5*m*u^2-0.5*M*v^2=0(动量守恒)m*V-m*u-M*v=0求解方程的:u=V*(m-M)/(m+M);v=2*V*m/(m+M);代入K=M/m得:u=V*(1-k)/(1+k);v=2*V/(1+k);IV、程序代码syms u v;>>[x,y]=solve('0.5*m*V^2-0.5*m*u^2-0.5*M*v^2=0','m*V-m*u-M*v=0'); >> x=vpa(x,4);>> y=vpa(y,4);>>>> clear>> syms u v;>>[x,y]=solve('0.5*m*V^2-0.5*m*u^2-0.5*M*v^2=0','m*V-m*u-M*v=0'); >> x=vpa(x,4)x =V-(1.0*(M*V - 1.0*V*m))/(M + m)>> y=vpa(y,4)y =(2.0*V*m)/(M + m)当以K=M/m计算时:syms u v;>> [u,v]=solve('V-u-K*v=0','V^2-u^2-K*v^2=0');>> u=vpa(u,4)u =V(V - 1.0*K*V)/(K + 1.0)>> v=vpa(v,4)v =(2.0*V)/(K + 1.0)VI、函数图象x=0.1:0.1:10;>> y=2./(1+x)-1;>> z=2-2./(1+x);>>plot(x,y,x,z)V、数据分析当K=1时,两小球的质量相等,由公式的V1=0,V2=V0,即碰撞后质量为m的小球静止,质量为M的小球以速度大小V0,方向不变往前运动;当K>1时,碰后由速度表达式的V1为负,即速度反向,V2沿速度V0的方向运动;当K<1时,碰后由速度表达式得,两个小球均沿V0的方向运动,且V1的速度小于V2的速度。
Matlab设计实验课题名称:完全弹性碰撞一.设计背景:完全弹性碰撞(Perfect Elastic Collision):在理想情况下,完全弹性碰撞的物理过程满足动量守恒和能量守恒。
如果两个碰撞小球的质量相等,联立动量守恒和能量守恒方程时可解得:两个小球碰撞后交换速度。
如果被碰撞的小球原来静止,则碰撞后该小球具有了与碰撞小球一样大小的速度,而碰撞小球则停止。
多个小球碰撞时可以进行类似的分析。
二.设计意义真实情况下,由于小球间的碰撞并非理想的弹性碰撞,还会有能量的损失,所以最后小球还是要停下来。
所以该设计主要用于研究能量守恒中的某些问题。
还有就是用于实验演示。
三.程序设计该程序主要设置了三个不同颜色的小球,在真空环境下(理想环境下)的碰撞实验演示。
该程序可以通过改变各种参数,研究各种情况下的实验数据。
程序:pole=1.8;%定义摆线的长度xmax=2;%定义横坐标长度ymax=2;%定义纵坐标长度basew=2.3;%定义图中方框的宽度baseh=2.3;%定义图中方框的高度instant=0.2;%定义摆线间距%三视图的初始设置%第一幅图figure('name','理想情况下能量守恒定律1','position',[500,340,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'主视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景theta0=7 *pi/6;%摆线1的初始角度x0=pole*cos(theta0);%摆线1末端x坐标y0=pole*sin(theta0)+1.5;%摆线1末端y坐标body1=line([-instant,x0-instant],[1.5,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1head1=line(x0-instant,y0,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小theta1=3*pi/2;%摆线2,3的角度x1=pole*cos(theta1);%摆线2,3末端x坐标y1=pole*sin(theta1)+1.5;%摆线2,3末端y坐标body=line([-0.001,x1],[1.5,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2head=line(x1,y1,'color','k','linestyle','.','erasemode','xor','markersize ',40);%设置第2个小球颜色,大小body2=line([instant;x1+instant],[1.5;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3head2=line(x1+instant,y1,'color','b','linestyle','.','erasemode','xor',' markersize',40);%设置第3个小球颜色,大小theta3=15*pi/6 ;%第二幅图figure('name','理想情况下能量守恒定律2','position',[500,40,440,320]);%定义第一幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[ymax-0.5 ,ymax-0.55,ymax-0.55,ymax-0.5],'g');%填充方框内第一根横杆背景hold on;%保持当前图形及坐标所有特性fill([xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05],[-ymax+0.55 ,-ymax+0.5,-ymax+0.5,-ymax+0.55 ],'b');%填充方框内第二根横杆背景hold on;%保持当前图形及坐标所有特性text(-0.25,1.7,'1');text(0,1.7,'2');text(0.25,1.7,'3');%在坐标处标识说明文字text( -1.0,1.7,'a');text( -1.0,-1.7,'b');%在坐标处标识说明文字text(1.0,1.7,'真空容器');text(-1.8,1.7,'俯视图');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景y01=0;%设置摆球纵坐标值body11=line([-instant,x0-instant],[1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body12=line([-instant,x0-instant],[-1.5,y01],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head01=line(x0-instant,y01,'color','r','linestyle','.','erasemode','xor','markersize',40);%设置第一个小球颜色,大小body01=line([-0.001,x1],[1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body02=line([-0.001,x1],[-1.5,y01],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head00=line(x1,y01,'color','k','linestyle','.','erasemode','xor','marker size',40);%设置第二个小球颜色,大小body21=line([instant;x1+instant],[1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body22=line([instant;x1+instant],[-1.5;y01],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head02=line(x1+instant,y01,'color','b','linestyle','.','erasemode','xor ','markersize',40);%设置第三个小球颜色,大小%第三幅图figure('name','理想情况下能量守恒定律3','position',[50,340,440,320]);%定义第三幅图的标题和位置fill([xmax,xmax,-xmax,-xmax,xmax,xmax-0.05,xmax-0.05,-xmax+0.05,-xmax+0.05,xmax-0.05],[ymax,-ymax,-ymax,ymax,ymax,ymax-0.05,-ymax+0.05,-ymax+0.05,ymax-0.05,ymax-0.05],[0,1,1]);%填充底座背景hold on%保持当前图形及坐标所有特性text(1.0,1.7,'真空容器');text(-1.8,1.7,'侧视图');%在坐标处标识说明文字text( -1.7,1.5,'a');text( 1.7,1.5,'b');%在坐标处标识说明文字axis([-basew,basew,-baseh,baseh]);%定义背景坐标范围在x(-2.3~2.3) Y(-2.3~2.3)之间%axis('off');%覆盖坐标刻度并填充背景x01=0;x02=1.48;y02=1.48;%设置坐标head000=line(-x02,y02,'color','g','linestyle','.','erasemode','xor','markersize',18);%设置横杆ahead000=line(x02,y02,'color','g','linestyle','.','erasemode','xor','mar kersize',18);%设置横杆bbody311=line([-x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1上摆线body312=line([x02,x01],[y02,y0],'color','r','linestyle','-','erasemode','xor');%设置摆线1下摆线head301=line(x01,y0,'color','r','linestyle','.','erasemode','xor','marke rsize',40);%设置摆球1body301=line([-x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2上摆线body302=line([x02,x01],[y02,y1],'color','k','linestyle','-','erasemode','xor');%设置摆线2下摆线head300=line(x01,y1,'color','k','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球2body321=line([-x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3上摆线body322=line([x02;x01],[y02;y1],'color','b','linestyle','-','erasemode','xor');%设置摆线3下摆线head302=line(x01,y1,'color','b','linestyle','.','erasemode','xor','mark ersize',40);%设置摆球3while 1%条件判断theta0=theta0+pi/540;theta3=theta3-pi/540;if theta0>=15*pi/6theta0=7*pi/6;theta3=15*pi/6 ;%设置摆球1运动过程elseif (theta0>=7*pi/6)&(theta0<3*pi/2)x11=pole*cos(theta0);y11=pole*sin(theta0)+1.5;set(body1,'xdata',[-instant,x11-instant],'ydata',[1.5,y11]);%设置主视图中摆线1运动set(head1,'xdata',x11-instant,'ydata',y11);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x11-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x11-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y11]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y11);%设置侧视图中摆球1运动%设置摆球3运动的过程elseif (theta0>=3*pi/2)&(theta0<11*pi/6)x22=pole*cos(theta0);y22=pole*sin(theta0)+1.5;set(body2,'xdata',[instant,x22+instant],'ydata',[1.5,y22]);%设置主视图中摆线3运动set(head2,'xdata',x22+instant,'ydata',y22);%设置主视图中摆球3运动set(body21,'xdata',[instant,x22+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x22+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x22+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y22]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y22]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y22);%设置侧视图中摆球3运动% 设置摆球3运动过程elseif (theta0>=11*pi/6 )&(theta0<=13*pi/6 )x32=pole*cos(theta3);y32=pole*sin(theta3)+1.5;set(body2,'xdata',[instant,x32+instant],'ydata',[1.5,y32]);%设置主视图中摆线3运动set(head2,'xdata',x32+instant,'ydata',y32);%设置主视图中摆球3运动set(body21,'xdata',[instant,x32+instant],'ydata',[1.5,y01]);%设置俯视图中摆线3上摆线运动set(body22,'xdata',[instant,x32+instant],'ydata',[-1.5,y01]);%设置俯视图中摆线3下摆线运动set(head02,'xdata',x32+instant,'ydata',y01);%设置俯视图中摆球3运动set(body321,'xdata',[-x02,x01],'ydata',[y02,y32]); %设置侧视图中摆线3上摆线运动set(body322,'xdata',[x02,x01],'ydata',[y02,y32]);%设置侧视图中摆线3下摆线运动set(head302,'xdata',x01,'ydata',y32);%设置侧视图中摆球3运动%设置摆球1运动过程elseif (theta0>=13*pi/6 )&(theta0<15*pi/6 )x41=pole*cos(theta3);y41=pole*sin(theta3)+1.5;set(body1,'xdata',[-instant,x41-instant],'ydata',[1.5,y41]);%设置主视图中摆线1运动set(head1,'xdata',x41-instant,'ydata',y41);%设置主视图中摆球1运动set(body11,'xdata',[-instant,x41-instant],'ydata',[1.5,y01]);%设置俯视图中摆线1上摆线运动set(body12,'xdata',[-instant,x41-instant],'ydata',[-1.5,y01]);%设置俯视图中摆线1下摆线运动set(head01,'xdata',x41-instant,'ydata',y01);%设置俯视图中摆球1运动set(body311,'xdata',[-x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1上摆线运动set(body312,'xdata',[x02,x01],'ydata',[y02,y41]);%设置侧视图中摆线1下摆线运动set(head301,'xdata',x01,'ydata',y41); %设置侧视图中摆球1运动drawnow;endend四.程序截图主视图俯视图侧视图。