常 建,丁智勇
(阜阳师范学院 物理与电子科学学院,安徽 阜阳 236041)
MATLAB仿真李萨如图形小议
常 建,丁智勇
(阜阳师范学院 物理与电子科学学院,安徽 阜阳 236041)
近年来,MATLAB因其具有很好的数据处理功能及强大的绘图功能而在各个领域得到广泛应用。有很多学者已经、正在、可能将来还会做MATLAB仿真李萨如图形的实验。然而笔者在做该实验时,却发现强大的MATLAB软件在做该实验时,却显得有些牵强。
MATLAB;仿真;李萨如图形;牵强
1.1 MATLAB简介
MATLAB是Matrix和laboratory的前三个字母的组合,因此,又有“矩阵实验室”之称。它起初是由美国新墨西哥州大学计算机主任Cleve Moler编写的fortran子程序库接口程序,目的是方便学生在线性代数中的运算。经过近三十年的研究和不断的完善,它已由当初的“矩阵实验室”发展成为一种有广泛应用前景的,全新的计算机高级语言[1]。
数据的可视化是MATLAB的一项重要功能,可视化方法包括二维图和三维图。在仿真李萨如图形中主要用到的是二维图。
1.2 李萨如图形合成实验
当一个质点同时参与互相垂直的两个简谐振动时,质点的位移是两个振动位移的矢量和。在一般情况下,质点在平面上作曲线运动,不能形成封闭的曲线,只有当两个分振动的频率成整数比时,合振动的轨迹才是稳定的封闭曲线,这种曲线称为李萨如图形[2]。
李萨如图形的合成实验在一般理工科学校都会开设。作为一个基础实验,实验设备比较简单,主要包括信号发生器、示波器。并且在实验过程中可以训练学生对示波器界面的掌握及操作。
随着科技的发展,计算机的应用。很多理工科学校正在逐步开设计算物理或者仿真物理这一学科。由于程序编写简单,物理实验易做。MATLAB仿真李萨如图形的实验在很多理工科学校是作为物理实验与计算机仿真的样例出现在教材中的。
2.1 笔者的仿真实验
笔者在中国知网搜索MATLAB仿真李萨如图形的相关文章[3-6]。这些文章中应用MATLAB仿真的李萨如图形生动、形象、直观,尤其是在频率较大时得到的图形要比用示波器得到的图形稳定性好。笔者也带着崇拜的心情将MATLAB仿真李萨如图形的实验用 MATLAB7.0软件又重新做了一遍。却发现,低频时的仿真效果确实很好,高频时的实验结果却让笔者意想不到。以横纵坐标轴上波的叠加频率为2∶1、相位差为0的两列波的叠加来谈一下。笔者的程序为:
相比于文献[3]的程序有一点改动,但没有实质上的改进,只是输入方便了一些。当笔者输入“wx=2,tn=0.02”时,和文章中的图形一样为李萨如图形;当笔者输入“wx=200,tn=0.02”时,得到的图形竟然如图(1),这显然不是李萨如图形;当笔者输入“wx=500,tn=0.02”时,图形又变化成了图(2),这也不是李萨如图形。
我们看到,随着横纵坐标轴上波的频率(频率比值不变)的增大,“李萨如图形”发生了变化。我们还知道,在实验室里,信号发生器的频率一般是以千赫为单位的,然而在本实验中,横纵坐标波的频率还不足1kHZ,合成的形状已经完全偏离了李萨如图形的模样。为什么会有这样的实验结果,这是值得我们思考的问题。也是仿真实验老师做仿真实验时应该注意的问题。
2.2 对实验现象的解释
2.2.1 第一个问题:大频率李萨如图形为什么会发生偏离?
实际上,在这篇文章的开篇笔者已经告诉读者“李萨如图形”发生偏离的答案了。MATLAB软件,说白了就是“矩阵实验室”,它对数据的处理是以矩阵形式展开的。我们可以用一个命令“whos x”,将程序运行时的x变量的矩阵名称、矩阵元素、占用的字节,和数据格式调出如下:
可以看出,MATLAB对数据的描述是按照矩阵元素的每一个孤立的数据来画图然后连接在一起,并且默认情况下,点与点之间用蓝色线连接起来,这时plot函数相当于line函数。
例如,做余弦函数图形的命令:x=0:0.01:2*pi;y=cos(x);plot(x,y)。实际上,这条线是由629个点组成的,而不是一个余弦曲线。点与点之间是直线相接,只不过点很多将余弦函数曲线微分化了,每一段直线合在一起,看起来似一个余弦函数图形。如果把程序改作:x=0:1:2*pi;y=cos(x);plot(x,y),即步长换作1做出的图(3)为7个点的余弦曲线,读者朋友可以清楚的看出这不是余弦曲线。
上面的例子抛砖引玉,目的在于使读者理解李萨如图形发生偏差的实质。李萨如图形看起来发生了偏差,而事实上并没有发生偏差。这一点正好比上面的例子,本不是余弦曲线却看起来似余弦曲线。以图(1)为例,笔者再把李萨如图形重做一次,把语句“plot(x,y)”换作“plot(x,y,'.g')”,即消除掉点之间的连线,图(1')即是间断的点构成的李萨如图形。
至此,可能有读者会问,我们看到频率稍大时,图形上蓝色区域是什么呢?那只能是点之间的连线了。为了看出是点之间的连线,只需画出两个点。笔者在程序后面加了两句:
画出两个点,并用洋红色标出,如图(4)。x(5000),y(5000)分别是x,y矩阵中的第5000个元素;同样x(5001),y(5001)是x,y矩阵中第5001个元素。由图像可以看出这两个矩阵中相邻的元素在作出的图形上却不是相邻的。
我们返回到函数来看,x(5000)和x(5001)两个数字相差应为cos(wx*tn)。此处,wx=200,tn=0.02,于是 wx*tn=4>π。那么,反映在余弦函数图形上就相差了半个周期还要多,画在图形上当然不可能是相邻的了,即用MATLAB作出的李萨如图形是不连续的。而这时再用plot函数常规作图,点与点之间的蓝色连线势必占据一定的区域。
然而用示波器作出的李萨如图形是一个个点打出来的,是连续的。这也就是说MATLAB作出的图形跟示波器描绘的李萨如图形性质上就不是同一个概念。如何改进使图形曲线成为连续的呢?这是我们要思考的第二个问题。
2.2.2 如何改进使图形曲线成为连续的呢?
为了解决这个问题,即达到图形连续的要求,我们设想只要wx*tn足够小,就能使画出的两个点相邻——连续。我们知道,在实验室里,信号发生器的频率可以很大。因此,我们只能把tn设置小。如果把tn缩小一个量级,再看两点的位置如图(5),两点之间的位置已经很接近了。并且在tn缩小一个量级后,中间大片区域的蓝色线条也几乎消失了。
从数学上来讲这时两点之间的连线跟该两点处李萨如曲线的切线斜率很接近了,即图形已经接近连续了。我们继续降低tn,令tn=0.001,图形上蓝色线条已经消失,两点虽离得很近。但距离还是有的,图形还没有达到连续,于是再次降低tn,直到tn=0.00005时,出现在图像上的两点才可以看做一点。但是这时才刚好达到wx*tn=0.01,这也就是我们用MATLAB作图所要求的一般精度。我们再来看一下x矩阵的参数
这时,x和y矩阵中的元素已经达到了4百万个,字节数也到达到3千2百万。到此,我们设置wx=200Hz,tn=0.00005可以作出连续的李萨如图形了,但是计算机运行的时间明显变长。再降低tn的值,计算机就会显示“out of memory”。
读者请注意,以上我们还只是在做wx=200Hz的李萨如图形的仿真,假如说我们要做wx=10kHZ的李萨如图形的仿真,可以算一下,如果仍然要求wx*tn=0.01的精度的话(这个精度一点都不高),应该有tn=0.000001,这时x、y矩阵中应有2亿零1个元素,占16亿零8个字节,这时x和y矩阵中纯元素占用的内存为3G。可想而知计算机内存要达到多大才能处理这么庞大的数据(这里的数据是推算出来的,因为在这个精度下2G内存的计算机早已显示“out of memory”了)。
因此,我们有理由相信,强大的MATLAB软件可以做很复杂、很强大的运算,但是目前计算机内存却还达不到这个水平,笔者在做仿真实验时,在2G内存计算机中当tn=0.00001时,运行该程序就会出现“out of memory”。也就是说笔者的计算机最大只能做到wx=1000的李萨如图形。而实验室中这频率量级的波很小。所以,笔者认为对于“MATLAB仿真李萨如图形”的说法不妥,换做“MATLAB演示李萨如图形”或者“MATLAB模拟李萨如图形”较为合适。尤其是大频率信号李萨如图形的产生更应该成为模拟或者演示。
本文结合对MATLAB“仿真”李萨如图形中遇到的问题,从计算机硬件设备角度分析了李萨如图形的合成,尤其是稍大频率的李萨如图形合成中矩阵元素的个数,字节数之大。得出大频率李萨如图形仿真实验达到示波器图形连续的效果几乎不可能。因此,用MATLAB描述李萨如图形,说成模拟或演示更合适。
[1]常 建,王 丽,丁智勇.MATLAB动画演示机械波传播中质点不随波迁移[J].科教导刊,2011,(5)(下旬刊):74-76.
[2]潘文玲.李萨如图形的研究[J].物理通报,1997,(1):5-6.
[3]石 涵.用MATLAB研究李萨如图形及其讨论[J].物理与工程,2009,19(1):64-67.
[4]黄 光.基于MATLAB的李萨如图形演示及其应用 [J].中国科技信息,2008,(2):85-87.
[5]贲进柱.广义李萨如图形的MATLAB程序设计与若干结论[J].青海大学学报,2006,(4):80-84.
[6]刘 慧,王玉连,李 勇,等.MATLAB在简谐振动的合成教学中的应用[J].科技信息,2010,(20):434-437.
Discussion on Simulation Based on MATLAB of Lissajous Figures
Chang Jian,Ding Zhiyong
(1.School of Physics and Electronic Sciences,Fuyang Teachers College,Fuyang 236041,China)
In recent years,As the MATLAB has the very good data processing function and powerful drawing function that it was widely used in various fields.Many scholars did,or are doing,or maybe will also do the simulation on the MATLAB of lissajous figures.But in this experiment,the author found the powerful MATLAB seems so shrivelled.
powerful MATLAB;simulation;Lissajous figures;shrivelled
O45
A
1673-1794(2011)05-0035-03
常 建,男,阜阳师范学院物理与电子科学学院本科生;丁智勇,男,阜阳师范学院物理与电子科学学院教师。
安徽省质量工程项目(20100634);阜阳师范学院2010质量工程项目(2010CXSYQ02);阜阳师范学院2011质量工程项目“高中物理科学探究典例开发研究”
2011-06-13