Matlab在物理学中的应用
Matlab是一种广泛应用于
计算及数值
领域的功能强大的计算机高级语言,它集科学计算、图象处理于一身,并提供了丰富的图形界面设计方法。它的特点是语法结构简单,数值计算高效,图形功能完备,特别适合于非计算机专业的编程人员完成日常数值计算、科学实验数据处理、图形图象生成等通用性任务时使用,因而在统计、信号处理、自动控制、图象处理、人工智能及计算机通信等领域得到了广泛应用。现在,我们将介绍Matlab在物理学中的一些应用。
首先,我们来介绍Matlab在动力学中的应用。
动力学的最基本的公式为F=m*a,其中m是物体的质量,a是物体的加速度。如何验证上述公式的正确性呢?我们设计了一些实验,得到了在质量一定的情况下a与F的一些实验数据。而根据实验数据来确定a与F的关系,可以用Matlab中的拟合曲线来完成。
实例如下:我们测得当m=0.45kg时,a与F的对应关系如下表所示:
F (N)
0.3726
0.7453
1.1157
1.4994
1.8566
2.2271
a (m/s^2)
0.0845
0.1690
0.2530
0.3400
0.4210
0.5050
我们在Matlab中输入以下指令:
F=[0.3726 0.7453 1.1157 1.4994 1.8566 2.2271];
a=[0.0845 0.169 0.253 0.34 0.421 0.505];
p=polyfit(F,a,1);
i=0:0.1:2.5;
q=polyval(p,i);
plot(F,a,'r.',i,q,'b-')
axis([0 2.5 0 0.6])
xlabel('F 单位:N');
ylabel('a 单位:m/s^2');
我们可以得到如下视图:
上图中蓝色的直线是F与a线性拟合曲线,我们看到实验数据点(F,a)几乎全分布在拟合曲线上,由此我们可以大致得到结论,F与a呈线性关系。延长拟合曲线可发现其大致过原点,由此我们可以推断F与a成正比关系,直线的斜率即为物体质量的倒数。
再次,我们来看看Matlab在绘制简谐运动图像上的应用。
简谐运动方程为d^2(x)/d(t^2)+w*x=0,其解为x=Acos(wt+i)。所以对于某一特定的简谐运动方程的解,我们总可以绘制出相应的图像来直观地观察它的性质。
实例如下:绘制出x=2cos(3t+1)的图像。
我们可以在Matlab中输入以下指令:
t=-2:0.1:4;
x=2*cos(3*t+1);
plot(t,x)
axis([-2 4 -3 3])
grid on
我们可以得到如下视图:
从上幅图中,我们可以很直观地了解到简谐运动的周期性这一特点,而且还可以观察到它的振动幅度和振动频率。
接着,我们再来看看Matlab在电磁学中的精彩表现。
电势分布问题在电磁学中占有很重要的地位,在求解电场分布时,如果事先知道了电势的空间分布,那么问题将会简单很多。电势的函数表达式通常比较复杂,难以在脑海中形成物理图像,而Matlab则可以绘制出电势的空间分布图,以帮助我们直观地建立物理图像。
实例如下:在xoy平面上x=2, y=0处有一正电荷,x=-2, y=0处有一负电荷,计算两点电荷电场中电势的空间分布。
我们可以在Matlab中输入以下指令:
[x,y]=meshgrid(-5:0.2:5,-4:0.2:4);
z=1./sqrt((x-2).^2+y.^2+0.01)-1./sqrt((x+2).^2+y.^2+0.01);
mesh(x,y,z)
我们可以得到如下视图:
mesh是三维网格作图命令,mesh(x,y,z)画出了每一个格点(x, y)上对应的z值(电势)。
我们可以在图中清楚地看到电势在点(2,0,0)和(-2,0,0)处取得最值。
还有,有时我们在讨论物理问题时,特别想弄清楚物体随时间变化的运动趋势或轨迹,这时就要借助Matlab的动画表现形式了。
实例(1):已知质点在平面上同时参与x、y方向的简谐振动x=3*sin(5*pi*t+pi/4),y=2*sin(4*pi*t+pi/6). 绘制出质点在平面上的运动轨迹。
我们在Matlab中输入以下指令:
t=0:0.01:20;
A1=3;A2=2;wx=5*pi;wy=4*pi;
phi1=pi/4;phi2=pi/6;
x1=A1*sin(wx*t+phi1);
y1=A2*sin(wy*t+phi2);
comet(x1,y1)
我们可以得到如下动图:
程序动态地绘制了质点的运动,绘制结束后质点留下的轨迹如上图所示。
实例(2):演示行波z=sin(kr+ωt)的传播过程。
我们在Matlab中输入以下指令:
[x,y]=meshgrid(-8:0.1:8);
r=sqrt(x.^2+y.^2);
for t=1:20
axis([-8 8 -8 8 -8 8]);
hold on
z=sin(pi*r-0.2*pi*t);
mesh(x,y,z);
f(t)=getframe;
cla;
end
我们可以得到如下动图:
我们从上面动画中看到了横波形象化的传播过程。
最后,再举一例电磁学中Matlab的应用。关于带电粒子在均匀电磁场中的运动问题从高中到大学我们一直在研究,如今学习Matlab后,我们不仅能够求解复杂的粒子运动问题,甚至还能画出粒子的运动轨迹。
实例如下:设带电粒子质量为m,带电量为q,电场强度E沿y方向,磁感应强度B沿z方向,画出粒子的运动轨迹。
先编写如下M函数文件:
function ydot=ddlzfun(t,y,flag,q,m,B,E)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
ydot=[ y(2);
q*B*y(4)/m;
y(4);
q*E/m-q*B*y(2)/m;
y(6);
0];
end
再编写解微分方程的主程序:
q=1.6e-2; m=0.02;B=2; E=1;
[t,y]=ode23('ddlzfun',[0:0.1:20],[0,0.01,0,6,0,0.01],[ ],q,m,B,E);
plot3(y(:,1),y(:,3),y(:,5),'linewidth',2);
grid on
xlabel('x'); ylabel('y'); zlabel('z');
我们可以得到如下视图:
我们研究时可以采用不同的初始条件和不同的参量观察不同的现象.
若令E=0,B=2,则所得结果如下所示:
Matlab功能如此强大,确是我们研究学习时的好助手,我们要在学习过程中积极运用Matlab,以使我们的学习变得简单又有趣。