为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

MATLAB在物理中的应用

2012-07-07 22页 doc 3MB 112阅读

用户头像

is_334720

暂无简介

举报
MATLAB在物理中的应用MATLAB在物理中的应用 0 序 科学昌盛的今天,计算机应用无所不在。利用计算机技术来研究和分析物理学,对有大量的数学分析和计算的学科来说,尤为重要。这里推出的MATLAB程序,是专用于科学和工程计算的程序语言,是目前世界上应用最为广泛的计算语言之一。通过学习,你会觉得编程原来也是轻而易举;物理计算不再会觉得深奥复杂;物理图像更是信手沾来。 在国外有许多理工科类的书籍和教材已将MATLAB作为专用的科学计算语言融入到专业内容之中,并得到广泛认可。MATLAB程序具有以下几方面特点: 1.MATLAB语言与人们的思维方...
MATLAB在物理中的应用
MATLAB在物理中的应用 0 序 科学昌盛的今天,计算机应用无所不在。利用计算机技术来研究和分析物理学,对有大量的数学分析和计算的学科来说,尤为重要。这里推出的MATLAB程序,是专用于科学和工程计算的程序语言,是目前世界上应用最为广泛的计算语言之一。通过学习,你会觉得编程原来也是轻而易举;物理计算不再会觉得深奥复杂;物理图像更是信手沾来。 在国外有许多理工科类的籍和教材已将MATLAB作为专用的科学计算语言融入到专业内容之中,并得到广泛认可。MATLAB程序具有以下几方面特点: 1.MATLAB语言与人们的思维方式和书写习惯相适应,操作简单、方便。 2.可以方便地将运算结果用图形、图象、声音、动画等形象地表达出来。 3.无需编译,键入命令即可解释运行。 4.能自动选择合适的坐标范围。 5.有功能强大的工具箱。 6.有算法先进的数值计算和符号计算功能。 7.数据类型是矩阵,用户不必定义变量和数据类型,且矩阵大小可任意改变。 本讲座通过MATLAB在大学物理中的应用实例讲解,将大家引进MATLAB之门。旨在帮助同学在学习物理的同时也能掌握一门计算机技术,并能熟练应用计算机技术来学习物理和分析物理。为从简单到复杂逐渐将MATLAB语言的应用介绍给同学,本讲座的入门篇安排在振动与波的章节中,因此,同学从该章节开始学习。 衷心地希望你在本讲座的引导下,能够喜欢和使用MATLAB语言,更希望你能通过MATLAB来分析物理和研究物理。 1 简谐振动 1.1 讲授内容 振动是自然界中普遍存在的一种运动形式。例如,钟摆的运动、气缸中活塞的往复运动、心脏的跳动等。任一物理量(位移、速度、电场强度、电压等)在一定值附近作周期性的变化都可以称为振动。振动的运动形式很多,而且比较复杂,最简单、最基本的是简谐振动,其它任何复杂振动都可以分解为若干简谐振动的叠加。 简谐振动是指物体相对于平衡点的位置随时间按余弦(或正弦)规律变化的运动,其数学表达式为 作简谐振动的系统,称为谐振子。弹簧振子、单摆、复摆等都是谐振子。物体作简谐振动时,速度为 加速度为 1.2 程序编写 无论你有没有编过程序,都将觉得要编写一个物理学方面的程序,会是一件很费力的事,但选择MATLAB可以让你惊奇,在不到一分钟的时间,极少的语句你就能完成用其它语言数倍时间、数倍语句的程序。够酷吧。 还等什么,赶快在你的电脑上安装MATLAB6.1程序吧,相信你安装不会有问。下面,我们要做一个简谐振动的例题,先看题目要求。 例一、已知振动方程,求t=8秒时,位移、速度及加速度各位多少?绘制振动曲线和速度、加速度曲线。 题目有两个小题,先看第一问,计算位移、速度及加速度。 准备好了吗,现在请你跟我一起做: 第一步:启动matlab程序,进入程序主窗口; 第二步:在命令窗口中输入下列程序代码: >>t=8;%赋值 >>y=2*cos(3*t+pi/5);%确定y、t的涵数关系 >>v=-2*3*sin(3*t+pi/5);%确定v、t的涵数关系 >>a=-2*3*3*cos(3*t+pi/5)%确定a、t的涵数关系 第三步:按Enter,可得运算结果。 感觉怎么样?就是这么简单。 下面解决题目的第二问。在命令窗口中直接输入下列程序代码,绘制振动曲线: >>clc;%清除指令窗 >>t=0:0.001:10;%确定时间变量的变化范围及步长 >>y=2*cos(3*t+pi/5);%确定y、t的涵数关系 >>v=-2*3*sin(3*t+pi/5);%确定v、t的涵数关系,pi表示圆周率 >>a=-2*3*3*cos(3*t+pi/5);%确定a、t的涵数关系 >>plot(t,y,'-',t,v,'-.',t,a,':')%绘制图形 %说明:单引号内的符号表示所画曲线的线型,如-(实线)、-.(点划线)、:(虚线)、——(破折线)、p(五角星线)、h(六角形行)等。 按Enter,可得运行结果。 相信现在的你对MATLAB已有了感觉... 2 振动的合成 2.1 讲授内容 实际生活中,一个系统往往会同时参与两个或更多的振动。例如悬挂在颠簸船舱中的钟摆,两列声波同时传入人耳等。一般的振动合成显然是比较复杂,下面仅讨论几种间单情况的简谐振动合成。 一、同方向同频率简谐振动的合成 若两个同方向的简谐振动,频率都是,它们的运动方程分别为 因振动是同方向的,所以这两个谐振动在任意时刻的和位移应在同一直线上,且等于这两个振动位移的代数和,即 合位移仍为简谐振动 二、两个同方向不同频率简谐振动的合成拍 如果两个简谐振动的振动方向相同而频率不同,那么合成后的振动仍与原振动方向相同但不再是简谐振动。现设两简谐振动的振幅都为A,初相位为零,它们的振动方程分别为 合成振动方程为 若两个分振动的频率都较大且其差很小时,即,合振动可看作为振幅随时间缓慢变化的近似谐振动,振幅随时间变化且具有周期性,表现出振动或强或弱的现象,称拍,变化的频率称拍频,变化的振幅为 变化的频率为 三、相互垂直的简谐振动的合成李萨如图 如果两个简谐振动分别在x轴和y轴上进行,他们的振动方程分别为 合成后,可得质点的轨迹为椭圆方程 若两分振动有不同的频率,且两频率之比为有理数时,则合成后的质点运动具有稳定、封闭的轨迹。称其为李萨如图形。 2.2 程序编写 我们已经在第一讲中体验了matlab的编程,可是你一定会生出这样的问号,辛辛苦苦在命令窗口写的一大堆代码怎么不保留?不用担心,matlab程序和其他编程工具一样,也有专门的文件,称m文件,文件名形式为“文件名.m”。你可以用matlab自带的编辑器来输入你的程序代码,当然你也可以用其它编辑器或最经济的文本编辑器,不过别忘记添加文件名的后缀“.m”。 下面,请跟我一起用m文件编辑器来编写matlab程序。 例题:两个振动方向相同而频率不同的简谐振动方程分别为 , 合成后的方程是 ,请用matlab程序描述合成波和拍频现象。 编程: 第一步:点击matlab图标,打开程序窗口。 第二步:选file—new—m-file,打开编辑器。 第三步:在编辑器中输入下列程序代码: t=1:0.001:10;%设定时间的范围从1到10 a1=input('振幅1=');w1=input('频率1=');%要求用户输入简谐振动1的状态参量 a2=input('振幅2=');w2=input('频率2=');%要求用户输入简谐振动2的状态参量 y1=a1*cos(w1*t+phi1);%简谐振动1的运动方程 y2=a2*cos(w2*t+phi2);%简谐振动2的运动方程 y=y1+y2;%简谐振动1、2的合成谐振3 subplot(3,1,1),comet(t,y1),ylabel('y1')%绘制谐振1、2、3的振动曲线 subplot(3,1,2),comet(t,y2),ylabel('y2') subplot(3,1,3),comet(t,y),ylabel('y'),xlabel('t') sound(y1);pause(2), sound(y2);pause(2),sound(y) 注意:拍频现象要求两个振动的频率都很大,且相差很小。 第四步:按工具栏上的“保存”按钮将程序保存在当前目录下(可以重命名),再按F5运行此程序进入命令窗口根据窗口上的提示输入数据,每次输完一个数据按"Enter"结束, 据所输入的数据(在命令窗口中) 4 阻尼振动 4.1 讲授内容 简谐振动是一种无阻尼振动,而实际上,任何振动物体都要受到阻力的作用,这种振动叫阻尼振动。阻尼振动有摩擦阻尼和辐射阻尼两种。实验指出,当物体以不太大的速率在粘性介质中运动时,介质对物体的阻力与物体的运动速率成正比,方向与运动方向相反,即: 式中叫做阻尼系数,它与物体的形状、大小及介质有关。对弹簧振子,在弹性力及阻力的作用下,物体的运动方程为 令,这里的为无阻尼时振子的固有角频率,称为阻尼因子,代入上式后可得在阻尼作用较小时,即,此微分方程的解为 其中此时阻尼振动的周期为当时,这种阻尼振动称为欠阻尼;当时,称为过阻尼;当时,称为临界阻尼。 4.2 程序编写 高数在物理上的一项重要应用就是微分方程。在以前的学习中,我们大多解的是一阶微分方程,而对二阶的总是避而远之。也许在学高数时,解二阶微分方程给你留下了痛苦的回忆,此时如果让你编写一个二阶微分方程的程序(如阻尼振动),你是否有种相逃的感觉?Wait amoment!上帝是青睐你的。Matlab只要用一个函数ode23就能解决你所有的问题。那我们现在就开始学吧!ode23函数可以用来解微分方程组,但只能是一阶的。所以对于二阶的微分方程,我们可以将其分解成两个一阶的方程来解。而且使用此函数,必须提前编写一个ode文件(ode文件)。 ode文件是一种函数M文件,即:在m-file编辑器中,文件必须以function开头,后面跟的函数名必须与将来保存的M文件名一致。函数文件第一句的具体形式为:functiony=average(x) 其中为y输出变量名,x为变量,average为函数名,保存时文件名必须是average.m。当函数有一个以上的输出函数时,输出参数包含在方括号里,变参包含在圆括号里,即函数文件的第一行的具体形式为: function[out1,out2,…]=average(in1,in2,…) 例:计算数组元素的平均值 解:functiony=average(x) y=sum(x)/length(x)注:上下两式等号前的符号"y"必须相同 ),再调用,其调用格式为:ode23('FUN',TSPAN,YO)其中,FUN为字符串,表示微分方程的ode文件名,TSPAN=[TO,TFINAL]表示积分区间,YO为初始条件。此函数表示在初始条件下Y0从T0到TFINAL对微分方程y'=F(t,y)进行积分。函数在图形窗口返回具体的数值解,则可以采用以下的格式: [T,Y]=ode23('FUN',TSPAN,Y0) 这样在T向量返回积分点,Y返回对应积分点的积分函数值。 例:编写m-file描述物体作阻尼振动的振动曲线,分欠阻尼、过阻尼和临界阻尼三种情况。 解:首先将阻尼振动的微分方程 分解为一阶微分方程:令 则原方程化为 打开m-file编辑器, 在其中编写ode文件为 functionf=zuni(t,x,flag,beita,wo); f=[x(2); -2*beita.*x(2)-wo.^2*x(1)]; 保存文件名为zuni.m 另外打开一个新m-file,在其中编写程序代码: beita=input('欠阻尼系数p='); wo=input('固有频率wo(pwo)='); [t,x]=ode23('zuni',[0:0.001:5*pi],[6,8],[],beita,wo); subplot(3,1,2),plot(t,x(:,1),'b'),title('过阻尼')%取x(1),绘制t-x(1)位移曲线,兰色 beita=input('临界阻尼系数p='); wo=input('固有频率wo(p=wo)='); [t,x]=ode23('zuni',[0:0.001:5*pi],[6,8],[],beita,wo); subplot(3,1,3),plot(t,x(:,1),'g'),title('临界阻尼')%取x(1),绘制t-x(1)位移曲线,绿色然后保存(如保存其名为zunizhend.m), 再按F5运行。移至Matlab主窗口,输入数据, 按Enter键即得振动曲线 感觉如何?相信你通过以上的学习,已经揭开了编程的神秘面纱了.Goon! 5 受迫振动共振 5.1 讲授内容 一、受迫振动 振动系统在周期性的外力作用下,其所发生的振动称为受迫振动,这个周期性的外力称为策动力。假设策动力有简单的形式:,为策动力的角频率。由于同时受到弹性力和阻力的作用,物体受迫振动的运动方程为 令,,则上式可写成 式(1) 在阻尼较小的情况下,上述微分方程的解为 此解表示受迫振动是两个振动的合成。解的第一项为减幅振动,它随时间很快衰减,而第二项为一个稳定的等幅振动。一段时间后,第一项衰减到可忽略不计,所以受迫振动的振动表达式为 将此式代入式(1)可求得 式(2) 二、共振 由式(2)可知,稳态受迫振动的位移振幅随策动力的频率而改变。当策动力的频率为某一特定值时,振幅达到极大值。由式(1)利用求极值的方法可得振幅达到极大值时的角频率为 振幅的最大值为 可见,在阻尼很小()的情况下,若策动力的频率近似等于振动系统的固有频率,位移振幅将达到最大值。这种现象就称为位移共振。用类似的方法可得,当策动力的频率正好等于振动系统的固有频率时,速度夫达到最大值,称之为速度共振。即:在小阻尼的情况下,当策动力的频率正好等于振动系统的固有频率时,振动系统的振幅最大,这种现象就称为共振现象。 5.2 程序编写 在上节我们学会了如何用Matlab编写阻尼振动的程序,这节我们主要编的是受迫振动的。由于受迫振动的方程只是在阻尼振动的方程上加了一个策动力F,所以二者的编程过程极其相似。相信通过这次的巩固,你以后就可以对这方面的编程更加得心应手了。例:弹簧振子在策动力、弹性力和阻尼力的作用下做受迫振动,其振动方程为 令,,则上式可写成 编写m-file描述物体作受迫振动的振动曲线,并讨论共振现象()。 解:同样先将受迫振动的微分方程分解为一阶微分方程:令 则原方程化为 打开m-file编辑器, 在其中编写ode文件为 functiony=shoupozd(t,x,flag,f,wo,w,beita) y=[x(2); f*cos(w*t)-wo^2*x(1)-2*beita*x(2)]; 保存文件名为shoupozd.m。 另外打开一个新m-file,在其中编写程序代码: f=input('单位质量物体所受的最大策动力fo=');%输入函数所需的参数 w=input('策动力的频率w='); wo=input('振动物体的固有频率wo='); beita=input('阻尼因子beita='); [t,x]=ode23('shoupozd',[0:0.001:10],[6,8],[],f,w,wo,beita);%调用ode23,[0:0.001:10]为t的积分区间, %[6,8]为初始条件(这里只是任取的),即x=6,x'=8,[]说明以后是输入参数,f,w,wo,beita是参数名,其顺序必须与所调用的%ode文件的参数顺序相同 plot(t,x(:,1))%取x(1),绘制t-x(1)位移曲线 xlabel('t') ylabel('x') title('受迫振动') 然后保存其名为shoupozdong.m, 再按F5运行。移至Matlab主窗口,输入数据, 按Enter键即得振动曲线 从图中我们可以看到当时,开始的一段时间内,振幅缓慢减小,直到达到稳定状态,振动曲线变成一余弦曲线,振幅不再变化。而当,振动系统的能量得到了最大的补充,产生了共振。 我们只需在命令窗中输入shoupozdong就可以运行它,此次在输入数据 时,让即得共振的振动曲线. 我们可以很明显的看到,产生共振的系统的振幅渐渐增大。 Well,加上图的形象性,想必你对这节的学习在理论和编程上都没问题了吧。 6 非线性振动、混沌 6.1 讲授内容 现代科学技术研究发现,非线性是真实世界的普遍特性,非线性问题大量出现在自然科学、社会科学和工程科学中,并起着重要的作用。混沌的研究是20世纪物理学的重大事件,自从麻省理工学院的Lorenz教授在60年代进行了开创性的研究以来,已有更多的学者深入探索,逐步揭示了混沌运动的基本特征,即确定性中包含的非周期性和不可预测性,对初值的敏感性等等。 “混沌”译自英语中“chaos”一词,原意是混乱、无序,在现代非线性理论中,混沌则是泛指在确定体系中出现的貌似无则的、类随机的运动。简单地说,混沌理论所研究的是非线性力学混沌,目的是要揭示貌似随机的现象背后所隐藏的规律。 混沌的研究表明,一个完全确定的系统,即使非常简单,由于自身的非线性作用,同样具有内在的随机性。绝多数非线性动力学系统,既有周期性,又有混沌运动,而混沌即不是具有周期性和对称性的有序,又不是绝对的无序,而是可用种复杂的有序。总之,混沌是非周期的有序性。 例如,我们在学简谐振动时常用到的一种理想模型--单摆,在摆角很小的情况下,单摆做周期性的简谐振动,而在大摆角时就会出现混沌现象。 6.2 程序编写 单摆运动的微分方程为:,为摆长,为摆角。 (1)当较小时,运动方程可写为 (2)大角度单摆运动的微分方程为 编写m-file文件描述单摆在大角度和小角度的情况下的振动曲线()及相图() 解:step1.当较小时,先将此时的微分方程分解成一阶微分方程: ,令则原方程化为: 打开一个新的m-file,在其中编写ode文件为 functionT=danbaixfun(t,theta,flag,g,l) T=[theta(2); -g*theta(1)/l]; 保存文件名为danbaixfun.m。 step2.当为大角度时,同样先将微分方程分解成一阶微分方程: 令则原方程化为 另打开一个m-file,在其中编写ode文件为 functionT=danbaidfun(t,theta,flag,g,l) T=[theta(2); -g*sin(theta(1))/l]; 保存文件名为danbaidfun.m。 step3.再打开一个m-file,在其中编写程序代码,为了方便对比,我们将两种情况下的振动放在一起: %单摆在摆角较小的情况下作简谐振动其微分方程为ml*D(theta)^2=-mgtheta,l为摆长,theta为摆角 %编写文件描述单摆的振动曲线和相图 g=input('重力加速度g='); l=input('摆长l='); theta0=input('初位置的摆角theta(theta为小角度)='); [t,theta]=ode23('danbaixfun',[0:0.01:3*pi],[theta0,0],[],g,l);%调用ode23,[0:0.001:3*pi]为t的积分区间, %[theta0,0]为初始条件,[]以后是输入参数 subplot(2,2,1);plot(t,theta(:,1),'r'),xlabel('t'),ylabel('theta'),title('小角度振动曲线') subplot(2,2,2);plot(theta(:,1),theta(:,2),'b'),xlabel('theta'),ylabel('omega'),title('小角度相图') %单摆在摆角较大的情况下不再作简谐振动,其微分方程为ml*D(theta)^2=-mg*sin(theta),l为摆长,theta为摆角 %编写文件描述大角度单摆的振动曲线和相图 g=input('重力加速度g='); l=input('摆长l='); theta_0=input('初位置的摆角theta(theta为大角度)='); [t,theta]=ode23('danbaidfun',[0:0.01:3*pi],[theta_0,0],[],g,l);%调用ode23,[0:0.001:3*pi]为t的积分区间, %[theta_0,0]为初始条件,[]以后是输入参数 subplot(2,2,3);plot(t,theta(:,1),'r'),xlabel('t'),ylabel('theta'),title('大角度振动曲线') subplot(2,2,4);plot(theta(:,1),theta(:,2),'b'),xlabel('theta'),ylabel('omega'),title('大角度相图') 然后保存其名为danbai.m, 再按F5运行。 step4.移至Matlab主窗口,输入数据, 按Enter键即得振动曲线。 为验证混沌运动的无序性,我们重新输入一组数据, 得到另一 振动曲线, 比较第一次和第二次的曲线,可得单摆在摆角很小的情况下,其振动有规律可循,而在大角度时,振动呈无序状。为进一步说明问题,我们在输入一组数据(将小角度的振动初值改变,而大角度的振动初值只将初角位移加上0.001), 得到第三组振动曲线。 比较第二次和第三次的曲线,你是否会奇妙的发现,对于大角度振动,仅是0.001的细微差别具有迥然不同的结果,这就是混沌的无序性和队初值的敏感性。 7 平面简谐波 7.1 讲授内容 一、平面简谐波 振动状态的传播过程称为波。若波源作简谐振动,这时的波动即为简谐波。当简谐波传播时,介质中的各个质点都作简谐振动,若其波阵面是平面,就称为平面简谐波。因为在理想的无吸收的均匀无限大的介质中,同一波阵面上的各点振动状态相同,所以在研究平面简谐波传播的规律时,只要讨论与波阵面垂直的任意一条波线上的传播规律就可以了。 设平面简谐波沿轴正方向传播,波速为u。取任意一条波线为轴,并取O为即坐标原点。已知原点O处的质点作简谐振动,适当的选取计时零点可令其初相为零,故其振动表达式为 表示处质点离开其平衡位置的位移。考察波线上另一任意点P处的质点运动情况,P点的坐标为。若波是在理想的无吸收的均匀无限大的介质中传播,则P点处的质点将以相同的振幅和频率重复O点处的振动,但时间要晚一点。振动从O点传播到点P需时,因而O点时刻的振动状态在时刻传到点P。即使说,点P处质点时刻离开平衡位置的位移等于O点处的质点在时刻离开平衡位置的位移,即: 上式给出了波线上任一点处的质点位移随时间的变化规律,通常称为波的波动表达式。至于一般情形,即已知轴上某一定点的振动表达式为 则相应的在轴上传播的简谐波的波函数为 上式中负号对应简谐波向轴正方向传播,而正号对应向轴负方向传播的简谐波。 二、平面简谐波和简谐振动 波是振动状态的传播,振动的波源是产生波的必要条件。平面简谐波是弹性介质中大量质点参与的一种集体运动形式。即某一时刻,由大量偏离平横位置的质点组成波形图。此外,波是向前传播的,而波线上的每一振动点并不随波迁移,它们只在各自的平衡位置往复振动。将x=代入波函数即得处点的振动表达式: 其中 7.2 程序编写 在前面的学习中,我们重点讲了如何用Matlab解微分方程,但总体用的都是顺序结构,即按先后顺序逐条执行命令。你可能认为Matlab易学正是因为这一点,如果你真这么想,那你就犯了一个的大错。Matlab易学并不等于它功能弱,因而它理所当然具有循环、选择及其他语句。现在我们就通过距离子,让你更多的了解它吧! 例:一余弦波在弦上传播,其波函数为 式中和的单位为,t的单位为 1、试求其振幅、波长、频率、周期和波速。 2、分别画出对应和俩时刻弦上的波形图。 解:由已知的波函数求波动的特征量,我们一般采用比较系数法,由 上式说明此简谐波向正方向传播,将它与波函数的形式相比较得: ,, 且有: 接下来我们就运用循环和选择语句来编画波形图的这个程序。 打开m-file编辑器, 在其中编写程序代码: x=-0.25:0.001:0.25;%设定x的取值范围 fori=0:2%用循环语句令i分别取0,1,2 t=0.0025*i; y=0.002*cos(pi*5*x-200*pi*t);%此为时刻t的波函数 ifi==0;%用选择语句分别用不同的颜色线型画不同时刻的波形图 plot(x,y,'k-')%用黑色实线画t=0时刻的波形图 holdon%保存图形的命令,否则后一幅图会覆盖前一幅 gridon%绘制网格 elseifi==1;plot(x,y,'r--')%用红色虚线画t=0.0025时刻的波形图 elseifi==2;plot(x,y,'b-.')%用蓝色虚点线画t=0.005时刻的波形图 end%结束if语句 end%结束for语句 然后保存(如保存其名为bodong.m), 再按F5运行,即得波动曲线。 此时,你是否对“万事都有联系”这句话有了更深的理解呢?因为计算机编程的各种语言都有相似的地方,相信你通过Matlab的学习必会在编程这方面长进不少!
/
本文档为【MATLAB在物理中的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索