MATLAB讲义.docx
- 文档编号:11783783
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:34
- 大小:497.77KB
MATLAB讲义.docx
《MATLAB讲义.docx》由会员分享,可在线阅读,更多相关《MATLAB讲义.docx(34页珍藏版)》请在冰豆网上搜索。
MATLAB讲义
第六章MATLAB语言简介
MATLAB语言是一种用于科学和工程计算的高级语言,在科学计算、自动控制、动态系统仿真、信号处理、神经网络、优化、小波分析、图形处理等领域提供了强大的处理功能,具有很高的编程效率。
MATLAB语言的特点是语法规则简单明了,使用者只须花很少的时间就可以掌握它的基本使用方法,程序编写短小,调试方便灵活快捷,编程效率高,不必象Basic、Fortran和C语言那样花费大量的时间和精力用于编程和调试,而采用Fortran和C语言编写的程序可以方便地被MATLAB调用﹔MATLAB尤其擅长矩阵运算,处理各种矩阵运算问题十分简便和高效﹔MATLB还提供了强大的图形功能,具有丰富的绘图命令,使用户可以很方便地绘制自己所需要的图形﹔在仿真方面,运用MATLAB所提供的仿真利器Simulink使得建模、仿真和分析工作变得直观、高效和方便灵活。
MATLAB(MATrixLABoratory,即矩阵实验室)是美国Mathworks公司推出的软件产品,其创始人为CleveMoler博士。
MATLAB的第一个正式版本(DOS版本)于1984年推出;目前的最新版本是可运行于Windows98/2000/XP环境下的MATLABR2010a。
MATLAB是当今世界上最为流行的数学软件之一,除了在主软件包中提供诸如数值计算、图形绘制、数据处理等一些通用功能外,还提供了扩充主程序包、解决不同专业领域问题的工具箱(TOOLBOX),如控制系统工具箱(ControlSystemToolbox),系统辩识工具箱(SystemIdentificationToolbox),信号处理工具箱(SignalProcessingToolbox),频率域系统辨识工具箱(FrequencyDomainSystemIdentificationToolbox),模糊逻辑工具箱(FuzzyLogicToolbox),μ分析与综合工具箱(μ-AnalysisandSynthesisToolbox),优化工具箱(OptimizationToolbox),神经网络工具箱(NeuralNetworkToolbox),小波工具箱(WaveletToolbox)等等以及交互式仿真环境Simulink(新增SimMechanics)。
MATLAB本身是一个十分庞大的软件包,考虑到篇幅上的限制以及实际应用情况,本章仅从仿真的角度,对目前较为流行的MATLAB7.7版本作一介绍。
6.1MATLAB的安装
安装MATLAB7.7之前应首先启动中文版MiscrosoftWindows98/2000/XP操作系统,然后将装有MATLAB7.7的光盘插入光驱,光盘中的自动安装程序就会启动。
也可打开程序管理器窗口,查看光盘中的文件目录,找到Setup.exe并用鼠标左键双击,启动安装程序。
按照计算机屏幕上的安装提示即可一步一步地进行安装。
当按照要求输入用户名、单位名称以及安装密码后,用鼠标单击屏幕上的“Next”按钮,计算机屏幕上就会出现图6.1-1所示内容。
在每个部件左侧都有方框,“”表示该部件将被安装。
用鼠标左键点击该处可决定相应部件是否需要安装。
安装时还应注意屏幕下方可用磁盘空间的提示,在所需安装空间小于可用磁盘空间时可全部安装,否则应去掉一部分不必要的组件或用鼠标点击“Browse…”按钮另选驱动器。
完成该步后用鼠标点击“Next”按钮,根据安装提示完成余下安装工作。
6.2MATLAB的启动与基本操作
在Windows95/98/2000/XP中将鼠标移至屏幕的左下角单击“开始”→“程序”→“Matlab”→“MATLAB”即可启动MATLAB;也可先建立MATLAB快捷方式,然后用鼠标双击
图6.1-1MATLAB组件的选择
MATLAB图标启动MATLAB。
启动后,Windows98/2000/XP中会出现图6.2-1所示的窗口,称为MATLAB命令窗口(MATLABCommandWindow),它是MATLAB的工作空间,程序的编写、运行和调试都在这个工作空间中进行。
用户也可以在这个窗口中输入MATLAB命令。
图6.2-1MATLAB命令窗口
MATLAB命令窗口标题栏下部有File、Edit、Window和Help四个主菜单,每个主菜单选项又有若干个子菜单。
主菜单下方是工具栏,其中的十个图标的作用按从左到右的顺序依次为:
建立新的M文件(关于M文件将在稍后的内容中进行介绍)、打开已有M文件、剪切、复制、粘贴、撤消操作、工作空间浏览器、路径浏览器、建立新的Simulink模型以及帮助。
命令窗口内的两行文字是关于联机帮助、程序演示以及MathWorks公司产品信息的命令提示,用户可以在命令行中输入这些命令,执行后得到相应输出内容。
在命令窗口中执行MATLAB命令是非常方便的,例如,已知矩阵
求a矩阵的逆。
在命令窗口中输入:
a=[2,1,1;2,3,2;1,1,2]
并按回车键,屏幕上会显示:
a=
211
232
112
再接着输入:
b=inv(a)
屏幕上会显示:
b=
0.8000-0.2000-0.2000
-0.40000.6000-0.4000
-0.2000-0.20000.8000
其中b代表a矩阵的逆矩阵。
MATLAB的直观、简单、方便之处由此可见一斑,它也被称为“演算纸式的科学计算语言”。
又例如求解非线性方程组:
应用MATLAB对上述方程组进行求解的过程如下:
建立函数fun2.m
functionG=fun2(a)
f1=a
(1)-5*a
(2)*a
(2)+7*a(3)*a(3)+12;
f2=3*a
(1)*a
(2)+a
(1)*a(3)-11*a
(1);
f3=2*a
(2)*a(3)+40*a
(1);
G=[f1;f2;f3];
建立主程序mfnl.m
a0=[2,6,-3];
options=optimset('Display','off');
[a,fval]=fsolve(@fun2,a0,options)
在CommandWindow中输入主程序名mfn1,运行程序后可求出方程解:
1,5,-4
可见MATLAB编程效率要远远高于VC、VB等高级语言。
6.3MATLAB语言程序设计概述
用MATLAB语言编写程序,与我们日常在纸上书写数学公式相比,在思路上和习惯上是一致的,对用户的计算机软、硬件知识的要求也没有VC语言和VB语言那样高,一些常用的功能如矩阵运算、常微分方程求解、绘图等都已经以库函数的形式存在,用户使用时直接调用即可。
因此尽管MATLAB的功能十分强大,但学起来并不困难,程序的编写也简单、方便。
.
6.3.1变量、表达式和语句
MATLAB语言中的变量用变量名表示,变量名由字母和数字组成,但最多不能超过19个,否则不被接收,而且第一个字符必须是字母。
函数名的命名与变量名相同。
MATLAB语言区分变量名的大小写,如Ab、AB、ab分别代表三个不同的变量。
但是函数名必须是小写字母,如前面例子中求矩阵a的逆矩阵要写成inv(a),若写成Inv(a),MATLAB将不予接受并给出提示信息,认为它是未定义变量或将内部函数大写。
表达式由变量名、函数、运算符以及一些特殊字符组成,表达式的运算结果为一个矩阵。
在MATLAB中,语句有下列两种形式:
变量名=表达式
表达式
对于第一种情况,表达式的结果赋给变量名;对于第二种情况,表达式运算结果赋给MATLAB的永久变量ans,例如,在命令窗口中键入:
2+3并按回车键,则屏幕上将相应地显示:
ans=
5
一条语句可以用回车、逗号或分号结束,如果以分号结束,则这条语句的运行结果将不显示在屏幕上。
另外,当一条语句很长,一行写不下时,可在该行末尾输入三个点号“...”,然后按回车键,在下面的一行接着写。
6.3.2矩阵的输入与基本运算
MATLAB以复矩阵作为基本运算单元,而向量和数量则分别作为特例,即1×n(行向量)或n×1(列向量)、1×1的矩阵来处理的。
对矩阵进行处理,应首先了解在MATLB中矩阵是如何输入的。
输入矩阵可以采用下面的四种方式:
1)在MATLA环境下直接输入矩阵的各个元素
具体来说,将矩阵中的各个元素按其在矩阵中的排列顺序逐行输入方括号中,同一行的元素之间用逗号或空格隔开,行与行之间用分号隔开,如6.2节中的矩阵例题所示。
向量的输入可作为矩阵输入的特殊情况,例如,输入行向量a和列向量b:
a=[1357],b=[1;3;5;7]
屏幕上将会相应地显示:
a=
1357
b=
1
3
5
7
输入矩阵时也可用回车键代替分号,例如,可按如下方式输入6.2节中的a矩阵:
a=[211
232
112]
2)用MATLAB语句和内部函数产生
利用这种方式产生矩阵的具体作法很多,可参见MATLAB的有关专著及说明书。
这里仅举例作一说明,若输入:
a=1:
4;
b=4:
-1:
1;
c=[a;b]
则相应显示结果为:
c=
1234
4321
这里,“:
”的作用是分别产生1~4,增量为1的行向量和4~1,增量为-1的行向量。
用于建立矩阵的函数可详见MATLAB使用手册,这里不再赘述。
3)通过建立M文件输入矩阵
这种方式比较适合于矩阵较大的场合。
例如,建立一个M文件(M文件的内容将在后面介绍),按矩阵的输入方式输入:
a=[1234
5678]
并存为mf.m,这里,mf为文件名字,m为文件后缀。
在命令窗口中键入mf并回车,屏幕将显示:
a=
1234
5678
4)从一个外部数据文件中读入
MATLAB的矩阵处理能力非常强大,这里仅介绍矩阵的基本运算。
矩阵的转置:
用符号“'”来实现。
例如,对于上面的a矩阵,在命令窗口中接着输入:
b=a'并回车,则显示结果为:
b=
15
26
37
48
矩阵的加减:
只有阶数相同的矩阵才能进行加减,运算符分别为“+”和“-”,如c=a+b、c=a-b。
矩阵相乘:
运算符为“*”,前一个矩阵的行数应等于后一个矩阵的列数,例如,a=[1–32],b=[-201]′,则a*b的结果为:
ans=
-4
b*a的结果为:
ans=
-26-4
000
-13-2
矩阵的除法:
运算符有“\”和“/”两种,分别代表左除和右除。
如对于矩阵A和B,A\B相当于A-1B;B/A相当于BA-1。
一般情况下,X=A\B是线性方程组A*X=B的解,X=B/A是线性方程组X*A=B的解,通常,A\B≠B/A。
矩阵的乘方:
运算符为“∧”。
如对于方阵A,“A∧x”表示A的x次方,若x为正整数,“A∧x”表示A自乘x次;若x为负整数,Ax表示A的逆矩阵自乘x次;当x为非整数时,
其中,V为矩阵A的特征向量矩阵,
1,…
n为矩阵A的特征值。
矩阵的下标及其运算:
矩阵中的元素可用矩阵名后跟一对括有下标的圆括号来表达,下标标明了元素在矩阵中的位置。
例如,已知矩阵:
则A(1,2)=2,A(2,3)=6,A(3,3)=9等等。
可利用下标对矩阵中的元素重新赋值和运算,例如,执行A(2,1)=-20后,A的第二行第一列元素的值就由原来的4变为-20,执行A(3,3)=A(3,1)+A(3,2)后,A(3,3)的值就由原来的9变为15。
若给出的下标超出了原有矩阵的范围,MATLAB将自动对原矩阵进行扩展,并将扩展后矩阵中未赋值的元素自动置0,例如,执行A(3,4)=-7后,上述A矩阵变为:
6.3.3矩阵函数
这里主要介绍常用的三角分解,正交变换,求特征值,奇异值分解等矩阵函数。
1)三角分解
这种分解方法将一个方阵分解为上三角矩阵和下三角矩阵的乘积,通常也称为LU分解。
用于三角分解的函数为lu。
例如,已知矩阵:
将其输入MATLAB,执行命令:
[L,U]=lu(A)
得到的结果为:
L=
-0.5000-0.33331.0000
1.000000
-0.50001.00000
U=
-4.00000-5.0000
0-3.0000-6.5000
00-6.6667
其中L可以通过行的交换重新排列成下三角矩阵,并使其主对角线元素为1(这里,交换1、3行);U为上三角矩阵。
还可通过如下命令验证LU分解的正确性:
L*U
结果为:
ans=
212
-40-5
2-3-4
2)正交变换
也称为QR分解,它将方阵或长方阵化为正交矩阵和上三角矩阵的乘积,所使用的函数为qr。
例如,对矩阵:
进行QR分解,输入矩阵A并执行命令:
[Q,R]=qr(A)
输出的结果为:
Q=
-0.33330.77520.5367
-0.66670.2087-0.7155
-0.6667-0.59630.4472
R=
-3.00002.6667-3.0000
03.7268-2.4150
003.4883
如需要验证,执行命令Q*R,所得结果即为矩阵A。
3)矩阵的特征值
求特征值的MATLAB函数为eig,设A为n×n阶矩阵,若A为实对称矩阵,则特征值为实数,若A为非对称矩阵,则很多情况下特征值为复数。
例如,
则执行命令eig(A)的结果为:
ans=
0.5276
3.7362+1.7602i
3.7362-1.7602i
采用下面的方式可以同时得到矩阵的特征值和特征向量:
[X,D]=eig(A)
其中,D是由特征值组成的对角矩阵,X为矩阵,其各个列由对应的特征向量组成,满足A*X=X*D
4)奇异值分解
MATLAB的奇异值分解函数为svd,用来进行奇异分解的语句为:
[U,S,V]=svd(A)
其中,U和V是正交矩阵,S为奇异值组成的对角矩阵,它们满足:
A=U*S*V′。
6.3.4控制语句
常用的MATLAB控制语句有循环语句和条件转移语句。
1.循环语句:
包括for循环语句和while循环语句
与其它计算机语言一样,MATLAB语言也有for循环语句,用于循环次数已经确定的情况下反复执行一组语句。
其基本格式为:
for循环变量=表达式1:
表达式2:
表达式3
循环语句组
end
其中,表达式1、2、3分别为循环变量的初始值、增量和终值。
当循环变量的增量为1时,表达式2可省略不写,例如fori=1:
1:
10可写为:
fori=1:
10。
这里应值得注意的是,for与end必须成对使用。
此外,for语句允许嵌套使用,例如:
fori=1:
9
forj=1:
9
A(i,j)=i+j;
end
end
A
程序中分号的作用是避免每计算一个A中的元素都显示一次。
创建的A矩阵通过最后一条语句显示出来。
While循环语句的作用是在一定的逻辑条件下重复地执行一组语句,其循环次数不预先确定。
基本格式为:
while(条件表达式)
循环语句组
end
While循环语句也允许嵌套。
执行While语句时,先判断条件表达式中的条件是否满足,若满足,则执行循环语句组,否则结束循环并继续向下执行。
例如:
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i=i+1;
end
sum
这个程序可求出1+2+…+100之和。
此外,for语句和for语句也允许相互嵌套。
2.条件转移语句
在MATLAB提供的各种条件转移语句中,最简单的是if条件语句,它的三种结构形式列于表6.1:
表6.3.1if语句的三种结构形式
if(条件式)
语句组
end
if(条件式)
语句组1
else
语句组2
end
if(条件式1)
语句组1
elseif(条件式2)
语句组2
………………
else
语句组n
end
例如,已知函数:
可利用if语句对y进行赋值:
ifx>0
y=1;
elseifx==0
y=0;
else
y=-1
end
其中的符号“==”是关系运算符,MATLAB提供了如下6种运算符:
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于
6.3.5绘图
MATLAB丰富的图形绘制功能使得我们在绘制实验数据曲线、二维、三维函数曲线以及曲面甚至更为复杂的图形处理等方面有了简单、方便快捷的工具。
1.二维绘图
如果已将两组数据通过某种方式分别存储在向量x、y中,那么就可以很方便地用plot函数将其关系曲线画出来。
plot函数的调用格式为:
plot(x,y)
图6.3-1用plot函数绘制的曲线
例如,输入下面的命令:
x=[12345678];
y=[00.150.470.720.890.961.221.08];
plot(x,y)
则MATLAB会打开一个图形窗口,显示如图6.3-1所示的相应曲线。
还可进一步为图形加上标题,为x、y轴加上标注并为图形打上网格,为此,只须切换到命令窗口中并接着输入如下四条命令:
title('curve');
xlabel('xaxis');
ylabel('yaxis');
grid
则图形就会变为图6.3-2所示的情况。
这四条语句中,第一条语句为图形加上标题“curve”,第二、三条语句分别为x、y轴加上标注,第四条语句是打网格。
图6.3-2经过标注后的图形
绘制函数曲线可以先用MATLAB命令产生一组数据并赋给x、y,然后再调用plot函数。
在一个绘图窗口中也可以绘制多条曲线,比较简单的方法是先将这些曲线的数据赋给相应的向量x1、y1,x2、y2,……,xn、yn,然后用命令plot(x1、y1,x2、y2,……,xn、yn)画出,同时,还可在plot函数中输入不同选项将不同的曲线用不同的线型、符号和颜色表达,见表6.2。
表6.3.2MATLAB中各种线型、符号和颜色的表达及其含义
线型
符号
颜色
选项
说明
选项
说明
选项
说明
-
--
:
-.
实线
虚线
点线
点划线
.
o
x
+
*
^
用点号标记数据点
用圆圈标记数据点
用叉号标记数据点
用加号标记数据点
用星号标记数据点
用△标记数据点
b
c
g
k
m
r
w
y
蓝色
蓝绿色
绿色
黑色
洋红色
红色
白色
黄色
例如,输入下面的命令可在同一图形窗口中画出正弦和余弦曲线:
x1=0:
pi/10:
2*pi;
y1=sin(x1);
x2=0:
pi/10:
2*pi;
y2=cos(x2);
plot(x1,y1,'r--',x2,y2,'b-.',x1,y1,'ro',x2,y2,'b^');
title('SineandCosineCurves');xlabel('xaxis');
ylabel('yaxis')
在plot语句中,四组选项的作用依次是:
用红色虚线画出正弦曲线,用蓝色点划线画出余弦曲线,用红色圆圈标记正弦曲线数据点,用蓝色△标记余弦曲线数据点,当然,这四组也可以分别写成四条plot语句(如第一句为plot(x1,y1,'r--'))。
若想在图中对正弦曲线加上说明,可继续在命令窗口中输入gtext('sin(x)')并回车,图形窗口中会出现一个大的十字交叉线,移动鼠标将交叉点挪到标注位置并点击左键,则标注内容“sin(x)”就会出现在交叉点所在位置,同样可以将文本“cos(x)”标注到图中,如图6.3-3所示。
图6.3-3用不同线型、符号和颜色绘制的正弦和余弦曲线
除了上述二维绘图之外,利用MATLAB所提供的绘图函数还可绘制对数坐标曲线、半对数坐标曲线、极坐标曲线和直方图等。
下面将分别进行简要介绍。
函数loglog使用横、纵坐标均为以10为底的坐标系绘制曲线,使用方法与plot函数相类似﹔
函数semilogx使用横坐标为以10为底对数坐标、纵坐标为线性坐标的坐标系绘制曲线,使用方法与plot函数相类似﹔
函数semilogy使用横坐标为线性坐标、纵坐标为以10为底对数坐标的坐标系绘制曲线,使用方法与plot函数相类似﹔
当使用线性等间隔的数据向量绘制对数曲线时,由于数据在对数坐标系下不均匀,常常会出现曲线不光滑的情况,为此,MATLAB提供了函数logspace用于产生对数等间隔的向量,调用格式为:
x=logspace(d1,d2,n)
其含义是在10d1至10d2之间产生n个对数等间隔的数据并赋给向量x。
polar函数用于极坐标系下绘制曲线,其调用格式为:
polar(theta,rho,选项)
其中,theta和rho分别为角度向量和幅值向量,选项与polar函数相类似。
函数bar是绘制直方图的函数,可采用如下格式调用:
bar(x,y,选项)
MATLAB还允许将一个图形窗口分成若干部分,分别绘制不同的图形,相应的函数为subplot,调用格式为:
subplot(m,n,k)
其意义是将一个图形窗口分为m×n个区域,m为行数,n为列数,k代表区域号。
利用subplot可以只在某一个或某几个区域画图而其它区域不画。
2)三维绘图
MATLAB具有很强的三维绘图功能,也是以图形函数的形式给出。
这里介绍几个常用的图形函数。
plot3用于绘制三维曲线或折线,与二维的plot相对应,其调用格式为:
plot3(x,y,z,选项)
图6.3-4用plot3函数绘制的三维螺旋线
例如,下面的程序:
t=0:
pi/100:
5*pi;
x=sin(t);
y=cos(t);
z=2*t;
plot3(x,y,z,'k')
绘制了三维坐标系中的螺旋线,如图6.3-4所示。
mesh函数用于生成三维网格图,其调用格式为:
mesh(x,y,z,c)
其中,c为颜色矩阵,一般可以省略。
例如,已知二次曲面方程为
,下面的程序利用mesh函数生成该方程的三维网格曲面:
[x,y]=meshgrid(-5:
0.25:
5);
z=3*x.^2-2*y.^2;
mesh(x,y,z)
程序中用到了函数meshgrid,它在程序中的作用是产生横纵坐标的区间均为-5~5,间隔为0.25的平面网格数据,“x.^2”表示对向量x中的每个元素求平方。
程序结果如图6.3-5所示。
图6.3-5三维网格图形
因篇幅所限,其它三维绘图功能不在这里作进一步详述,感兴趣者可利用MATLAB的联机求助命令进一步了解或参见有关文献资料。
6.3.6M文件与M函数
用MATLAB语句编写的文本文件称为M文件。
建立和编辑M文件可通过在MA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 讲义