输入 x=[1 2 3 4 5 6 7 8 9] 结果为
x= 1 2 3 4 5 6 7 8 9
可以看出,矩阵的值放在方括号中,同一行中各元素之间以逗号或空格分开,不同行的元素以分号隔开。语句的结尾可用回车或逗号“,”,此时会立即显示运算结果;如果不希望显示结果,就以分号“;”结尾再回车,此时运算仍然执行,只是不作显示。
变量的元素用圆括号“()”中的数字(也称为下标)来注明,一维矩阵(也称数组)中的元素用一个下标表示,二维矩阵可有两个下标数,以逗号分开。在MATLAB中可以单独给元素赋值,例如,a(2,3)=6,x(2)=2等。 (三)元素群运算
把n×m矩阵中的每个元素当作对象,成群地执行某种运算,称为元素群运算。
元素群运算能大大简化编程,提高运算的效率,这是MATLAB优于其它许多语言的一个特色。
1、数组及其赋值
数组通常是指单行或单列的矩阵,一个N阶数组就是1×N或N×1阶矩阵。N阶数组可以表示N维向量。
在求某些函数值或曲线时,常常要设定自变量的一系列值,例如,设间隔n在x轴上从-3到3之间,每隔1取一个点,共7个点,这是1×7阶的数组。如果逐点给它赋值,将非常麻烦。MATLAB提供了两种给等间隔数组赋值的简易方法。
(1)用两个冒号组成等增量语句,其格式为x=[初值:增量:终值]。例如,键入 x=[-3:1:3]
得x=-3 -2 -1 0 1 2 3
当然增量为1时,这个增量值是可以略去的。
(2)linspace函数表述等距离分割,其格式为x=linspace(初值,终值,点数)。例如键入 x=linspace(-3,3,7)
得x=-3 -2 -1 0 1 2 3
在x轴上-3和3实际上是一个点,所以这个命令是把x轴分为7份。第三个变元也可以不写,此时取默认值100.
2、元素群的四则运算和幂次运算
元素群运算也就是单个元素之间的运算。为了与矩阵作为整体的运算符号相区别,要在运算
符“*”、“/”、“\\”、“^”前加一个点符号“.”,以表示进行元素群运算。矩阵的加减法本来就是对元素进行的,故不再有元素群运算符。参与元素群运算的两个矩阵必须是同价的(标量除外)。
下列的例子可以说明利用元素群运算的优越性。例如,要求列出一个三角函数表。这在MATLAB中只要一下两个语句
键入 x=[0:0.1:pi/4]’;[x, sin(x), cos(x), tan(x)]
第一条语句把数组x赋值,经转置后成为一个列向量。因为sin, cos,tan函数都对元素群有效,得出的都是同阶的列向量。第二条语句把4个列向量组成一个矩阵,进行显示。 得 0 0 1.0000 0 0.1000 0.0998 0.9950 0.1003 0.2000 0.1987 0.9801 0.2027 0.3000 0.2955 0.9553 0.3093 0.4000 0.3894 0.9211 0.4228 0.5000 0.4794 0.8776 0.5463 0.6000 0.5646 0.8253 0.6841 0.7000 0.6442 0.7648 0.8432 第一列是x,以下各列依次是sin(x), cos(x), tan(x)。 for语句
for语句的结构形式为
for k=初值:增量:终值 语句组A,end
即它把语句组A反复执行N次。在每次执行时程序中k值不同。可以算出循环次数为N=1+(终值—初值)/增量
用for 语句求三角函数表的程序为 for x=0:0.1:pi/4
disp([x, sin(x), cos(x), tan(x)]); end
所得结果将和上个例题中的答案相同。可以看出,MATLAB的元素群运算功能与一个for循环相当,由于它不需要每次检验表达式,运算速度比for语句快得多。for 语句可以嵌套使用。
四、MATLAB现用函数介绍
MATLAB语言的难点是函数较多,仅基本部分就有700多个,其中常用的近200个,要尽量多记少查,以提高编程效率,而且这是终生受益的。
1、线型分隔函数linspace(-xm,xm,n):在-xm与xm之间均分地产生n个点值,形成1×n元向量。其中-xm是初值,xm是终值,n是点数。
2、两个变量的标量指令 [X,Y]=meshgrid(x,y):将向量x,y变换为数组X,Y,这样就可以将两个一维向量生成两个二维矩阵。其中,数组X的各行是向量x的拷贝,总行数为y向量的元素个数;数组Y的各列是向量y的拷贝,总列数为x向量的元素个数。 例如x=-3:3; y=1:5;
[X,Y]=meshgrid(x,y) X=-3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 Y= 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 Z=(X+Y).^2
Z= 4 1 0 1 4 9 16 1 0 1 4 9 16 25 0 1 4 9 16 25 36 1 4 9 16 25 36 49 4 9 16 25 36 49 64
3、二维空间中绘制等高线函数 contour(X,Y,U,u):就是挑选出电势相等的点,并在向量u指定的值上绘制等高线。注意u取值要恰当。 四、实验编程
1.画单个点电荷的平面电场线与等势线
clear %清除变量
E0=8.85e-12; %真空电介质常数 C0=1/4/pi/E0; %归并常数
q=1.6*10^(-19); %元电荷电量 xm=2.5; %横坐标范围 ym=4; %纵坐标范围
x=linspace(-xm,xm); %横坐标向量 y=linspace(-ym,ym); %纵坐标向量 [X,Y]=meshgrid(x,y); %设置坐标网点 R=sqrt(X.^2+Y.^2); %点电荷到场点的距离 U=C0*q./R; %计算电势
u=1e-9:0.5e-9:5e-9; %等电势的电势向量 figure %创建图形窗口
contour(X,Y,U,u) %画等高线 hold on %保持图形
plot(0,0,'+','markersize',12) %画点电荷 axis equal tight %使坐标刻度相等
title('单个点电荷的平面电场线与等势线','fontsize',10) %显示标题 xlabel('r','fontsize',16) %显示横坐标 ylabel('E(U)','fontsize',16) %显示纵坐标 [Ex,Ey]=gradient(-U); % 计算场强
AE=sqrt(Ex.^2+Ey.^2);Ex=Ex./AE;Ey=Ey./AE;% 场强归一化,使箭头等长 quiver(X,Y,Ex,Ey,0.7,'b-') % 第五输入宗量 0.7 使场强箭头长短适中。
实验名称,原理,内容(编程和图形) 实验分析
2.画一对点电荷对的电场线和等势线 clear %清除变量
E0=8.85e-12; %真空电介质常数 C0=1/4/pi/E0; %归并常数
q=1.6*10^(-19); %元电荷电量 a=1; %电量比
xm=2.5; %横坐标范围 ym=2; %纵坐标范围
x=linspace(-xm,xm); %横坐标向量 y=linspace(-ym,ym); %纵坐标向量 [X,Y]=meshgrid(x,y); %设置坐标网点
R1=sqrt((X+1).^2+Y.^2); %第一个正电荷到场点的距离 R2=sqrt((X-1).^2+Y.^2); %第二个正电荷到场点的距离 U=C0*q./R1+C0*q./R2; %计算电势
u=1e-9:0.5e-9:5e-9; %等电势的电势向量 figure %创建图形窗口
contour(X,Y,U,u) %画等势线 grid on %加网格
legend(num2str(u')) %图例 hold on %保持图像
plot(-1,0,'o','markersize',12) %画第一个正电荷
plot(1,0,'o','markersize',12) %画第二个正电荷 axis equal tight %使坐标刻度相等
title('等量同号点电荷的电场线和等势线','fontsize',20) %显示标题 xlabel('r','fontsize',16) %显示横坐标 ylabel('E(U)','fontsize',16) %显示纵坐标
txt=['μ?oé±è:\\itQ\\rm_2/\\itQ\\rm_1=' num2str(a)]; %电荷比文本 text(-xm,-ym-0.3,txt,'fontsize',16) %显示电荷比 [Ex,Ey]=gradient(-U); % 计算场强
AE=sqrt(Ex.^2+Ey.^2);Ex=Ex./AE;Ey=Ey./AE;% 场强归一化,使箭头等长 quiver(X,Y,Ex,Ey,0.5,'b-') % 第五输入宗量 0.7 使场强箭头长短适中。
五、实验分析