用MATLAB GUI开发向心力与角速度的演示试验界面原创毕业论文.docx
《用MATLAB GUI开发向心力与角速度的演示试验界面原创毕业论文.docx》由会员分享,可在线阅读,更多相关《用MATLAB GUI开发向心力与角速度的演示试验界面原创毕业论文.docx(15页珍藏版)》请在冰豆网上搜索。
用MATLABGUI开发向心力与角速度的演示试验界面原创毕业论文
用MATLABGUI开发向心力与角速度的演示试验界面
摘要:
向心力与角速度在中学物理教学中,占有着重要的地位。
由于资源的限制和学生在做实验时的盲目性,本文通过分析向心力与角速度的关系,合理的运用控制变量法,以小球在光滑桌面上做匀速运动为例,利用MATLABGUI模拟、设计和开发出向心力与角速度的交互式实验动画演示界面。
在教学中,用控制变量法和此界面进行交互,让学生对此知识的掌握更加深刻。
关键词向心力角速度控制变量法MATLABGUI
UsetheMATLABGUItoexploittheinterfaceofdemonstrativeexperimentofcentripetalforceandangularvelocity
Abstract:
Thecentripetalforceandangularvelocityoccupyanimportantpositioninphysicsteachinginhighschool,duetoschool’sresourceconstraintsandstudents’blindnesswhendoingtheexperiment,thepaperanalyzestherelationshipbetweencentripetalforceandangularvelocity,areasonableuseofthecontrolvariables,withasmallballmadeasmoothuniformmotiononthedesktop,forexample,usingMATLABGUIsimulation,designandcentripetalforceandangularvelocitydevelopedexperimentalanimation,interactiveinterface.Inteaching,thecontrolvariablesusedtointeractwiththisinterface,sothatstudentsmasterthisknowledgeismoreprofound.
Keywords:
CentripetalforceAngularvelocityControllingvariablesMATLABGUI
目录
1引言1
2问题分析1
3实验设计2
3.1总体设计2
3.2在M文件中实现动画演示3
3.3界面要实现的主要功能6
3.4上机制作(静态)界面6
3.5编写界面动态功能程序7
4界面的实际应用9
5总结10
参考文献11
谢辞12
正文附录13
1引言
向心力是基础力学中的重要概念,无论是在理论教学中,还是在工业中都占有着重要的地位。
这个力不像以前接触过的拉力、摩擦力、弹力那么的容易理解,因为它和角速度紧密联系在一起的,如果没有了角速度,向心力也就无从谈起了,既然角速度这么重要,那我们的重心就要放在这个量上。
角速度不和速度那样,速度的大小是标量,速度的方向是物体远动轨迹上的切线。
虽然角速度的大小也是标量,但是它的方向却满足右手螺旋定则,这就是难以理解向心力的地方。
在力学实验中需要采用现代化的教学手段千方百计地为学生提供观察物理现象的机会,提高学生的学习兴趣,培养学生思维水平和创新能力,但目前很多教学过程中只采用了简单文本投影,固定不变的flash动画演示和照本宣读的教学模式。
向心力与角速度的实验需要精密的仪器,例如,需要用光滑的桌面、光滑的小球、轻质的细绳等,而这有时会使实验变得困难。
在做实验前,好多老师只是照本宣读的给学生讲解向心力和角速度的关系,这样学生在做实验的时候就具有盲目性,再加上学生对实验不重视,学生就不能学到应有的知识,教学效果将会大打折扣。
但是把MATLAB引入力学实验,利用其可视化功能对力学实验现象比如向心力与角速度进行计算机模拟,再结合学生动手实验,就能够提高学生的学习效率与学习积极性。
随着计算机技术的发展,计算机模拟在现在物理教学研究中发挥越来越重要的作用,尤其是MATLAB软件的使用。
“数字信号处理”双语教学、毕业设计教学、物理教学等领域中都涉及到MATLAB的应用。
将MATLAB强大的科学计算与图形图像功能的完美结合将解决许多现实问题,所以MATLAB的计算与仿真应用到教学中有着非常重要的意义[1]。
2问题分析
在学习向心力以前,学生已经学习了匀速圆周运动,对匀速圆周运动有了一定的理解,知道描述匀速圆周运动快慢的物理量有线速度、角速度、周期、半径之间的关系。
向心力与角速度的关系:
(1)
从上式中可得到:
当物体的质量和做匀速圆周运动的半径不变时,向心力与角速度成正比,在此利用了控制变量法,即控制物体的质量和做匀速圆周运动的半径不变,改变物体的角速度来观察物体向心力的变化,或者改变物体的向心力来观察物体角速度的变化。
在此界面的设计中,置物体的质量和做匀速圆周运动的半径不变,均为0.5kg。
在做实验前,我们都有体会,那就是老师只是照着课本给我们讲一下向心力与角速度之间的关系,这样即枯燥又引不起学生的学习兴趣,或者老师只是给学生播放一些flash动画,在这些动画中物体所受的向心力和角速度是不能变化的,如果要变化,就得制作好几种动画,而这几种动画在播放的时候有没有连续性,很难从中得出向心力与角速度之间的这种正比关系。
这就需要把MATLAB引入力学实验,利用其可视化功能对力学实验现象比如向心力与角速度进行计算机模拟,再结合学生动手实验,就能够提高学生的学习效率与学习积极性。
3实验设计
3.1总体设计
本文的设计思路是,先通过MATLAB实现小球在细线的牵引下做匀速圆周运动的.m文件,然后通过GUI界面,实现对各个部分文件的调用并显示,以期达到直观显示的效果。
作为强大的科学计算软件,MATLAB提供了图形用户界面的设计和开发功能。
图形用户界面是包括窗口、图标、菜单、工具条等的用户界面。
MATLAB中的基本图形用户界面对象可分为:
用户界面控制对象(uicontrol)、下拉式菜单对象(uimenu)和内容式菜单对象(uicontextmenu)。
利用上述对象,可以设计出界面良好、操作简单、功能强大的图形用户界面。
通过问题分析可知,要设计出提高学生学习效率的交互式实验动画演示界面、要尽量减少人工的干预、即使学生不懂得程序,也可以方便的操作此界面、要使学生在使用此软件的时候感到简单、方便和高效性、要将动画和所得到的结果可视化。
就得遵循简单性、一致性、习常性原则。
被试验界面是以运动小球为例进行的,总的设计流程图如下:
在程序执行的过程中,都要调用动画子函数,动画的MATLAB语言实现又占有很大的篇幅,因此把动画的MATLAB语言实现放在了总体设计方案的第一步,此算法的实现对后面的界面设计打下了基础,也为界面的实现提供了前提条件。
3.2在M文件中实现动画演示
在实验设计方案中给出了最优指派问题综合计算平台实现的5个步骤,即给出了平台实现的框架,但并不能用这些步骤来求解最优指派问题。
要实现此平台,就要逐步对这5个步骤加以解决。
在设计界面前,先要将所演示的动画编写在M文件中,并能正确运行。
在M文件编写的程序,当程序在运行的时候,小球运行的角速度是不变的,也就是小球是以更定的角速度在做匀周园速运动,此时设定小球质量和做匀速圆周运动的半径都为定值,所以小球所受的向心力也是不变的。
在M文件中实现此动画的部分程序如下:
text(0.6,0.9,'F=mrw^2m=0.5kgr=0.5m');
vel_slider1=get(handles.slider1,'value');%speed
set(handles.edit1,'string',sprintf('%3.0f',vel_slider1));
set(handles.edit2,'string',num2str(0.5^2*vel_slider1^2));
t=0:
0.1:
8*pi;
x=cos(t);
y=sin(t);
h0=line(x,y,'linestyle','-','color','k','linewidth',2);%画圆,半径为1
axisequal
axisoff
%接下来建立小球,小球的初始位置为(1,0)
h1=line('xdata',1,'ydata',0,'marker','o','markerfacecolor','r','markersize',25,'markeredgecolor','g');
x_line=0:
0.1:
1;%建立拉球直线的方程;其中x_line和y_line为直线的初始坐标;
y_line=zeros(1,11);
h2=line('xdata',x_line,'ydata',y_line,'linestyle','-','color','g','linewidth',2);
speed=0.01;%speed控制小球转速,
whileii<=n%建立球的旋转问题
set(h1,'xdata',x(ii),'ydata',y(ii));
ifx(ii)~=0
theta=atan2(y(ii),x(ii));%球旋转角度,在这里用到了atan2函数,这个函数很重要。
实现此动画的难点就是怎么样让小球动起来,其实动画生成原理很简单,就是利用人的视觉暂留效应,让不同位置的静止图像连续播放,就形成了动画,在MATLAB里要让静止的图像运动就必须给line的属性erasemode(擦除模式)赋值“xor”,这样先前的数据产生的图像就会随着新的数据产生的图形而被擦除它们重叠的部分,以此产生动画效果。
产生运动效果的难点在于如何求出图形的运动位移数据并将其赋值给line里的x,y。
这里小球和拉小球的细线的运动所需的数据即位移,均可有下列语句得到:
t=0:
0.1:
8*pi;
x=cos(t);
y=sin(t);
r=0:
0.1:
1;
theta=atan2(y(ii),x(ii));%球旋转角度,在这里用到了atan2函数,这个函数很重要。
x_change=r.*cos(theta);
y_change=r.*sin(theta);
drawnow%在建立动画的时候用到了drawnow函数和pause函数[2]
pause(speed);
ii=ii+1;
而赋值给x,y则用到set(h1,'xdata',x(ii),'ydata',y(ii));然后在其后面加一个drawnow命令就可以产生动画了,最终的效果如图1所示。
图1演示实验在.m文件中的实现
在.m文件中运行上述程序,就可以看见小球在细线的牵引下在光滑的桌面上做匀速圆周运动[2]。
3.3界面要实现的主要功能
通过问题分析可知,该界面用于演示向心力与角速度关系的教学模拟平台,所以该界面要尽量减少人工的干预、即使学生不懂得程序,也可以方便的操作此界面、要使学生在使用此软件的时候感到简单、方便和高效性、要将动画和所得到的结果可视化。
从以上的分析可以得出:
在界面打开的时候,小球应该是就静止不动的,也就是在没有按下“开始”按钮以前,小球是静止不动的、当按下“开始”按钮后,小球开始做匀速圆周运动,小球在做匀速圆周运动期间,如果没有人为的干预,小球会一直保持匀速圆周运动、在界面中还要有一个“滑动条”,这个按钮的作用就是连续的改变小球的运动角速度,并将小球运动的效果图及时的反映到界面中、界面中含有两个“编辑文本框”,一个用于输入或显示小球运动的角速度,另一个用于输入或显示小球所受的向心力。
运用控制变量法向这两个文本框输入合理的数据,就会得到小球对应的运动效果、此界面还要有一个“暂停”按钮,用于中止小球的运动、最后还要含有一个“关闭”此界面的按钮。
3.4上机制作(静态)界面
根据3.3中所述界面的主要功能可知,在用户图形界面区内合理的摆放所需要的组件,并在按钮的标签上对其所要实现的功能进行描述。
制作草图是界面设计的前期工作,根据界面要实现的主要功能,从使用者的角度画出界面的草图,并审视草图。
根据界面要实现的主要功能,该界面包括:
一个控件区域框,用于显示小球在不同角速度,或不同向心力时,在小球的质量和做匀速圆周运动的半径不变的条件下的动画;四个静态文本框,分别用于显示此演示实验界面的标题、滑动条上方的释义、小球运动时的角速度和小球在做匀速圆周运动时所受到的向心力;一个滑动条,用于控制小球在做匀速圆周运动时的角速度;两个编辑文本框,一个用于输入或显示小球运动的角速度,另一个用于输入或显示小球所受的向心力,这两个编辑文本框和滑动条三者是同步的,即当小球在角速度大小为
做匀速圆周运动时,滑动条位置处的角速度大小也为
,与此同时“角速度”下方的编辑文本框,所显示的数值也为
,那么“向心力”下方的编辑文本框,所显示的数值由
式决定。
当着三者中有一项的取值发生变化,那么其他两项也跟着变化,这也就体现了三者同步的效果,这也实现了控制变量法的思想,及控制一个变化时,看另外一个怎么样变化;三个触控按钮,第一个用于实验的开始,也让小球开始做匀速圆周运动。
第二个用于暂停实验,就是让小球由运动状态变为静止状态,并将小球置于开始运动时的初态。
第三个用于关闭此演示实验界面。
由以上论述可得该演示实验的(静态)界面如图2。
图2演示实验GUI开发界面草图
3.5编写界面动态功能程序
静态界面制作好之后,并不能使之运行,为了使鼠标单击某个按钮,并能做出预期的反应,就要对各个按钮编写驱动程序,这个驱动程序被称为该按钮的回调函数(Callback),回调函数的编写是界面设计中最关键的一步,直接关系到界面能否运行。
由于篇幅有限,在此只给出该计算平台部分按钮回调函数的实现
(1)滑动条的回调函数
在滑动条回调函数下面添加需要的函数。
关键是要有
vel=get(hObject,'value');
set(handles.edit1,'string',sprintf('%3.0f',vel));
set(handles.edit2,'string',num2str(vel_n));其中vel是滑动条位置处所对应的数值,在此界面中也就是小球运动时的角速度。
第二个和第三个语句将滑动条的value值分别显示在两个编辑文本框。
(2)“角速度”下方的编辑框的回调函数
str=get(hObject,'string');
val=str2num(str);
if~isempty(val)&(val>=1&val<=200)
set(handles.slider1,'value',val);
set(handles.edit2,'string',num2str(val_n));
第一条语句用于从此编辑框中获得输入的“角速度”。
第二条语句是将从编辑框中获得的字符串转化为对应的浮点数值,因为从编辑框中的得到的字符是字符串。
第三条语句是判断从此编辑框中输入的字符的范围。
(3)开始按钮的回调函数
vel_slider1=get(handles.slider1,'value');%speed
set(handles.edit1,'string',sprintf('%3.0f',vel_slider1));
set(handles.edit2,'string',num2str(0.5^2*vel_slider1^2));
h0=line(x,y,'linestyle','-','color','k','linewidth',2);
set(h2,'xdata',x_change,'ydata',y_change);
vel_slider1=get(handles.slider1,'value');
开始按钮的回调函数在界面的设计中占有着重要的地位,因为它控制着动画的开始,在编写回调函数的时候就属它占的篇幅最大。
第一条语句是从滑动条的句柄中获得小球做匀速圆周运动的角速度。
为了让“角速度”、“向心力”和滑动条同步,在此回调函数中用到了第二三条语句。
第四条语句用于创建动画的初始状态。
第五条语句用于播放动画,在播放动画的过程中用到了drawnow函数和pause函数,这两个函数是创建动画的关键。
(4)坐标轴的回调函数
h0=line(x,y,'linestyle','-','color','k','linewidth',2);
axisequal
axisoff
编写此回调函数的作用就是初始化界面和显示动画画面的区域。
(5)关闭按钮的回调函数
即在关闭按钮的回调函数后加close(gcf);就可以关闭窗口了。
保存后并运行,运行程序后会出现本文所描述的界面,刚开始的时候,在坐标轴区域只显示了如图1所示的静止图像,为了让小球做匀速圆周运动,就得给小球置一定的角速度,然后按开始按钮,这样小球就在细线的牵引下做匀速圆周运动,如图3,同时小球所受到的向心力也会显示在界面中。
图3向心力与角速度演示实验界面
从图3中可以看到,此试验界面中,小球的质量和做匀速圆周运动的半径固定不变,均为“
”,小球做匀速圆周运动的角速度为“
”,这里的角速度只是为了说明问题,是人为设定,而不是现实中真实存在的,那么小球所受到的向心力“
”是由
式求得的,自然这里的“向心力”也不是现实中的,只是为了说明问题[3]。
4界面的实际应用
本文设计向心力与角速度演示实验界面的目的,主要是为中学生学习此知识点而服务的,在应用此软件之前,老师可以先给学生讲一下
式的含义,讲一些现实中的一些实例,让学生对向心力和角速度有一个潜意识的了解。
然后老师再定量的给学生讲解向心力与角速度的关系,在定量解释的时候,就该用到此界面了。
在用此界面的时候,先给学生讲明小球的质量和运动半径为定值,均为
,然后运用控制变量法操作此界面[4]。
先通过滑动条连续改变小球的运动角速度,同时观察小球所收到的向心力,可以看到:
当小球运动的角速度在连续变化的时候,小球所受到的向心力也在连续变化,它们的关系由
式决定。
改变小球运动角速度的方法还有一个,那就是直接在“角速度”的下框里输入角速度的值,当输入的角速度的值在“
”时,才会有效,因为在编写程序的时候,规定角速度的范围为
,如果输入的角速度的值超过此范围,或者输入的不是纯数字,那么程序就出现“
”的提醒字符。
同理在输入向心力的时候,向心力也有一个范围,如果输入的向心力的值超过此范围,或者输入的不是纯数字,程序也会出现超出范围的提醒字符。
在做了上述的工作后,然后让学生再去实验室做实验,这样模拟实验加动手实验,想必学生对此知识点的学习和掌握会事半功倍的,提高了学生的学习兴趣和学习效率。
5总结
本文对向心力与角速度的知识做了简单的介绍,合理的运用控制变量法,以小球在光滑做面上做匀速运动为例,利用MATLABGUI模拟、设计和开发出向心力与角速度的交互式实验动画演示界面。
在撰写论文的过程中,本文把重点放在了如何实现此交互式实验动画演示界面上。
因此文章用了较大的篇幅来介绍此界面的总体设计流程图、动画演示在.m文件中的正确运行、此界面的静态设计以及各个组件的功能、编写界面动态功能程序和界面在实际中的应用,最后在附录中给出了此演示实验在.m文件中的完整程序。
文章在界面的实际应用中,为了想方设法提高学生的学习效率,也渗透了一点教学设计的思想,由于知识和篇幅的限制,还有不妥的地方待改进,。
[参考文献]
[1]吴迪,刘军.基于MATLABGUI的大学物理交互式演示实验动画设计[J].大学物理实验,2010年,第1期:
53.
[2]罗华飞.MATLABGUI设计学习手记[M].北京:
北京航天航空大学出版社,2009.8:
191.
[3]华晋,尹金花.基于GUI的干涉衍射的实验教学研究[J].大学物理实验,2011年,第1期:
80.
[4]宗节保,段柳云.基于MATLABGUI软件制作方法的研究与实现[J].电子设计工程,2010年,第7期:
56.
谢辞
值此本科学位论文完成之际,首先要感谢我的指导老师,也是我们的任课老师王老师。
王老师从一开始的论文方向的选定,到论文提纲的建立,到最后整篇论文的顺利完成,都给了我非常耐心的指导。
他给我提供了大量收集资料的方法和建议,告诉我应注意的细节问题,细心的给我指出不足和错误的地方,多次修改我的论文,如果没有王老师,我的论文也不会这么顺利的就能够完成。
并且王老师对界面设计,尤其是功能键的设计有非常独到的见解,使我受益匪浅。
王老师诲人不倦的工作作风,一丝不苟的工作态度,严肃认真的治学风格给我留下深刻的影响,值得我永远学习。
在此,谨向导师王参军老师致以崇高的敬意和衷心的感谢!
正文附录
向心力与角速度演示实验在.m文件中的完整程序。
t=0:
0.1:
8*pi;
x=cos(t);
y=sin(t);
h0=line(x,y,'linestyle','-','color','k','linewidth',2);%画圆,半径为0.5米
axisequal
axisoff
%接下来建立小球,小球的初始位置为(1,0)
h1=line('xdata',1,'ydata',0,'marker','o','markerfacecolor','r','markersize',25,'markeredgecolor','g');
x_line=0:
0.1:
1;%建立拉球直线的方程;其中x_line和y_line为直线的初始坐标;
y_line=zeros(1,11);
h2=line('xdata',x_line,'ydata',y_line,'linestyle','-','color','g','linewidth',2);
n=length(t);
ii=1;
speed=0.01;%speed控制小球转速,
whileii<=n%建立球的旋转问题
set(h1,'xdata',x(ii),'ydata',y(ii));
r=0:
0.1:
1;%建立线的旋转问题,其中r为绳的径向取值
ifx(ii)~=0
theta=atan2(y(ii),x(ii));%球旋转角度,在这里用到了atan2函数,这个函数很重要。
x_change=r.*cos(theta);
y_change=r.*sin(theta);
set(h2,'xdata',x_change,'ydata',y_change);
else
;
end
drawnow%在建立动画的时候用到了drawnow函数和pause函数
pause(speed);
ii=ii+1;
end