资源描述:
《matlab在计算物理课程教学中的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Matlab在计算物理课程教学中的应用——计算物理课程论文作者:万达徐雄李维张志强单位:江汉大学物理与信息工程学院B08071031摘要:介绍了高性能语言Matlab在计算物理课程教学中(蒙特卡罗模拟、数值运算、符号运算等)的一些应用。立用表明,Matlab功能强大、方便直观、节省时问,是计算物理课程教学的一个有效的辅助工具。关键词:Matlab计算物理教学1引言计算物理学是一门以计算机为工具,运用计算数学的方法、解决复杂物理问题的应用科学。Matlab是一种在工程计算领域广为流行的高性能语言。作为“高性能语言”,M
2、atlab通常只要一条指令就可以解决诸如矩阵运算(求行列式、求逆矩阵等)、解方程、作图、数据处理与分析、快速傅立叶变换(FFT)、声音和图像文件的渎写等操作,从而使人们从繁琐的“高级语言”(如Fortran、C等)的程序编写与调试中解脱出来,并且大大缩短程序开发的时间。因而Matlab已几乎成为理工科学生必须掌握的工具,也成为课堂教学中的一个有效工具。本文讨论Matlab在计算物理课程教学中的一些应用。2Matlab在蒙特卡罗方法中的应用在蒙特卡罗方法中,有一个基本问题,就是利用[o,1]均匀分布随机数实现任意给定分
3、布的随机数的抽样。Matlab不仅提供了[0,1]均匀分布随机数,而且其作图功能可方便地对各分布的样本绘出直方图,形象直观地对抽样结果进行检验。下面以中心极限定理为例说明。例1中心极限定理的检验。根据中心极限定理,若服从分布f(x)的随机数x的期望值和方差存在,记为E(x)=μ,D(x)=σ2,则由m个随机数xj(j=1,…,m)的平均值形成的随机数:所服从的分布g(y),当m→∞时,趋于一期望值为μ、方差为δ2m的正态分布N(μ,δ2m)。为了形象直观地说明和验证这个定理,我们编写如下Matlab程序(这里x取为[
4、0,1]均匀分布的随机数,m分别取为0、2、2、6.由于matlab的高性能,只要十几行指令即可比较满意地解决问题):clearall;m(1)=1;m(2)=2;m(3)=3;m(4)=6;t(1,:)='m=1';t(2,:)='m=2';t(3,:)='m=3';t(4,:)='m=6';fork=1:4fori=1:10000xsum=0;forj=1:m(k)xsum=xsum+rand;endy(i)=xsum/m(k);endsubplot(4,1,k);hist(y,0.02:0.04:0.98);y
5、label('N');title(t(k,:));endxlabel('y');程序运行结果如图1所示:图1中心极限定理的检验由图1可见,当m由1增加到6时,y所服从的分布越来越接近于正态分布。实际上,当m=1时,y的分布为分段常数;当m=2时,y的分布为分段一次函数;当m=3时,y的分布为分段二次函数;当m=6时,y的分布为分段五次函数。当m=6时,y的分布已非常接近于正态分布了。另外,由图1还可见,这四种情况下y的期望值不变(等于x的期望值),y分布的方差随m的增大而减小,符合定理的预言。3Matlab在数值运算
6、中的应用在数值运算中,常常涉及代数方程、常微分方程、偏常微分方程的数值解等问题。Matlab不仅提供了对这些方程求解的功能,而且利用其作图功能可方便地将大量的数据转换为直观的图像,给出一目了然的结果。下面以常微分方程的求解为例说明。例2二阶电路的数值求解。对图2所示的二阶电路,可列状态方程如下:该方程为常微分方程,可利用Matlab提供的常微分方程求解的功能求解。程序为:functionf=fun2(t,y);%y=[i;uc]f=[-11;-10]*y;%f=[-i+uc;-i]clearall;[t,y]=ode
7、45('fun2',0:0.1:10,[01]);plot(t,y(:,1),':',t,y(:,2),'-');xlabel('t');ylabel('i,uc');程序运行结果如图3所示(其中虚线为i,实线为uc)。由该例可见,Matlab可方便直观地进行数值求解。图3二阶电路的解4Matlab在符号运算中的应用利用Matlab的符号运算功能,还可以求出问题的解析解。我们知道,目前比较流行的电路仿真软件(如SPICE等)通常是以数值运算语言(如Fortran、C等)来编写的,故只能得到一些数值结果,而非解析结果,
8、为此,我们基于Matlab的符号运算功能,开发了一个能求得电路解析解的电路符号仿真软件”Circuit”[$]。下面举例说明该软件的功能。例3电路的解析求解。对图4所示的电路,可编写电路描述文件“example3.cir”如下:图4一正弦激励暂态电路,其中us=2202sin(100πt)VEXAMPLE3.TRANtsUs10220*sqrt