实验1MATLAB软件的使用与操作资料.docx
《实验1MATLAB软件的使用与操作资料.docx》由会员分享,可在线阅读,更多相关《实验1MATLAB软件的使用与操作资料.docx(23页珍藏版)》请在冰豆网上搜索。
![实验1MATLAB软件的使用与操作资料.docx](https://file1.bdocx.com/fileroot1/2022-12/30/606b984c-89ea-4f5c-a575-09dd7a483aae/606b984c-89ea-4f5c-a575-09dd7a483aae1.gif)
实验1MATLAB软件的使用与操作资料
MATLAB软件的使用与操作
1.1实验目的
学会使用MATLAB软件,进行相应的数学建模计算机仿真与分析
1.2实验环境
PC、Windows7、MATLAB等;分小组操作完成。
1.3准备知识
MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美MathWorks公司推向市场以来,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境.MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎.
在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容.这几乎成了九十年代教科书与旧版书籍的区别性标志.MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具.在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件.在许多国际一流学术刊物上,(尤其是信息科学刊物),都可以看到MATLAB的应用.
1.3.1MATLAB简介
MATLAB,其名字来源于MatrixLaboratory,各取这两个单词的前3个字母,即“矩阵实验室”的单词缩写组合.顾名思义,MATLAB就是一种以线性软件为基础发展起来的科学计算软件,同时它还代表着一种数据可视化的开放型高级编程语言.
MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性.以下为其几个特色:
•功能强的数值运算
在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用,函数的标示自然,使得问题和解答像数学式子一般简单明了,让使用者可全力发挥在解题方面,而非浪费在电脑操作上.
•先进的资料视觉化功能
MATLAB的物件导向图形架构让使用者可执行视觉数据分,并制作高品质的图形,完成科学性或工程性图文并茂的文章.
•高阶但简单的程式环境
作为一种直译式的程式语言,MATLAB容许使用者在短时间内写完程式,所花的时间约为用FORTRAN或C的几分之一,而且不需要编译(compile)及联结(link)即能执行,同时包含了更多及更容易使用的内建功能.
•开放及可延伸的架构
MATLAB容许使用者接触它大多数的数学原使码,检视运算法,更改现存函数,甚至加入自己的函数使MATLAB成为使用者所须要的环境.
•丰富的程式工具箱
基本部分和各种可选的工具箱.基本部分中有数百个内部函数.工具箱提供了使用者在特别应用领域所需之许多函数.现有工具箱有:
符号运算(利用MapleV的计算核心执行)、影像处理、统计分析、讯号处理、神经网路、模拟分析、控制系统、最优化、模糊逻辑、化学计量分析.
1.3.2MATLAB基础
1.3.2.1基本表示方法
1.3.2.1.1变量和赋值语句
MATLAB赋值语句有两种形式:
(1)变量=表达式
(2)表达式
其中“表达式”是用运算符将有关运算量连接起来的式子,其结果是一个矩阵.第二种语句形式下,将表达式的值赋给MATLAB的永久变量ans.如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果.在一条语句中,如果表达式太复杂,一行写不下,可以加上三个小黑点(续行符)并按下回车键,然后接下去再写.例如:
s=1-1/2+1/3-1/4+1/5-1/6+1/7-…
1/8+1/9-1/10+1/11-1/12;
1.3.2.1.2变量命名规则
变量名的大小写是敏感;变量的第一个字符必须为英文字母,而且不能超过31个字符;变量名可以包含下连字符、数字,但不能为空格符、标点.
1.3.2.1.3MATLAB表达式
算术表达式
运算符有:
+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方).
对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系.
关系表达式
运算符有:
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于).
逻辑表达式
运算符有:
&(与)、|(或)和~(非).
在MATLAB下进行基本数学运算,只需将运算式直接打在提示号>>后面,并按Enter键.
MATLAB将计算的结果以ans显示.
例1:
求
的算术运算结果.
(1)用键盘在MATLAB指令窗中输入以下内容
>>(12+2*(7-4))/3^2
(2)在上述表达式输入完成后,按【Enter】键,该就指令被执行.
(3)在指令执行后,MATLAB指令窗中将显示以下结果.
ans=
2
我们也可给运算式的结果设定一个变量x:
x=(5*2+1.3-0.8)*10^2/25
x=
42
变量x的值可以在下个语句中调用:
y=2*x+1
y=
85
例2:
计算圆面积Area,半径r=2,则可键入
>>r=2;%圆半径r=2,
>>area=pi*r^2;%计算圆面积area
>>area=
12.5664
1.3.2.1.4MATLAB矩阵运算
矩阵是MATLAB最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的。
在MATLAB中,不需对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置.
(1)建立矩阵
建立矩阵可以用:
直接输入法、利用函数建立矩阵和利用M文件建立矩阵.
直接输入法是将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔.(也可以用回车键代替分号)
例如,键入命令:
A=[123;456;789]
输出结果是:
A=123
456
789
(2)冒号表达式
在MATLAB中,冒号是一个重要的运算符.利用它可以产生向量,还可用来拆分矩阵.冒号表达式的一般格式是:
e1:
e2:
e3其中e1为初始值,e2为步长,e3为终止值.冒号表达式可产生一个由e1开始到e3结束,以步长e2自增的行向量.
例如:
i=1:
0.5:
10
(3)MATLAB常用数学函数
MATLAB提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵.
例如:
A=[123;456] C=cos(pi*A)
(4)矩阵的基本运算
矩阵的运算基本包括矩阵转置(“'”)、矩阵加和减(“+、-”)、矩阵乘法(“*”)、矩阵除法(“A\b=inv(A)*b”)、矩阵的乘方(“a.^2”).阵列运算功能中(注意:
一定要多加.符号).例如:
+加-减.*乘./左除.\右除.^次方.'转置.
(5)建立矩阵的函数
常用函数有:
eye(size(A))产生与A矩阵同阶的单位矩阵;
zeros(m,n)产生0矩阵;
ones(m,n)产生幺矩阵;
rand(m,n)产生随机元素的矩阵;
size(a)返回包含两个元素的向量;
length(a)返回向量的最大者.
(6)矩阵的拆分
利用冒号表达式获得子矩阵的方式:
1A(:
j)表示取A矩阵的第j列全部元素;A(i,:
)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素.
2A(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表示某一维的末尾元素下标.
3空矩阵的定义X=[],存在于工作空间的矩阵,只是维数为0.
(7)字符串
在MATLAB中,字符串是用单撇号括起来的字符序列.MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同.也可以建立多行字符串矩阵.字符串是以ASCII码形式存储的.abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵.相反,char函数可以把ASCII码矩阵转换为字符串矩阵.
例3:
建立一个字符串向量,然后对该向量做如下处理:
(1)取第1~5个字符组成的子字符串.
(2)将字符串倒过来重新排列.
(3)找小写字母的位置.
(4)统计字符串中小写字母的个数.
在命令窗口输入:
ch1='ABc123d4egkhjk56F';
subch=ch1(1:
5);%取子字符串
revch=ch1(end:
-1:
1);%将字符串倒排
k=find(ch1>='a'&ch1<='z');%找小写字母的位置
length(k)%统计小写字母的个数
注意1/(右除)、\(左除)的区别:
设A是非奇异矩阵,则可以实现A\B和B/A的操作.
\(左除):
A\B等效于A的逆左乘B矩阵,inv(A)*B.
/(右除):
B/A等效于A的逆右乘B矩阵,B*inv(A).
(对于标量的运算,两者相同,4\3=3/4)
注意2点运算:
.*乘./左除.\右除:
两矩阵进行的点运算表示矩阵中的对应元素进行相关的运算.
例:
X=[1,2,3],则X.^2=149.
1.3.3MATLAB程序设计
MATLAB有两种工作方式:
交互式的命令行工作方式和M文件的程序工作方式.前面所介绍在MATLAB所做的运算,是适合于所要计算的算式不太长或是想以交谈式方式做运算,如果要计算的算式很长有数十行或是须要一再执行的算式,则那样的方式就行不通了.
1.3.3.1MATLAB程序编写方法
MATLAB提供了所谓的M-file的方式,可让使用者自行将指令及算式写成巨集程式然后储存成一个特别的文档,其扩展名是m,譬如picture.m,其中的picture就是文件名称.
(1)编写M脚本文件的步骤
图18.1MATLAB文件编辑调试窗口
●点击MATLAB指令窗工具条上的NewFile图标
,就可打开如图18.1所示的MATLAB文件编辑调试器。
用户即可在空白窗口中编写程序。
输入如下一段程序(picture.m)
x=linspace(0,2*pi,20);
y=sin(x);
plot(x,y,'r+')
title('2Dplot')
点击编辑调试器工具条图标
,在弹出的Windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如picture),点击【保存】键,就完成了文件保存.
(2)运行文件
●使picture.m所在目录成为当前目录(系统默认路径),或让该目录处在MATLAB的搜索路径上.
●然后在指令窗口(如图18.2所示)运行以下指令,便可得到图形.
图18.2指令窗口中运行picture.m文件程序
图18.3程序运行后输出的程序图形
1.3.3.2MATLABM文件函数
1.3.3.2.1MATLABM文件函数定义说明
1.M文件函数之间可以互相调用(同一目录下!
!
).
2.MATLAB头一次执行一个M文件函数时,它打开相应的文本文件并将命令编辑成存储器的内部表示,以加速执行以后所有的调用.
3.函数可以有零个或更多个输入参量.函数可以有零个或更多个输出参量.
4.函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目.如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误.
5.当函数有一个以上输出变量时,输出变量包含在括号内。
例如,[V,D]=eig(A).不要把这个句法与等号右边的[V,D]相混淆.右边的[V,D]是由数组V和D所组成.
6.当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的.函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数.事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量.
1.3.3.2.2MATLABMM文件函数示例
[circle.m]
functionsa=circle(r,s)
%CIRCLEplotacircleofradiirinthelinespecifiedbys.
%r指定半径的数值
%s指定线色的字符串
%sa圆面积
%
%circle(r)利用蓝实线画半径为r的圆周线.
%circle(r,s)利用串s指定的线色画半径为r的圆周线.
%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面.
%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面.
ifnargin>2
error(‘输入变量太多!
');
end;
ifnargin==1
s='b';
end;
clf;
t=0:
pi/100:
2*pi;
x=r*exp(i*t);
ifnargout==0
plot(x,s);
else
sa=pi*r*r;
fill(real(x),imag(x),s)
end
axis('square')
Sa=circle(3,‘r’)运行结果
图18.4程序执行后运行结果
1.3.3.3MATLAB控制流
1.3.3.3.1for循环结构
For循环允许一组命令以固定的和预定的次数重复.For循环的一般形式是:
forx=array
{commands}
end
在for和end语句之间的{commands}按数组中的每一列执行一次.For循环可按需要嵌套.可以利用break命令跳出for循环.
例4:
一个简单的for循环示例.
fori=1:
10;%i依次取1,2,…10,.
x(i)=i;%对每个i值,重复执行由该指令构成的循环体,
end;
x%要求显示运行后数组x的值.
x=
12345678910
1.3.3.3.2while循环结构
与For循环以固定次数求一组命令的值相反,While循环以不定的次数求一组语句的值.While循环的一般形式是:
whileexpression
{commands}
end
只要在表达式里的所有元素为真,就执行while和end语句之间的{commands}.
例5:
x=zeros(1,6);%x是一个的零矩阵
i=1;
whilei<=6,
x(i)=1/i;
i=i+1;
end
»x
x=1.00000.50000.33330.25000.20000.1667
可以利用break命令跳出while循环.while循环可按需要嵌套.
1.3.3.3.3if-else-end分支结构
很多情况下,命令的序列必须根据关系的检验有条件地执行.在编程语言里,这种逻辑由某种If-Else-End结构来提供.最简单的If-Else-End结构是:
ifexpression
{commands}
end
如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}.
例6:
ifrand
(1)>0.5
disp('iloveyou');
else
disp('idonotloveyou');
end
1.3.3.3.3switch语句
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch表达式
case表达式1
语句组1
case表达式2
语句组2
……
case表达式m
语句组m
otherwise
语句组n
end
例7:
根据变量num的值来决定显示的内容.
num=input('请输入一个数');
switchnum
case-1
disp('Iamateacher.');
case0
disp('Iamastudent.');
case1
disp('Youareateacher.');
otherwise
disp('Youareastudent.');
end
1.3.3.3.4MATLAB全局变量
在MATLAB中,全局变量用命令global定义。
函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离.但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量.全局变量的作用域是整个MATLAB工作空间,即全程有效.所有的函数都可以对它进行存取和修改.因此,定义全局变量是函数间传递信息的一种手段.
例8:
全局变量应用示例:
先建立函数文件wadd.m.该函数将输入的参数加权相加.
functionf=wadd(x,y)
%addtwovariable
globalALPHABETA
f=ALPHA*x+BETA*y;
在命令窗口中输入:
globalALPHABETA
ALPHA=1;
BETA=2;
s=wadd(1,2)
输出为:
s=5
1.3.3.3.5数据的输入输出
(1)input函数
用于向计算机输入一个参数.调用格式:
A=input(提示信息,选项);
注:
‘s’选项,则允许用户输入一个字符串.
例9:
求一元二次方程a2+bx+c=0的根.
a=input('a=?
');
b=input('b=?
');
c=input('c=?
');
d=b*b-4*a*c;
x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]
将该程序以aa.m文件存盘,然后运行aa.m文件
(2)pause函数
暂停程序的执行.调用格式:
pause(延迟秒数)
注:
如果省略延迟时间,直接使用pause,则将暂停程
序,直到用户按任一键后程序继续执行.
(3)disp函数命令窗口输出函数.
调用格式:
disp(输出项)
注:
输出项为字符串或矩阵.
例10:
A='Hello,MATLAB';
disp(A)
输出为:
Hello,MATLAB
1.3.3.3.5程序的调用
(1)主函数
M文件中的第一个函数就叫做主函数,前边章节中所引用的函数事实上都是主函数,主函数之后可以是任意数量的子函数,它们可以作为主程序的子程序.一般来说,在命令窗口或是其他的M文件只能调用主函数,调用的时候就是直接调用其函数名.
–比如,函数average的M文件average.m如下:
functiony=average(x)%AVERAGEMeanofvectorelements.
y=sum(x)/length(x);%Actualcomputation
(2)子函数
与其他的高级语言一样,在MATLAB7语言中也可以很方便地定义子函数,用来扩充函数的功能。
在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。
子函数只能为主函数或同一主函数下的其他子函数所使用。
(必须和相应的主函数放到同一目录下!
)
例11:
利用函数的递归调用,求n!
.
n!
本身就是以递归的形式定义的:
显然,求n!
需要求(n-1)!
,这时可采用递归调用.递归调用函数文件factor.m如下:
functionf=factor(n)
ifn<=1
f=1;
else
f=factor(n-1)*n;%递归调用求(n-1)!
end
(3)局部函数
MATLAB7语言中把放置在目录private下的函数称为局部函数,这些函数只有private目录的父目录中的函数才可以调用,其他目录下的函数不能调用.局部函数与子函数所不同的是,局部函数可以被其父目录下的所有函数所调用,而子函数则只能被其所在的M文件的主函数所调用.所以,局部函数在可用的范围上大于子函数;在函数编辑的结构上,局部函数与一般的函数文件的编辑相同,而子函数只能在主函数文件中编辑.
1.3.4MATLAB图形功能
1.3.4.1MATLAB二维图形
作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供了大量的二维、三维图形函数.由于系统采用面向对象的技术和丰富的矩阵运算,所以在图形处理方面即常方便又高效.
表18.1MATLAB中基本绘图函数
命令
含义
plot
建立向量或矩阵各队队向量的图形
title
给图形加标题
xlabel
给x轴加标记
ylabel
给y轴加标记
text
在图形指定的位置上加文本字符串
gtext
在鼠标的位置上加文本字符串
grid
打开网格线
1.3.4.2plot函数调用格式:
格式:
plot(x,y1,’cs’,...)
Plot为绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x及y座标,及曲线的性质(系统默认亦可),其中c表示颜色,s表示线型.
例12:
x=0:
0.001:
10;%0到10的1000个点的x座标
y=cos(x);%对应的y座标
%plot(x,y);%绘图
Y=cos(10*x);
axis([0,6,-1.5,1])%用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范围
plot(x,y,‘r:
’,x,Y,‘b’)%同时画两个函数
MATLAB也可对图形加上各种注解与处理:
xlabel('x轴');%x轴注解
ylabel('y轴');%y轴注解
title('余弦函数');%图形标题
legend('y=cos(x)');%图形注解
gtext('y=cos(x)');%图形注解,用鼠标定位注解位置
gridon;%显示格线
图18.5程序执行后运行结果
1.3.4.3使用Insert菜单对图形进行处理
例13:
x=linspace(-3,5,100);
y=cos(x);
z=sin(x);
plot(x,y,x,z)
title('一条正弦曲线和一条余弦曲线');
xlabel('x的取值范围')
ylabel('Y和Z的值')
图18.6利用程序生成图形后,基于Insert菜单对图形处理
表18.2plot函数绘图的参数设置
字元
颜色
字元
图线型态
y
黄色
.
点
k
黑色
o
圆
w
白色
x
x
b
蓝色
+
+
g
绿色
*
*
r
红色
-
实线
c
亮青色
:
点线
m
锰紫色
-.
点虚线
字元
颜色
字元
图线型态
1.3.4.4