matlab使用手册.docx
《matlab使用手册.docx》由会员分享,可在线阅读,更多相关《matlab使用手册.docx(35页珍藏版)》请在冰豆网上搜索。
matlab使用手册
附录
MATLAB简介
这里介绍MATLAB一些入门知识,包括MATLAB桌面和窗口,MATLAB命令格式、数据格式、数据文件和变量管理,MATLAB的数组和矩阵运算,MATLAB的字符串、元胞和结构等数据类型,MATLAB的程序设计方法,MATLAB作图方法在线帮助的使用和程序文件和目录的管理等。
表一MATLAB的基本命令
主题词
含义
主题词
含义
format
设置数据显示格式
feval
函数求值
who
显示变量名
input
提示输入
whos
显示变量信息
disp
输出
clear
清除内存变量
tic
启动秒表
save
保存工作变量到文件
toc
时间读数(秒)
load
从文件装载变量
help
帮助
linspace
区间等分
lookfor
查找
length
获取数组长度
type
列程序清单
size
矩阵大小
which
查找文件目录
max
最大值
double
双精度
min
最小值
str2num
字符串转化为数值
sum
求和
num2str
数值转化为字符串
find
条件检索
一、MATLAB桌面
启动MATLAB后,就进入MATLAB的桌面,图1为MATLAB6.1的默认(Default)桌面。
第一行为菜单栏,第二行为工具栏,下面是三个最常用的窗口。
右边最大的是命令窗口(CommandWindow),左上方前台为发行说明书窗口(Launchpad),后台为工作空间(Workspace),左下方为命令历史(CommandHistory)后台为当前目录(CurrentDirectory)。
1.窗口
(1)命令窗口
该窗口是进行MATLAB操作最主要的窗口。
窗口中“>>”为命令输入提示符,其后输入运算命令,按回车键就可执行运算,并显示运算结果.。
图1
(2)发行说明书窗口
发行说明书窗口是MATLAB所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。
(3)工作空间
在默认桌面,位于左上方窗口前台,列出内存中MATLAB工作空间的所有变量的变量名、尺寸、字节数。
用鼠标选中变量,击右键可以打开、保存、删除、绘图等操作。
(4)当前目录
在默认桌面,位于左下方窗口后台,用鼠标点击可以切换到前台。
该窗口列出当前目录的程序文件(.m)和数据文件(.mat)等。
用鼠标选中文件,击右键可以进行打开、运行、删除等操作。
(5)命令历史(CommandHistory)
该窗口列出在命令窗口执行过的MATLAB命令行的历史记录。
用鼠标选中命令行,击右键可以进行复制、执行(EvaluateSelection)、删除等操作。
除上述窗口外,MATLAB常用窗口还有编程器窗口、图形窗口等。
二、数据和变量
1.表达式
在命令窗口作一些简单的计算,就如同使用一个功能强大的计算器,使用变量无须预先定义类型。
例如,设球半径为r=2,求球的体积
。
>>r=2%表达式将2赋予变量r
r=%系统返回r的值
2
>>v=4/3*pi*r^3%pi为内置常量
,乘方用^表示
v=
33.5103
几个表达式可以写在一行,用分号(;)或逗号(,)分割,用分号(;)使该表达式运算结果不显示,而逗号(,)则显示结果。
也可以将一个长表达式分在几行上写,用三点(…)续行。
若需要修改已执行过的命令行,可以在命令历史中找到该命令行复制,再粘贴至命令窗口修改。
也可以直接使用键盘↑↓调出已执行过的命令行修改。
2.数据显示格式
MATLAB默认的数据显示格式为短格式(short):
当结果为整数,就作为整数显示;当结果是实数,以小数点后四位的长度显示。
若结果的有效数字超出一定范围,以科学计数法显示(如3.2000e-006表示
)。
数据显示格式可使用命令Format改变。
例如:
>>formatlong;v%长格式,16位
v=
33.51032163829112
>>formatshort;v%短格式
v=
33.5103
>>formatrational;v%有理格式,近似分数
v=
6501/194
3.复数
MATLAB中复数可以如同实数一样,直接输入和计算。
例如:
>>a=1+2i;b=5-4*i;c=a/b
c=
-0.0732+0.3415i
4.预定义变量
MATLAB有一些预定义变量(表1),启动时就已赋值,可以直接使用,如前我们使用的圆周率pi和虚数单位i.
表1常用预定义变量
变量名
说明
i或j
虚数单位
pi
圆周率3.14159…
eps
浮点数识别精度2^(-52)=
realmin
最小正实数
realmax
最大正实数
inf
无穷大
NaN
没有意义的数
预定义变量在工作空间观察不到。
如果预定义变量被用户重新赋值,则原来的功能暂不能使用。
当这些用户变量被清除(clear)或MATLAB重新启动后,这些功能得以恢复。
5.用户变量
MATLAB变量名总以字母开头,以字母、数字或下划线组成,区分大小写,有效字符长度为63个。
如A,a,a1,a_b都是合法的,且a与A表示不同变量。
在CommandWindow中使用的变量一旦被赋值,就会携带这个值存在于工作空间,直到被清除或被赋予新的值。
ans是系统一个特别的变量名。
若一个表达式运算结果没有赋予任何变量,系统自动用ans存放答案。
例如:
>>A=5+4i;b=5-4*i;B=1;A*b%没有定义A*b的输出变量
ans=
41%ans来接受计算结果,注意这是大写A与小写b的乘积,尽管我们可以使用工作空间来查询和清除变量,但使用下列命令方式更快捷:
>>whos%查询Workspace中的变量列表
NameSizeBytesClass
A1x116doublearray(complex)
B1x18doublearray
a1x116doublearray(complex)
ans1x18doublearray
b1x116doublearray(complex)
c1x116doublearray(complex)
Grandtotalis6elementsusing80bytes
>>A%查询变量A的值
A=
5.0000+4.0000i
>>clearA%清除变量A
>>A%再查询A的值,已经不存在了
Undefinedfunctionorvariable'A'.
>>clear%清除Workspace中所有变量
>>whos%Workspace中已没有任何变量了
三、数组和矩阵运算
MATLAB基本数据单元是无需指定维数的数组。
数组运算是MATLAB最鲜明的特点,一方面可以使得计算程序简明易读,另一方面可以提高计算速度。
1.数组的输入
最常用的数组是双精度数值数组(doublearray)。
一维数组相当于向量,二维数组相当于矩阵,一维数组可以视为二维数组的特例。
二维数组的第一维称为“行”,第二维称为“列”。
MATLAB数组无需预先定义维数。
直接输入数组的元素,用中括号([])表示一个数组,同行元素间用空格或逗号分隔,不同行间用分号或回车分隔,例如:
>>clear;a=[1,2,3;4,5,6;7,8,9]
a=
123
456
789
或
>>a=[123%这种方式特别适用于大型矩阵
456
789]
a=
123
456
789
对于等差数列构造的一维数组,可用冒号运算生成,也可用函数linspace生成。
>>b=0:
3:
10%初值:
增量:
终值
b=
0369
>>b=0:
10%增量为1可省略
b=
012345678910
>>b=10:
-3:
0%递减
b=
10741
>>b=linspace(0,10,4)%将区间[0,10]等分为4-1=3份
b=
03.33336.666710.0000
>>length(b)%查询b的长度
ans=
4
>>b(3)%查询b的第三个元素
ans=
6.6667
>>b([1,end])%查询b的首和尾元素
ans=
010
二维数组元素双下标编址按通常方式,单下标编址按列排序。
>>size(a)%查询数组a的尺寸
ans=
33
>>a(3,2),a(6)
ans=
8
ans=
8
>>c=a([13],[23])%提取a的第一、第三行和第二、第三列(分块矩阵)
c=
23
89
>>d=a(2,:
)%提取a的第二行
d=
456
>>a(:
)%将a所有元素按单下标顺序排为列向量
ans=
1
4
7
2
5
8
3
6
9
一些特殊的二维数组可以用函数产生,例如:
>>a=zeros(2,4)%生成2行4列零矩阵
a=
0000
0000
>>b=ones(1,4)%生成1行4列1矩阵
b=
1111
>>c=[a;b]%拼接
c=
0000
0000
1111
>>c(2,1)=100%修改部分元素
c=
0000
100000
1111
>>reshape(c,2,6)%按2行6列重排矩阵元素
ans=
010010
10001001
注意:
数组下标对应矩阵的行和列,编址一律从1开始,不能用0.
矩阵输入也可用“load”命令从外部数据文件导入
2.数组运算
数组运算是指数组对应元素之间的运算,也称点运算。
矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所数组乘法、乘方和除法的运算符前特别加了一个点。
特别要区分数组运算在乘法、乘方和除法上的意义和表示上与矩阵运算的不同。
表2数组运算符
运算
符号
说明
数组加与减
A+B与A-B
对应元素之间加减
数乘数组
k*A或A*k
k乘A的每个元素
数与数组加减
k+A或k-A
k加(减)A的每个元素
数组乘数组
A.*B
点运算只有点乘、点乘方、点除三个,表示对应元素之间的运算;(.*)是一个整体,点(.)不能漏掉,(.)和(*)之间也不能有空格
数组乘方
A.^k,k.^A
数除以数组
k./A
数组除法
左除A.\B,右除B./A
>>clear;A=[1-1;02];B=[01;1-1];
>>A.*B%注意不是A*B
ans=
0-1
0-2
>>A.\B,A./B
Warning:
Dividebyzero.
ans=
0-1.0000
Inf-0.5000
Warning:
Dividebyzero.
ans=
Inf-1
0-2
>>A.^2
ans=
11
04
>>1./A
Warning:
Dividebyzero.
ans=
1.0000-1.0000
Inf0.5000
3.矩阵运算
矩阵是一个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。
但是有两点需要注意:
(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义不同:
矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;
(2)数与矩阵加减、矩阵除法在数学上是没有意义的,在MATLAB中为简便起见,定义了这两类运算,其含义见表3.
表3矩阵运算符
运算
符号
说明
转置
A'
加与减
A+B与A-B
同数组运算
数乘矩阵
k*A或A*k
同数组运算
矩阵乘法
A*B
矩阵乘方
A^k
数与矩阵加减
k+A与k-A
k+A等价于k*ones(size(A))+A
矩阵除法
左除A\B,右除B/A
它们分别为矩阵方程AX=B和XA=B的解
>>A=[12;34];B=[43;21];
>>100+A
ans=
101102
103104
>>A*B,A.*B%注意矩阵运算和数组运算的区别
ans=
85
2013
ans=
46
64
>>A\B,B/A,A.\B,B./A%注意矩阵运算和数组运算的区别
ans=
-6.0000-5.0000
5.00004.0000
ans=
-3.50002.5000
-2.50001.5000
ans=
4.00001.5000
0.66670.2500
ans=
4.00001.5000
0.66670.2500
4.数学函数
数组的数学函数也是按每个元素的运算,使用通常的函数符号,常用数学函数见表4
表4数学函数
函数
意义
函数
意义
sin
正弦
fix
向0取整
cos
余弦
mod
模余
tan
正切
rem
除法余数
cot
余切
abs
绝对值(模)
asin
反正弦
exp
指数函数
acos
反余弦
log
自然对数
sqrt
开方
log10
以10为底的对数
>>A=[4-1;32];
>>B=exp(A)
B=
54.59820.3679
20.08557.3891
>>C=fix(B)
C=
540
207
>>D=sin(C)
D=
-0.55880
0.91290.6570
>>E=log(D)
Warning:
Logofzero.
E=
-0.5820+3.1416i-Inf
-0.0911-0.4201
5.关系与逻辑运算
MATLAB的关系运算和逻辑运算符都是对于元素的操作,其结果是特殊的逻辑数组(logicalarray)表5,“真”用1表示,“假”用0表示,而逻辑运算中,所有非零元素作为1(真)处理。
表5关系运算和逻辑运算
运算符
含义
运算符
含义
<
小于
&
与
<=
小于等于
|
或
>
大于
~
非
>=
大于等于
all
==
等于
any
~=
不等于
>>A=-2:
4,B=4:
-1:
-2
A=
-2-101234
B=
43210-1-2
>>A>B
ans=
0000111
>>A==B
ans=
0001000
>>A&B%逻辑运算中,所有非零元素作为1(真)处理
ans=
1101011
>>A|B
ans=
1111111
>>find(abs(A)>=2)%返回绝对值大于或等于2的元素的下标
ans=
1567
>>any(abs(A)>5)%若存在绝对值大于5的元素,返回1
ans=
0
>>all(abs(A)>5)%若所有元素绝对值大于5,返回1
ans=
0
四、字符串、元胞和结构
除数值(double)以外,常用的数据类型还有字符(char)、元胞(cell)和结构(structure),由此进一步组成字符数组(chararray)、元胞数组(cellarray)和结构数组(structurearray).
1.字符串
MATLAB字符串用单引号对来标识,其数据类型为字符数组。
>>a1='Helloeveryone'
a1=
Helloeveryone
>>a2='各位好'%注意单引号,不是双引号
a2=
各位好
>>a=[a1,'.',a2,'.']%字符串拼接
a=
Helloeveryone.各位好.
>>size(a)
ans=
119%共19个字符
>>double(a)
ans=
Columns1through8
7210110810811132101118
Columns9through16
1011141211111101014647351
Columns17through19
529234781146%中文ASCII码很大
>>a=char(ans)
a=
Helloeveryone.各位好.
数字字符串与数值之间也可以用num2str和str2num转换。
一个数组的元素要么都是数值,要么都是字符串,数值转换后可以与字符串出现在同一数组中。
>>a=12;b=sqrt(a);
>>['a=',num2str(a),',a的开方=',num2str(b)]
ans=
a=12,a的开方=3.4641
MATLAB命令可以定义成一个字符串,使用eval可以使该字符串所表达的MATLAB命令得到执行。
>>fun='x.^2.*sin(x)';
>>x=1;eval(fun)
ans=
0.8415
>>x=1:
3;eval(fun)
ans=
0.84153.63721.2701
2.元胞和结构
不管是数值数组还是字符数组,其数据结构必须是整齐的。
首先数值和字符不能混合,其次小数组拼接成大数组时,其尺寸(size)必须相符(agree)。
例如:
>>A=['first';'second']%错误
Errorusing==>vertcat
Allrowsinthebracketedexpressionmusthavethesame
numberofcolumns.
将不同类型、不同尺寸的数组,加大括号({}),可构成一个元胞。
几个元胞可以构成元胞数组。
>>Ac1={'first';1:
3};Ac2={'second';[12;34]};
>>Ac=[Ac1,Ac2]
Ac=
'first''second'
[1x3double][2x2double]
>>size(Ac)
ans=
22
>>Ac(2,1)%小括号,查询Ac的第二行第一列元素
ans=
[1x3double]
>>Ac{2,1}%大括号,查询Ac的第二行第一列元素的具体内容
ans=
123
一个结构通过“域”来定义,比元胞更丰富、更灵活。
几个结构可以合成一个结构数组,但这些结构的域名必须一致。
>>As1.f1='first';As1.f2='second';As2.f1=1:
3;As2.f2=[12;34];
>>As=[As1;As2]
As=
2x1structarraywithfields:
f1
f2
>>size(As)%注意其size结果与元胞数组不同
ans=
21
>>As(2,1).f1
ans=
123
>>As.f1
ans=
first
ans=
123
元胞数组与结构数组可以用struct2cell和cell2struct函数进行适当的转换。
>>Bc=struct2cell(As)%注意结果与Ac的不同
Bc=
'first'[1x3double]
'second'[2x2double]
>>Bs=cell2struct(Ac,{'one','two'},1)%定义域名,并指定取域名的维
Bs=
2x1structarraywithfields:
one
two
看一看Workspace有哪些类型,并观察其字节数。
五、程序设计
1.控制流
前面我们用的命令都是顺序结构的,对于复杂的计算,需要循环和分支等复杂的程序结构。
MATLAB控制流语法都以end结尾。
常用控制流见表6.
表6MATLAB常用控制流
类型
语法
解释
循环语句
for循环变量=数组,
命令组
end
对于循环变量依次取数组中的值,循环执行命令组直到循环变量遍历数组。
数组最常用的形式是初值:
增量:
终值
循环语句
while条件式,
命令组
end
当条件式满足,循环执行命令组直到条件不满足。
使用While语句要注意避免出现死循环
分支语句
if条件1,
命令组1;
elesif条件2,
命令组2;
……;
else,
命令组k;
end
如果条件式1满足,则执行命令组1,且结束该语句;否则检查条件式2,若满足则执行命令组2,且结束该语句;……;若所有条件式都不满足,则执行命令组k,并结束该语句。
最常用的格式是
if条件式
命令组
end
分支语句
switch分支变量
case值1,
命令组1;
case值2,
命令组2;
……;
otherwise
命令组k;
end
若分支变量的取值1,则执行命令组1,且结束该语句;若分支变量的取值2,则执行命令组2,且结束该语句;……若分支变量不取所列出的值,则执行命令组k
中断语句
pause
暂停执行,直到击键盘,pause(n)为暂停n秒后再继续
中断语句
break
中断执行,用在循环语句内表示跳出循环
中断语句
return
中断执行该程序,回到主调函数或命令窗口
中断语句
error(字符串)
提示错误并显示字符说明
例1计算
>>clear;s=0;
>>forn=1:
100
s=s+1/n/n;
end
>>s
s=
1.6350
2.M脚本文件
复杂程序结构在命令窗口调试保存都不方便,所以进行复杂的运算大都使用程序文件。
从命令窗口用命令“edit”就进入MATLAB的程序编辑器窗口,用以编写用户的M文件。
M文件可分为两类:
M脚本文件和M函数文件。
将多条MATLAB语句写在编辑器中,并以.m文件保存在适当的目录中(这个目录须为MATLAB的搜索目录),就得到一个M脚本。
如我们将例1中的几条语句写在编辑器中,
保存为naega_1,然后在命令窗口执行:
>>naega_1
s=
1.6350
执行M脚本文件也可以在程序编辑器的Debug菜单选Run。
使用编辑器也可打开和修改M文件、观察变量值、调试程序等。
注意:
M文件名一律以字母开头,以字母、数字或下划线组成,不要含有空格、减号等,并要防止它与系统的变量名、系统内部的M函数名冲突。
例如1.m,ega-1.m,ega.1.m都是不合法的。
另外,别忘了每次修改程序后都要存盘。