《Matlab语言》课程论文用MATALAB分析阻尼运动姓名:刘莎学号:12010245231专业:2010级通信专业指导老师:汤全武所在学院:物理电气信息学院完成日期:2011年11月28号用MATLAB分析阻尼运动(刘莎120102452312010级通信专业)【摘要】:大学物理中的阻尼运动是一个比较繁琐的问题,物体在运动过程中受各种阻力(如摩擦力、空气阻力等)的影响,出现能量逐渐衰减而导致运动减弱的现象,这种运动被称为阻尼运动。用MATLAB语言解决是个很好的工具,可以解决方程、绘制图像、处理数据,这大大简化运算过程与方法,在实验处理方面给予了很大的帮助,节约了时间,同时也节约了计算量。也可以把MATALAB应用到实际问题当中,达到了学以致用,加深对阻尼运动的理解。【关键词】:力学阻尼运动matlab语言绘图一、问题提出MATLAB语言是当今科学界最具影响力也是最具活力的软件。是一种面向与工程的高级语言,它提供了强有力的科学用算,灵活的设计流程、高质量的图形可视化以及界面设计的便捷和其他语言接口等功能,MATLAB语言在各国高校与研究中发挥着重要的作用,它是一种集数据运算、符号运算,可视化建模、仿真和图形处理多方面与一体的语言,现在用MATLAB解决物理中的阻尼运动也是很方便的事情。可以用传统的方法通过MATLAB实现其振动规律曲线,并改变其初始条件,实现一组曲线的脉冲过度函数。二、模拟小球受阻尼运动通过把阻尼振动的小球的运动做投影,更好地观察在阻尼振动过程中,小球的振动衰弱情况,用matlab把阻尼振动简化成较容易的程序设计。小球受到阻力运动状态就会减弱,利用这种情况就可以分析阻尼运动的过程。模拟弹簧阻尼振动的过程包括以下内容:(1)更新小球和弹簧的位置。(2)更新水平线的位置和长度。(3)实时地画出弹簧高度与时间的关系曲线。(4)小球受到各种阻尼时,,合外力和加速度都会减小,运动会受到阻碍,用MATLAB进行模拟。下面来模拟弹簧振子在阻尼力的作用下进行阻尼运动的过程,同时画出相应圆球质心随时间变化的曲线。相应的MATLAB程序如下:closeall;clear;clc;%阻尼振动rectangle('position',[12,8,2,0.3],'FaceColor',[0.1,0.3,0.4]);%生成固定块axis([0,15,-1,10]);holdon;%设置坐标轴范围plot([13,13],[7,8],'r','linewidth',2);%画与弹簧连接的线y=2:.2:7;%得到弹簧对应的纵坐标数据M=length(y);%获取数据的长度x=12+mod(1:M,2)*2;%生成弹簧的横坐标数据x(1)=13;x(end-3:end)=13;%计算出弹簧上下端点的横坐标值D=plot(x,y);%画出弹簧C=0:.1:2*pi;%生成圆球的角度数据r=0.3;%圆球的半径t1=r*sin(C);%计算出圆球对中心的纵坐标数据F1=fill(13+r*cos(C),2+t1,'r');%画出圆球set(gca,'ytick',[0:2:9]);%设置y轴的刻度set(gca,'yticklabels',num2str([-1:3]'));%重新设置y轴的刻度值plot([0,15],[2,2],'black');%画出平衡位置H1=plot([0,13],[2,2],'g');%球心的跟踪线Q=plot(0,2.5,'color','r');%画出运动曲线;td=[];%记录时间的变量yd=[];%记录y轴位置的变量T=0;%设置初始时的时间值text(2,8,'damposillation','fontsize',24);%添加标注文字set(gcf,'doublebuffer','on');%设置渲染效果whileT<12;%利用循环处理阻尼运动过程的模拟pause(0.2);%暂停一下,显示动画效果Dy=1-0.5*exp(-T/4)*cos(pi*T);%计算T时刻弹簧对平衡位置的位移Y=-(y-2)*Dy+7;%计算弹簧的纵坐标数值Yf=Y(end)+t1;%计算圆球的纵坐标数值td=[td,T];yd=[yd,Y(end)];%更新运动曲线的数据set(D,'ydata',Y);%更新弹簧的位置数据set(F1,'ydata',Yf,'facecolor',rand(1,3));%更新圆球的位置数据set(H1,'xdata',[T,13],'ydata',[Y(end),Y(end)]);%更新跟踪线的数据set(Q,'xdata',td,'ydata',yd);%更新圆球的数据T=T+0.1;%更新时间end%结束Kd=find(diff(sign(diff(yd)))==-2)+1;%计算极大值的位置X=td(Kd);%得到极大值处的横坐标数值Y=yd(Kd);%得到极大值处的纵坐标数值X=[0,X,td(end)];%得到上侧包络线的横坐标数据Y=[yd(1),Y,yd(end)];%得到上侧包络线的纵坐标数据plot(X,Y,':');%画出上侧包络线Kx=find(diff(sign(diff(yd)))==2)+1;%计算极小值的位置X=td(Kx);%得到极小值处的横坐...