实验五 matlab基础知识简单.docx
《实验五 matlab基础知识简单.docx》由会员分享,可在线阅读,更多相关《实验五 matlab基础知识简单.docx(22页珍藏版)》请在冰豆网上搜索。
实验五matlab基础知识简单
本次实验注意:
《实验五MALTAB基础知识(简单)》
《实验五基于Matlab的信号频谱分析(复杂)》选作一个即可
实验五MALTAB基础知识
(一)实验目的2
(二)实验设备2
(三)实验要求2
(四)实验内容2
1.1MATLAB基础知识2
1.1.1MATLAB程序设计语言简介2
1.1.2MATLAB界面及帮助2
1.2MATLAB基本运算4
1.2.1MATLAB内部特殊变量和常数4
1.2.2变量类型4
1.2.3内存变量管理5
1.2.4MATLAB常用数学函数5
1.2.5MATLAB矩阵生成5
1.2.6MATLAB矩阵运算8
1.2.7MATLAB中的矩阵分析10
1.3MATLAB程序设计10
1.3.1M文件10
1.3.2程序控制结构12
实验五MALTAB基础知识
(一)实验目的
●了解MATLAB程序设计语言的基本特点,熟悉MATLAB软件运行环境
●掌握创建、保存、打开m文件及函数的方法
●掌握变量等有关概念,具备初步的将一般数学问题转化为对应的计算机模型并进行处理的能力
(二)实验设备
计算机,Matlab软件
(三)实验要求
本实验属于验证实验,请根据(四)实验内容的步骤,运行相应的指令或例子,并将仿真结果截图至文档(请自己新建一个word文档,注意,并不一定所有指令或例子的实验结果都要截图,截图数目大于等于5个即可,自己选择性截图,答案不唯一,自由发挥)
请在页眉处填写班级、学号、姓名,并将实验报告命名为“实验五_学号_姓名”,并通过FTP上传至指定文件夹。
(四)实验内容
1.1MATLAB基础知识
1.1.1MATLAB程序设计语言简介
MATLAB,MatrixLaboratory的缩写,是由MathWorks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。
与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方方式,被称为“草稿纸式的语言”。
MATLAB软件主要由主包、仿真系统(simulink)和工具箱(toolbox)三大部分组成。
1.1.2MATLAB界面及帮助
MATLAB基本界面如图1-1所示,命令窗口包含标题栏、菜单栏、工具栏、命令行区、状态栏、垂直和水平波动条等区域。
图1-1MATLAB基本界面
(1)菜单栏
在MATLAB主窗口的菜单栏,共包含File、Edit、View、Web、Window和Help6个菜单项。
●File菜单项:
File菜单项实现有关文件的操作。
●Edit菜单项:
Edit菜单项用于命令窗口的编辑操作。
●View菜单项:
View菜单项用于设置MATLAB集成环境的显示方式。
●Web菜单项:
Web菜单项用于设置MATLAB的Web操作。
●Window菜单项:
主窗口菜单栏上的Window菜单,只包含一个子菜单Closeall,用于关闭所有打开的编辑器窗口,包括M-file、Figure、Model和GUI窗口。
●Help菜单项:
Help菜单项用于提供帮助信息。
(2)工具栏
MATLAB主窗口的工具栏共提供了10个命令按钮。
这些命令按钮均有对应的菜单命令,但比菜单命令使用起来更快捷、方便。
(3)命令行区
MATLAB按以下顺序对输入命令进行解释:
●检查它是否是工作空间中的变量,实则显示变量内容。
●检查它是否是嵌入函数,是则运行之。
●检查它是否是子函数。
●检查它是否是私有函数。
●检查它是否是位于MATLAB搜索路径范围内的函数文件或脚本文件。
MATLAB里有以下几种方法可获得帮助:
(1)帮助命令(help)是查询函数相关信息的最直接方式,信息会直接显示在命令窗口中。
键入helpsin,会显示sin相关信息。
(2)lookfor命令可以从键入的关键字列出所有相关的题材,和help相比,lookfor覆盖范围更广,可查找到某个主题所有词组或短语。
(3)帮助窗口(helpwindow)提供与帮助命令相同的信息,但帮助窗口界面更为方便直接。
(4)帮助桌面(helpdesk)通过在命令窗口中选择帮助菜单的“helpdesk”选项或键入helpdesk命令即可进入帮助桌面。
(5)在线帮助页是帮助桌面的在线帮助均有相应的PDF格式文件。
(6)Mathworks网站,对于连接入Internet的用户通过Mathworks公司的网站询问有关问题。
1.2MATLAB基本运算
1.2.1MATLAB内部特殊变量和常数
MATLAB内部有很多变量和常数,用来表达特殊含义,常用的有:
●变量ans:
指示当前未定义变量名的答案。
●常数eps:
表示浮点相对精度,其值是从1.0到下一个最大浮点数之间的差值。
●常数Inf:
表示无穷大。
●虚数单位ij:
表示不定型值,是由0/0运算产生。
●常数pi:
表示圆周率π。
1.2.2变量类型
(1)变量命名规则
MATLAB中对变量的命名应遵循以下规则:
●变量名可以由字母、数字和下划线混合组成,但必须以字母开头。
●字符长度不能大于31。
●变量命名区分大小写。
(2)局部变量和全局变量
局部变量是指那些每个函数体内自己定义的,不能从其他函数和MATLAB工作空间访问的变量。
全局变量是指用关键字“global”声明的变量。
全局变量名应尽量大写,并能反映它本身的含义。
如果需要在工作空间和几个函数中都能访问一个全局变量,必须在工作空间和几个函数中都声明该变量是全局的。
1.2.3内存变量管理
(1)内存变量的删除与修改
clear命令用于删除MATLAB工作空间中的变量。
clc命令用于清空MATLAB命令窗口中的变量。
who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。
who命令只显示出驻留变量的名称,whos在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。
(2)内存变量文件
利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长久地保留下来,扩展名是.mat。
MAT文件的生成和装入由save和load命令来完成。
常用格式为:
save文件名[变量名表][-append][-ascii]
load文件名[变量名表][-ascii]
1.2.4MATLAB常用数学函数
MATLAB提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。
函数使用说明:
●三角函数以弧度为单位计算。
●abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。
●用于取整的函数有fix、floor、ceil、round,要注意它们的区别。
●rem与mod函数的区别。
rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。
1.2.5MATLAB矩阵生成
MATLAB具有强大的矩阵运算和数据处理功能,对矩阵的处理必须遵从代数规则。
(1)矩阵的建立
●直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。
具体方法如下:
将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
●利用M文件建立矩阵
对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
下面通过一个简单例子来说明如何利用M文件创建矩阵。
●利用冒号表达式建立一个向量
冒号表达式可以产生一个行向量,一般格式是:
e1:
e2:
e3,其中e1为初始值,e2为步长,e3为终止值。
在MATLAB中,还可以用linspace函数产生行向量。
其调用格式为:
linspace(a,b,n),其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
显然,linspace(a,b,n)与a:
(b-a)/(n-1):
b等价。
●建立大矩阵
大矩阵可由方括号中的小矩阵或向量建立起来。
(2)矩阵的拆分
●矩阵元素
通过下标引用矩阵的元素,例如
A=[1,2,3;4,5,6];
A(1,2)
ans=2
采用矩阵元素的序号来引用矩阵元素。
矩阵元素的序号就是相应元素在内存中的排列顺序。
在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。
例如
A=[1,2,3;4,5,6];
A(3)
ans=2
显然,序号(Index)与下标(Subscript)是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利用sub2ind和ind2sub函数求得。
●矩阵拆分
1)利用冒号表达式获得子矩阵
①A(:
j)表示取A矩阵的第j列全部元素;A(i,:
)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。
②A(i:
i+m,:
)表示取A矩阵第i~i+m行的全部元素;A(:
k:
k+m)表示取A矩阵第k~k+m列的全部元素,A(i:
i+m,k:
k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。
此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。
end表示某一维的末尾元素下标。
2)利用空矩阵删除矩阵的元素
在MATLAB中,定义[]为空矩阵。
给变量X赋空矩阵的语句为X=[]。
注意,X=[]与clearX不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。
(3)特殊矩阵
常用的产生通用特殊矩阵的函数有:
zeros:
产生全0矩阵(零矩阵)。
ones:
产生全1矩阵(幺矩阵)。
eye:
产生单位矩阵。
rand:
产生0~1间均匀分布的随机矩阵。
randn:
产生均值为0,方差为1的标准正态分布随机矩阵。
例1-1分别建立3×3、3×2和与矩阵A同样大小的零矩阵。
(1)建立一个3×3零矩阵。
zeros(3)
(2)建立一个3×2零矩阵。
zeros(3,2)
(3)设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。
A=[123;456];%产生一个2×3阶矩阵A
zeros(size(A))%产生一个与矩阵A同样大小的零矩阵
例1-2建立随机矩阵:
(1)在区间[20,50]内均匀分布的5阶随机矩阵。
(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。
命令如下:
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
1.2.6MATLAB矩阵运算
(1)算术运算
●基本算术运算
MATLAB的基本算术运算有:
+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。
注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。
1)矩阵加减运算
假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。
运算规则是:
若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。
如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。
2)矩阵乘法
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。
3)矩阵除法
在MATLAB中,有两种矩阵除法运算:
\和/,分别表示左除和右除。
如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。
A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。
对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值,都等于0.75。
又如,设a=[10.5,25],则a/5=5\a=[2.10005.0000]。
对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。
对于矩阵运算,一般A\B≠B/A。
4)矩阵的乘方
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
●点运算
在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
点运算符有.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
(2)关系运算
MATLAB提供了6种关系运算符:
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。
关系运算符的运算法则为:
●当两个比较量是标量时,直接比较两数的大小。
若关系成立,关系表达式结果为1,否则为0。
●当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
●当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
例1-3产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。
(1)生成5阶随机方阵A。
A=fix((90-10+1)*rand(5)+10)
(2)判断A的元素是否可以被3整除。
P=rem(A,3)==0
其中,rem(A,3)是矩阵A的每个元素除以3的余数矩阵。
此时,0被扩展为与A同维数的零矩阵,P是进行等于(==)比较的结果矩阵。
(3)逻辑运算
MATLAB提供了3种逻辑运算符:
&(与)、|(或)和~(非)。
逻辑运算的运算法则为:
●在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。
●设参与逻辑运算的是两个标量a和b,那么,
a&ba,b全为非零时,运算结果为1,否则为0。
a|ba,b中只要有一个非零,运算结果为1。
~a当a是零时,运算结果为1;当a非零时,运算结果为0。
●若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。
最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。
●若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。
最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。
●逻辑非是单目运算符,也服从矩阵运算规则。
在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
例1-4建立矩阵A,然后找出大于4的元素的位置。
A=[4,-65,-54,0,6;56,0,67,-45,0]
find(A>4)
1.2.7MATLAB中的矩阵分析
(1)矩阵的转置
转置运算符是单撇号’。
(2)矩阵的旋转
利用函数rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略。
(3)矩阵的逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得:
A·B=B·A=I(I为单位矩阵)则称B为A的逆矩阵,当然,A也是B的逆矩阵。
求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易。
求方阵A的逆矩阵可调用函数inv(A)。
(4)方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。
在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。
(5)矩阵的秩
矩阵线性无关的行数与列数称为矩阵的秩。
在MATLAB中,求矩阵秩的函数是rank(A)。
1.3MATLAB程序设计
1.3.1M文件
用MATLAB语言编写的程序,称为M文件。
M文件可以根据调用方式的不同分为两类:
命令文件(ScriptFile)和函数文件(FunctionFile)。
M文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。
(1)建立新的M文件
启动MATLAB文本编辑器有3种方法:
●菜单操作。
从MATLAB主窗口的File菜单中选择New菜单项,再选择M-file命令,屏幕上将出现MATLAB文本编辑器窗口。
●命令操作。
在MATLAB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文件的内容并存盘。
●命令按钮操作。
单击MATLAB主窗口工具栏上的NewM-File命令按钮,启动MATLAB文本编辑器后,输入M文件的内容并存盘。
(2)打开已有的M文件
打开已有的M文件,也有3种方法:
●菜单操作。
从MATLAB主窗口的File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中所需打开的M文件。
在文档窗口可以对打开的M文件进行编辑修改,编辑完成后,将M文件存盘。
●命令操作。
在MATLAB命令窗口输入命令:
edit文件名,则打开指定的M文件。
●命令按钮操作。
单击MATLAB主窗口工具栏上的OpenFile命令按钮,再从弹出的对话框中选择所需打开的M文件。
例1-5分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。
程序1:
首先建立命令文件并以文件名f2c.m存盘。
clear;%清除工作空间中的变量
f=input('InputFahrenheittemperature:
');
c=5*(f-32)/9
然后在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为:
InputFahrenheittemperature:
73
c=
22.7778
程序2:
首先建立函数文件f2c.m。
functionc=f2c(f)
c=5*(f-32)/9
然后在MATLAB的命令窗口调用该函数文件。
clear;
y=input('InputFahrenheittemperature:
');
x=f2c(y)
输出情况为:
InputFahrenheittemperature:
70
c=
21.1111
x=
21.1111
1.3.2程序控制结构
(1)顺序结构
●数据的输入,该函数的调用格式为:
A=input(提示信息,选项);
例1-5想输入一个人的姓名,可采用命令:
xm=input('What''syourname?
','s');%采用's'选项,则允许用户输入一个字符串。
●数据的输出,其调用格式为:
disp(输出项);
●程序的暂停可以使用pause函数,其调用格式为:
pause(延迟秒数);如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
若要强行中止程序的运行可使用Ctrl+C命令。
(2)选择结构
●if语句
在MATLAB中,if语句有3种格式。
1)单分支if语句:
if条件
语句组
end
当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。
2)双分支if语句:
if条件
语句组1
else
语句组2
end
当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。
例1-6计算分段函数的值。
程序如下:
x=input('请输入x的值:
');
ifx<=0
y=(x+sqrt(pi))/exp
(2);
else
y=log(x+sqrt(1+x*x))/2;
end
y
3)多分支if语句:
if条件1
语句组1
elseif条件2
语句组2
……
elseif条件m
语句组m
else
语句组n
end
语句用于实现多分支选择结构。
例1-7输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。
c=input('请输入一个字符','s');
ifc>='A'&c<='Z'
disp(setstr(abs(c)+abs('a')-abs('A')));
elseifc>='a'&c<='z'
disp(setstr(abs(c)-abs('a')+abs('A')));
elseifc>='0'&c<='9'
disp(abs(c)-abs('0'));
else
disp(c);
end
●switch语句
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch表达式
case表达式1
语句组1
case表达式2
语句组2
……
case表达式m
语句组m
otherwise
语句组n
end
当表达式的值等于表达式1的值时,执行语句组1,当表达式的值等于表达式2的值时,执行语句组2,…,当表达式的值等于表达式m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。
当任意一个分支的语句执行完后,直接执行switch语句的下一句。
例1-8某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):
price<200没有折扣
200≤price<5003%折扣
500≤price<10005%折扣
1000≤price<25008%折扣
2500≤price<500010%折扣
5000≤price14%折扣
输入所售商品的价格,求其实际销售价格。
程序如下:
price=input('请输入商品价格');
switchfix(price/100)
case{0,1}%价格小于200
rate=0;
case{2,3,4}%价格大于等于200但小于500
rate=3/100;
casenum2cell(5:
9)%价格大于等于500但小于1000
rate=5/100;
casenum2cell(10:
24)%价格大于等于1000但小于2500
rate=8/100;
casenum2cell(25:
49)%价格大于等于2500但小于5000
rate=10/100;
otherwise%价格大于等于5000
rate=14/100;
end
price=price*(1-rate)%输出商品实际销售价格
●try语句
语句格式为:
try
语句组1
catch
语句组2
end
try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
例1-9矩阵乘法运算要求两矩阵的维数相容,否则会出错。
先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序如下:
A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.