第八章 matlab软件快速入门.docx
《第八章 matlab软件快速入门.docx》由会员分享,可在线阅读,更多相关《第八章 matlab软件快速入门.docx(36页珍藏版)》请在冰豆网上搜索。
第八章matlab软件快速入门
第八章Matlab软件快速入门
8.1Matlab概述
MATLAB是MATrixLABoratory(“矩阵实验室”)的缩写,是由美国MathWorks公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的语言。
是国际公认的优秀数学应用软件之一。
20世纪80年代初期,CleveMoler与JohnLittle等利用C语言开发了新一代的MATLAB语言,此时的MATLAB语言已同时具备了数值计算功能和简单的图形处理功能。
1984年,CleveMoler与JohnLittle等正式成立了Mathworks公司,把MATLAB语言推向市场,并开始了对MATLAB工具箱等的开发设计。
现在,MATLAB已经发展成为适合多学科的大型软件,已经成为线性代数、数值分析、数理统计、优化方法、自动控制、数字信号处理、动态系统仿真等高级课程的基本教学工具。
MATLAB系统由两部分组成,即MATLAB内核及辅助工具箱,两者的调用构成了MATLAB的强大功能。
MATLAB语言以数组为基本数据单位,包括控制流语句、函数、数据结构、输入输出及面向对象等特点的高级语言,它具有以下主要特点:
1)运算符和库函数极其丰富,语言简洁,编程效率高,MATLAB除了提供和C语言一样的运算符号外,还提供广泛的矩阵和向量运算符。
2)既具有结构化的控制语句(如for循环、while循环、break语句、if语句和switch语句),又有面向对象的编程特性。
3)图形功能强大。
它既包括对二维和三维数据可视化、图像处理、动画制作等高层次的绘图命令,也包括可以修改图形及编制完整图形界面的、低层次的绘图命令。
4)功能强大的工具箱。
工具箱可分为两类:
功能性工具箱和学科性工具箱。
功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互的功能。
而学科性工具箱是专业性比较强的,如优化工具箱、统计工具箱、控制工具箱、小波工具箱、图象处理工具箱、通信工具箱等。
5)易于扩充。
除内部函数外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可修改源文件和加入自己的文件,它们可以与库函数一样被调用。
8.2MATLAB的开发环境
MATLAB的开发环境就是在使用MATLAB的过程中可激活的,并且为用户使用提供支持的集成系统。
这里介绍比较重要的如:
桌面平台系统、帮助系统。
8.2.1MATLAB桌面平台
桌面平台是各桌面组件的展示平台,默认设置情况下的桌面平台包括6个窗口,具体如下:
MATLAB主窗口
MATLAB6比早期版本增加了一个主窗口。
该窗口不能进行任何计算任务的操作,只用来进行一些整体的环境参数的设置。
命令窗口(CommandWindow)
命令窗口是对MATLAB进行操作的主要载体,默认的情况下,启动MATLAB时就会打开命令窗口,显示形式如图1-1所示。
一般来说,MATLAB的所有函数和命令都可以在命令窗口中执行。
在MATLAB命令窗口中,命令的实现不仅可以由菜单操作来实现,也可以由命令行操作来执行,下面就详细介绍MALTAB命令行操作。
实际上,掌握MALAB命令行操作是走入MATLAB世界的第一步,命令行操作实现了对程序设计而言简单而又重要的人机交互,通过对命令行操作,避免了编程序的麻烦,体现了MATLAB所特有的灵活性。
例如:
%在命令窗口中输入sin(pi/5),然后单击回车键,则会得到该表达式的值
sin(pi/5)
ans=
0.5878
由例可以看出,为求得表达式的值,只需按照MALAB语言规则将表达式输入即可,结果会自动返回,而不必像其他的程序设计语言那样,编制冗长的程序来执行。
当需要处理相当繁琐的计算时,可能在一行之内无法写完表达式,可以换行表示,此时需要使用续行符“……”否则MATLAB将只计算一行的值,而不理会该行是否已输入完毕。
例如:
sin(1/9*pi)+sin(2/9*pi)+sin(3/9*pi)+……
sin(4/9*pi)+sin(5/9*pi)+sin(6/9*pi)+……
sin(7/9*pi)+sin(8/9*pi)+sin(9/9*pi)+……
ans=
5.6713
使用续行符之后MATLAB会自动将前一行保留而不加以计算,并与下一行衔接,等待完整输入后再计算整个输入的结果。
在MATLAB命令行操作中,有一些键盘按键可以提供特殊而方便的编辑操作。
比如:
“↑”可用于调出前一个命令行,“↓”可调出后一个命令行,避免了重新输入的麻烦。
当然下面即将讲到的历史窗口也具有此功能。
历史窗口(CommandHistory)
历史命令窗口是MATLAB6新增添的一个用户界面窗口,默认设置下历史命令窗口会保留自安装时起所有命令的历史记录,并标明使用时间,以方便使用者的查询。
而且双击某一行命令,即在命令窗口中执行该命令。
发行说明书窗口(LaunchPad)
发行说明书窗口是MATLAB6所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。
当选中该窗口中的某个组件之后,可以打开相应的窗口工具包。
当前目录窗口(CurrentDirectory)
在当前目录窗口中可显示或改变当前目录,还可以显示当前目录下的文件,包括文件名、文件类型、最后修改时间以及该文件的说明信息等并提供搜索功能。
工作空间管理窗口(Workspace)
工作空间管理窗口是MATLAB的重要组成部分。
在工作空间管理窗口中将显示所有目前保存在内存中的MATLAB变量的变量名、数据结构、字节数以及类型,而不同的变量类型分别对应不同的变量名图标。
8.2.2MATLAB帮助系统
完善的帮助系统是任何应用软件必要的组成部分。
MATLAB提供了相当丰富的帮助信息,同时也提供了获得帮助的方法。
首先,可以通过桌面平台的【Help】菜单来获得帮助,也可以通过工具栏的帮助选项获得帮助。
此外,MATLAB也提供了在命令窗口中的获得帮助的多种方法,在命令窗口中获得MATLAB帮助的命令及说明列于表7.3-1中。
其调用格式为:
命令+指定参数
表7.3-1
命令
说明
doc
在帮助浏览器中显示指定函数的参考信息
help
在命令窗口中显示M文件帮助
helpbrowser
打开帮助浏览器,无参数
helpwin
打开帮助浏览器,并且见初始界面置于MATLAB函数的M文件帮助信息
lookfor
在命令窗口中显示具有指定参数特征函数的M文件帮助
web
显示指定的网络页面,默认为MATLAB帮助浏览器
例如:
>>helpsin
SINSine
SIN(X)isthesineoftheelementsofX
Overloadedmethods
Helpsym/sin.m
另外也可以通过在组件平台中调用演示模型(demo)来获得特殊帮助。
8.3Matlab基本量
MATLAB强大的数值计算功能使其在诸多数学计算软件中傲视群雄,是MATLAB软件的基础。
本节将简要介绍MATLAB的数据类型、矩阵的建立及运算。
8.3.1MATLAB数据类型
MATLAB的数据类型主要包括:
数字、字符串、矩阵、单元型数据及结构型数据等,限于篇幅我们将重点介绍其中几个常用类型。
变量与常量
变量是任何程序设计语言的基本要素之一,MATLAB语言当然也不例外。
与常规的程序设计语言不同的MATLAB并不要求事先对所使用的变量进行声明,也不需要指定变量类型,MATLAB语言会自动依据所赋予变量的值或对变量所进行的操作来识别变量的类型。
在赋值过程中如果赋值变量已存在时,MATLAB语言将使用新值代替旧值,并以新值类型代替旧值类型。
在MATLAB语言中变量的命名应遵循如下规则:
(1)变量名区分大小写。
(2)变量名长度不超31位,第31个字符之后的字符将被MATLAB语言所忽略。
(3)变量名以字母开头,可以是字母、数字、下划线组成,但不能使用标点。
与其他的程序设计语言相同,在MATLAB语言中也存在变量作用域的问题。
在未加特殊说明的情况下,MATLAB语言将所识别的一切变量视为局部变量,即仅在其使用的M文件内有效。
若要将变量定义为全局变量,则应当对变量进行说明,即在该变量前加关键字global。
一般来说全局变量均用大写的英文字符表示。
MATLAB语言本身也具有一些预定义的变量,这些特殊的变量称为常量。
表8.3-1给出了MATLAB语言中经常使用的一些常量值。
表8.3-1
常量
表示数值
pi
圆周率
eps
浮点运算的相对精度
inf
正无穷大
NaN
表示不定值
realmax
最大的浮点数
i,j
虚数单位
在MATLAB语言中,定义变量时应避免与常量名重复,以防改变这些常量的值,如果已改变了某外常量的值,可以通过“clear+常量名”命令恢复该常量的初始设定值(当然,也可通过重新启动MATLAB系统来恢复这些常量值)。
数字变量的运算及显示格式
MALAB是以矩阵为基本运算单元的,而构成数值矩阵的基本单元是数字。
为了更好地学习和掌握矩阵的运算,首先对数字的基本知识作简单的介绍。
对于简单的数字运算,可以直接在命令窗口中以平常惯用的形式输入,如计算2和3的乘积再加1时,可以直接输入:
>>1+2*3
ans=
7
这里“ans”是指当前的计算结果,若计算时用户没有对表达式设定变量,系统就自动赋当前结果给“ans”变量。
用户也可以输入:
>>a=1+2*3
a=
7
此时系统就把计算结果赋给指定的变量a了。
MATLAB语言中数值有多种显示形式,在缺省情况下,若数据为整数,则就以整数表示;若数据为实数,则以保留小数点后4位的精度近似表示。
MATLAB语言提供了10种数据显示格式,常用的有下述几种格式:
short小数点后4位(系统默认值)
long小数点后14位
shorte5位指数形式
longe15位指数形式
MATLAB语言还提供了复数的表达和运算功能。
在MATLAB语言中,复数的基本单位表示为i或j。
在表达简单数数值时虚部的数值与i、j之间可以不使用乘号,但是如果是表达式,则必须使用乘号以识别虚部符号。
字符串
字符和字符串运算是各种高级语言必不可少的部分,MATLAB中的字符串是其进行符号运算表达式的基本构成单元。
在MATLAB中,字符串和字符数组基本上是等价的;所有的字符串都用单引号进行输入或赋值(当然也可以用函数char来生成)。
字符串的每个字符(包括空格)都是字符数组的一个元素。
例如:
>>s=’matrixlaboratory’;
s=
matrixlaboratory
>>size(s)%size查看数组的维数
ans=
117
8.3.2矩阵及其运算
矩阵是MATLAB数据存储的基本单元,而矩阵的运算是MATLAB语言的核心,在MATLAB语言系统中几乎一切运算均是以对矩阵的操作为基础的。
下面重点介绍矩阵的生成、矩阵的基本运算和矩阵的数组运算。
8.3.2.1矩阵的生成
直接输入法
从键盘上直接输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。
在用此方法创建矩阵时,应当注意以下几点:
●输入矩阵时要以“[]”为其标识符号,矩阵的所有元素必须都在括号内。
●矩阵同行元素之间由空格或逗号分隔,行与行之间用分号或回车键分隔。
●矩阵大小不需要预先定义。
●矩阵元素可以是运算表达式。
●若“[]”中无元素表示空矩阵。
另外,在MATLAB语言中冒号的作用是最为丰富的。
首先,可以用冒号来定义行向量。
例如:
>>a=1:
0.5:
4
a=
Columns 1through7
11.522.533.54
其次,通过使用冒号,可以截取指定矩阵中的部分。
例如:
>>A=[123;456;789]
A=
123
456
789
>>B=A(1:
2,:
)
B=
123
456
通过上例可以看到B是由矩阵A的1到2行和相应的所有列的元素构成的一个新的矩阵。
在这里,冒号代替了矩阵A的所有列。
2.外部文件读入法
MATLAB语言也允许用户调用在MATLAB环境之外定义的矩阵。
可以利用任意的文本编辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。
另外也可以利用load函数,其调用方法为:
Load+文件名[参数]
Load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量,如果不给定文件名,则将自动认为matlab.mat文件为操作对象,如果该文件在MATLAB搜索路径中不存在时,系统将会报错。
例如:
事先在记事本中建立文件:
111
(并以data1.txt保存)123
136
在MATLAB命令窗口中输入:
>>loaddata1.txt
>>data1
data1=
111
123
136
3.特殊矩阵的生成
对于一些比较特殊的矩阵(单位阵、矩阵中含1或0较多),由于其具有特殊的结构,MATLAB提供了一些函数用于生成这些矩阵。
常用的有下面几个:
zeros(m)生成m阶全0矩阵
eye(m)生成m阶单位矩阵
ones(m)生成m阶全1矩阵
rand(m)生成m阶均匀分布的随机阵
randn(m)生成m阶正态分布的随机矩阵
8.3.2.2矩阵的基本数学运算
矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、秩运算、特征值运算等基本函数运算,这里进行简单介绍。
1.四则运算
矩阵的加、减、乘运算符分别为“+,—,*”,用法与数字运算几乎相同,但计算时要满足其数学要求(如:
同型矩阵才可以加、减)。
在MATLAB中矩阵的除法有两种形式:
左除“\”和右除“/”。
在传统的MATLAB算法中,右除是先计算矩阵的逆再相乘,而左除则不需要计算逆矩阵直接进行除运算。
通常右除要快一点,但左除可避免被除矩阵的奇异性所带来的麻烦。
2.与常数的运算
常数与矩阵的运算即是同该矩阵的每一元素进行运算。
但需注意进行数除时,常数通常只能做除数。
3.基本函数运算
矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个:
det(a)求矩阵a的行列式
eig(a)求矩阵a的特征值
inv(a)或a^(-1)求矩阵a的逆矩阵
rank(a)求矩阵a的秩
trace(a)求矩阵a的迹(对角线元素之和)
例如:
>>a=[21–3–1;3107;-124–2;10–15];
>>a1=det(a);
>>a2=det(inv(a));
>>a1*a2
ans=
1
注意:
命令行后加“;”表示该命令执行但不显示执行结果。
8.3.2.3矩阵的数组运算
我们在进行工程计算时常常遇到矩阵对应元素之间的运算。
这种运算不同于前面讲的数学运算,为有所区别,我们称之为数组运算。
1.基本数学运算
数组的加、减与矩阵的加、减运算完全相同。
而乘除法运算有相当大的区别,数组的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符为“.*”和“./”或“.\”。
前面讲过常数与矩阵的除法运算中常数只能做除数。
在数组运算中有了“对应关系”的规定,数组与常数之间的除法运算没有任何限制。
另外,矩阵的数组运算中还有幂运算(运算符为.^)、指数运算(exp)、对数运算(log)、和开方运算(sqrt)等。
有了“对应元素”的规定,数组的运算实质上就是针对数组内部的每个元素进行的。
例如:
>>a=[21-3-1;3107;-124-2;10-15];
>>a^3
ans=
32-28-10134
99-12-151239
-149938
51-17-98139
>>a.^3
ans=
81-27-1
2710343
-1864-8
10-1125
由上例可见矩阵的幂运算与数组的幂运算有很大的区别。
2.逻辑关系运算
逻辑运算是MATLAB中数组运算所特有的一种运算形式,也是几乎所有的高级语言普遍适用的一种运算。
它们的具体符号、功能及用法见表7.3-2。
表7.3-2
符号运算符
功能
函数名
==
等于
eq
~=
不等于
ne
<
小于
lt
>
大于
gt
<=
小于等于
le
>=
大于等于
ge
&
逻辑与
and
|
逻辑或
or
~
逻辑非
not
说明:
●在关系比较中,若比较的双方为同维数组,则比较的结果也是同维数组。
它的元
素值由0和1组成。
当比较双方对应位置上的元素值满足比较关系时,它的对
应值为1,否则为0。
●当比较的双方中一方为常数,另一方为一数组,则比较的结果与数组同维。
●在算术运算、比较运算和逻辑与、或、非运算中,它们的优先级关系先后为:
比较运算、算术运算、逻辑与或非运算。
例如:
>>a=[123;456;789];
>>x=5;
>>y=ones(3)*5;
>>xa=x<=a
xa=
000
011
111
>>b=[010;101;001];
>>ab=a&b
ab=
010
101
001
8.4MATLAB数值计算
MATLAB数值分析方法主要讲述Matlab软件用于函数插值与最小二乘法拟合的方法,以及最优化求解工具箱的使用。
8.4.1函数插值与最小二乘法拟合
插值与拟合是来源于实际、又广泛应用于实际的两种重要方法。
随着计算机的不断发展及计算水平的不断提高,它们已在国民生产和科学研究等方面扮演着越来越重要的角色。
下面对插值中分段线性插值、拟合中的最为重要的最小二乘法拟合加以介绍。
8.4.1.1分段线性插值
所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。
实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要用法如下:
interp1(x,y,xi)一维插值
◆yi=interp1(x,y,xi)
对一组点(x,y)进行插值,计算插值点xi的函数值。
x为节点向量值,y为对应的节点函数值。
如果y为矩阵,则插值对y的每一列进行,若y的维数超出x或xi的维数,则返回NaN。
◆yi=interp1(y,xi)
此格式默认x=1:
n,n为向量y的元素个数值,或等于矩阵y的size(y,1)。
◆yi=interp1(x,y,xi,’method’)
method用来指定插值的算法。
默认为线性算法。
其值常用的可以是如下的字符串。
●nearest线性最近项插值。
●linear线性插值。
●spline三次样条插值。
●cubic三次插值。
所有的插值方法要求x是单调的。
x也可能并非连续等距的。
正弦曲线的插值示例:
>>x=0:
0.1:
10;
>>y=sin(x);
>>xi=0:
0.25:
10;
>>yi=interp1(x,y,xi);
>>plot(x,y,’0’,xi,yi)
则可以得到相应的插值曲线(读者可自己上机实验)。
Matlab也能够完成二维插值的运算,相应的函数为interp2,使用方法与interpl基本相同,只是输入和输出的参数为矩阵,对应于二维平面上的数据点,详细的用法见Matlab联机帮助。
8.4.1.2最小二乘法拟合
在科学实验的统计方法研究中,往往要从一组实验数据
中寻找出自变量x和因变量y之间的函数关系y=f(x)。
由于观测数据往往不够准确,因此并不要求y=f(x)经过所有的点
而只要求在给定点
上误差
按照某种标准达到最小,通常采用欧氏范数
作为误差量度的标准。
这就是所谓的最小二乘法。
在MATLAB中实现最小二乘法拟合通常采用polyfit函数进行。
函数polyfit是指用一个多项式函数来对已知数据进行拟合,以下列数据为例介绍这个函数的用法:
>>x=0:
0.1:
1;
>>y=[-0.4471.9783.286.167.087.347.669.569.489.3011.2]
为了使用polyfit,首先必须指定我们希望以多少阶多项式对以上数据进行拟合,如果指定一阶多项式,结果为线性近似,通常称为线性回归。
选择二阶多项式进行拟合。
>>P=polyfit(x,y,2)
P=
-9.810820.1293-0.0317
函数返回的是一个多项式系数的行向量,写成多项式形式为:
为了比较拟合结果,绘制两者的图形:
>>xi=linspace(0,1,100);%绘图的X-轴数据。
>>Z=polyval(p,xi);%得到多项式在数据点处的值。
当然,也可以选择更高幂次的多项式进行拟合,如10阶:
>>p=polyfit(x,y,10);
>>xi=linspace(0,1,100);
>>z=ployval(p,xi);
读者可以上机绘图进行比较,曲线在数据点附近更加接近数据点的测量值了,但从整体上来说,曲线波动比较大,并不一定适合实际使用的需要,所以在进行高阶曲线拟合时,“越高越好”的观点不一定对的。
8.4.2优化工具箱及其应用
在工程设计、经济管理和科学研究等诸多领域中,人们常常会遇到这样的问题:
如何从一切可能的方案中选择最好、最优的方案,在数学上把这类问题称为最优化问题。
这类问题很多,例如当设计一个机械零件时如何在保证强度的前提下使重量最轻或用量最省(当然偷工减料除外);如何确定参数,使其承载能力最高;在安排生产时,如何在现有的人力、设备的条件下,合理安排生产,使其产品的总产值最高;在确定库存时如何在保证销售量的前提下,使库存成本最小;在物资调配时,如何组织运输使运输费用最少。
这些都属于最优化问题所研究的对象。
MATLAB的优化工具箱被放在toolbox目录下的optim子目录中,其中包括有若干个常用的求解函数最优化问题的程序。
MATLAB的优化工具箱也在不断地完善。
不同版本的MATLAB,其工具箱不完全相同。
在MATLAB5.3版本中,对优化工具箱作了全面的改进。
每个原有的常用程序都重新编制了一个新的程序。
除fzero和fsolve外都重新起了名字。
这些新程序使用一套新的控制算法的选项。
与原有的程序相比,新程序的功能增强了。
在MATLAB5.3和6.0版本中,原有的优化程序(除fzero和fsolve外)仍然保留并且可以使用,但是它们迟早会被撤消的。
鉴于上述情况,这里只介绍那些新的常用的几个优化程序。
8.4.2.1线性规划问题
线性规划是最优化理论发展最成熟,应用最广泛的一个分支。
在MATLAB的优化工具箱中用于求解下述线性规划的问题
求解函数是linprog,其主要格式为:
[x,fval,exitflag,output,lambda]=