SXSYAAMATLAB使用入门.docx
- 文档编号:24049898
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:74
- 大小:382.12KB
SXSYAAMATLAB使用入门.docx
《SXSYAAMATLAB使用入门.docx》由会员分享,可在线阅读,更多相关《SXSYAAMATLAB使用入门.docx(74页珍藏版)》请在冰豆网上搜索。
SXSYAAMATLAB使用入门
补充材料1MATLAB使用入门
练习题
MATLAB是MATrixLABoratory(矩阵实验室)的缩写,是由美国MathWorks公司20世纪80年代初开发的一套以矩阵计算为基础的科学和工程计算软件.
它将数值计算、可视化和编程功能集成在非常便于使用的环境中,并具有方便的绘图功能和为解决各种特殊的科学和工程计算问题提供的许多工具箱(toolbox),具有计算功能强、编程效率高、使用简便、易于扩充等特点,目前已经发展成为国际上最优秀的高性能科学和工程计算软件之一.以下给出MATLAB简要的使用说明,要了解更多的内容请使用MATLAB在线帮助系统或参考有关书籍.
先大致介绍一下MATLAB的工作界面和经常使用的各种窗口.假定在您的计算机里已经安装了MATLAB6.5.1或以上版本的软件,则在WINDOWS系统
图1AMTALAB的初始界面(6.5版)
图1BMTALAB的初始界面(7.6版(2008a))
下启动MATLAB软件将在屏幕上看到如图1所示的MATLAB的主窗口(桌面).在该主窗口中,除了WINDOWS应用程序一般应该具有的菜单和工具栏外,还包括了右边的命令窗口和左边的工作区/当前目录窗口、命令历史窗口,以及工具栏后边的显示和修改当前目录名的小窗口等.命令窗口下的提示符为“>>”,表示MATLAB已经准备好,可以接受用户在此输入行命令,命令和程序执行的结果也显示在这个窗口;过去执行过的命令名则依次显示在命令历史窗口中,可以备查.工作区窗口内用于显示当前内存中变量的信息(包括变量名、维数、具体取值等),初始时这部分信息为空;当在该窗口中选择“当前目录”(CurrentDirectory)选项卡时,该窗口可以切换成当前目录窗口,显示当前目录下的文件信息.此外,在MATLAB中经常会使用到的还有另外两个窗口:
一个是显示和编辑MATLAB源程序文件的编辑窗口,另一个是打开在线帮助系统时的帮助文件显示窗口.
1矩阵及其运算
MATLAB的主要数据对象是矩阵,标量、行向量(数组)、列向量都是它的特例,最基本的功能是进行矩阵运算,但MATLAB对于矩阵有一些特殊规定的操作、运算方式.
1.1矩阵的直接输入
矩阵输入有多种办法,如
直接输入每个元素;
由语句或函数生成;
在M文件(以后介绍)中生成等.
MATLAB中直接输入矩阵时不用描述矩阵的类型和维数,它们由输入的格式和内容决定.小规模的矩阵可以用排列各个元素的方法输入,元素放在方括号中,同一行元素用逗号或空格分开,不同行的元素用分号或回车分开.如在命令窗口中键入(>>表示在命令窗口中的提示符下键入,表示回车,下同).
>>A=[1,2,3;4,5,6]
或
>>A=[123;456]
或
>>A=[123
456]
都输入了一个2×3矩阵A,屏幕上显示的输出为
A=
123
456
矩阵中的元素可以用它的行、列数(放在圆括号中)进行访问,例如(以下在回车符后直接给出屏幕上显示的输出)
>>a=A(2,1)(MATLAB区分大小写字母,a和A是不同的变量)
a=
4
或者不指定输出变量,MATLAB将回应ans(answer的缩写),如
>>A(2,3)
ans=
6
矩阵中的元素也可以仅用一个下标来访问,此时元素是按列优先排序的,例如
>>b=A(3)
b=
2
>>A(4)
ans=
5
A输入后一直保存在内存工作区(工作空间,Workspace)中,也会显示在工作区窗口内(包括变量名、维数、具体取值等).工作区内的变量可随时直接调用,除非被清除或替代.
可以直接修改矩阵的元素,如
>>A(2,1)=7
A=
123
756
>>A(3,4)=1
A=
1230
7560
0001
原来的A没有3行4列,MATLAB自动增加行列数,对未输入的元素赋值0.
1.2矩阵的函数生成
MATLAB提供了一些函数来构造特殊矩阵,如
>>w=zeros(2,3)(2×3零矩阵)
w=
000
000
>>u=ones(3)(3×3全1矩阵,方阵只需输入行数,这几个矩阵生成函数均如此)
u=
111
111
111
>>v=eye(3,4)(对角线为1的3×4矩阵)
v=
1000
0100
0010
>>x=rand(1,3)(1×3的(0,1)均匀分布随机矩阵)
x=
0.95010.23110.6068
矩阵生成函数还有
m×n的标准正态分布矩阵生成函数randn(m,n);
n阶Hilbert矩阵hilb(n);
n阶幻方矩阵magic(n);
n阶pascal矩阵pascal(n)
等,请读者不妨试试.
1.3矩阵的裁剪与拼接
从一个矩阵中取出若干行(列)构成新矩阵称为裁剪,MATLAB中“:
”是非常重要的裁剪工具,如
>>A(3,:
)(A的第3行)
ans=
0001
>>A(:
2)(A的第2列)
ans=
2
5
0
>>B=A(1:
2,:
)(A的第1~2行)
B=
1230
7560
>>C=B(:
2:
4)(B的第2~4列)
C=
230
560
>>D=A(2:
end,[2,4])(A的第2行至最后行,第2,4列;)
D=(end表示最后可能的下标值)
50(等价于A(2:
3,[2,4])或A([2,3],[2,4]))
01
>>D(:
1)=[](删除D的第1列,[]为空集符号)
D=
0
1
将几个矩阵接在一起称为拼接,左右拼接时行数要相同,上下拼接时列数要相同,如
>>E=[C,ones(2,3)]
E=
230111
560111
>>F=[A(1:
2,:
);eye(1,4)]
F=
1230
7560
1000
>>G=[C,zeros
(2);9,F(2,:
)]
G=
23000
56000
97560
>>H=C(:
)(C按列拼接成一列向量)
H=
2
5
3
6
0
0
1.4矩阵的基本运算
MATLAB中提供了下列矩阵运算符:
+加法;-减法;'转置;*乘法;^乘幂;\左除;/右除.
它们要符合矩阵运算的规律,如果矩阵的行列数不符合运算符的要求,将产生错误信息.这里只将左除和右除的用法叙述如下:
设A是可逆矩阵,AX=B的解是A左除B,即X=A\B(当B为列向量时,得到方程组的解);XA=B的解是A右除B,即X=B/A.
还应注意标量与矩阵进行上述运算的含义,请看
>>E=E+3(E的每个元素加3,即)
E=(标量3相当于元素全为3的与E同维数的矩阵)
563444
893444
>>CC=C(:
1:
2)*(1+i)(C的1,2列的每个元素乘以复数(1+i))
CC=
2.0000+2.0000i3.0000+3.0000i
5.0000+5.0000i6.0000+6.0000i
>>C1=CC'(对复数矩阵,矩阵的转置是共轭转置)
C1=
2.0000-2.0000i5.0000-5.0000i
3.0000-3.0000i6.0000-6.0000i
1.5矩阵的特殊运算
MATLAB为矩阵提供了下面的特殊“点”运算:
.'“点”转置;.*“点”乘法;.^“点”乘幂;
.\“点”左除;./“点”右除.
“点”转置是复数矩阵的非共轭转置.如
>>C2=CC.'(矩阵的非共轭转置,请与上面C1的结果比较)
C2=
2.0000+2.0000i5.0000+5.0000i
3.0000+3.0000i6.0000+6.0000i
后四个“点”运算实际上是对相同维数的矩阵的对应元素进行相应的运算.如
>>A=[1,0,2;3,4,0](对A重新赋值)
A=
102
340
>>B=E(:
1:
3)(对B重新赋值)
E=
563
893
>>A.*B
ans=
506
24360
>>B.^A
ans=
519
51265611
>>A.\B(与B./A的结果相同)
ans=
5.0000Inf1.5000(Inf表示正无穷)
2.66672.2500Inf
>>B.\A(与A./B的结果相同)
ans=
0.200000.6667
0.37500.44440
应注意上述运算中两个矩阵的维数应该相同.至于标量与矩阵进行上述运算的含义,请看
>>2.^A(标量2相当于元素全为2的与A同维数的矩阵)
ans=
214
8161
>>A.^2
ans=
104
9160
1.6行向量的特殊输入方式
行向量与一维数组是一样的数据对象,除了作为矩阵的特例像1×n矩阵一样地输入外,常采用“:
”和函数linspace,logspace两种输入方式,它们的用法可以从下面的例子知道.
>>a=1:
5(从1到5公差为1(可缺省)的等差数组)
a=
12345
>>b=1:
2:
7(从1到7公差为2的等差数组,如果)
b=(输入b=1:
2:
8,得到同样结果)
1357
>>c=6:
-3:
-6(从6到-6公差为-3的等差数组)
c=
630-3-6
>>b=[0:
2:
8,ones(1,3)](等差数组和行向量拼接)
b=
02468111
>>linspace(0,1,9)(从0到1共9个数值的等差数组)
ans=
00.12500.25000.37500.50000.62500.75000.87501.0000
即
linspace(a,b,n)
生成从a到b共n个数值的等差数组,公差不必给出.与它相仿的是
logspace(a,b,n)
生成从10a到10b共n个数值的等比数组.
4等分(MATLAB中的符号是pi)的数组可以用这两种方式输入:
>>x=0:
pi/4:
pi
ans=
00.78541.57082.35623.1416
>>x=linspace(0,pi,5)
输出同上.
请特别注意“:
”的用法,其实矩阵的裁剪中用到的“:
”的含义与此是完全相同的.如
>>G(1:
2:
end,4:
-1:
2)(与G([13],[432])等价)
ans=
003
657
2语句和函数以及其他数据类型
2.1语句
MATLAB语句的一般形式为:
变量=表达式
如果你在命令窗口中输入一个语句并以回车结束,则在命令窗口中显示计算的结果;如果语句以分号“;”结束,MATLAB只进行计算,不显示计算的结果.如果一个表达式太长,可以用续行号“...”将其延续到下一行.正如上节所述,当前内存中变量的信息显示在工作区窗口(包括变量名、维数、具体取值等);一个语句中可以只有表达式(即“变量=”省略),此时名为ans的变量自动建立.
此外,一行中可以写几个语句,它们之间要用逗号或分号分开.如
>>a=[12345];b=[13579];...
c=a.*b,d=a*b',e=a'*b
c=
16152845
d=
95
e=
13579
26101418
39152127
412202836
515253545
MATLAB的变量由字母、数字和下划线组成,最多31个字符,区分大小写字母,第一个字符必须是字母.对于变量,MATLAB不需要任何类型的说明或维数语句.当输入一个新变量名时MATLAB自动建立变量并为其分配内存空间.
MATLAB有几个特殊的常量:
pi圆周率;eps最小浮点数;Inf正无穷大,特指1/0;
NaN非数(NotANumber),特指0/0;i,j都是虚数单位.
请看
>>a=[010],b=[100],c=a./b
a=
010
b=
100
Warning:
Dividebyzero.
c=
1InfNaN
变量也可以用于记录字符串.字符串是用单引号括起来的字符集合,可以像向量一样进行拼接和裁剪,如
>>s1='Hello';s2='every';s3='body';s=[s1,',',s2,'',s3],ss=s(1:
5)
s=
Hello,everybody
ss=
Hello
2.2标量函数
MATLAB提供了大量的数学函数,按照其用法分为标量函数、向量函数和矩阵函数3种类型.
常用的标量函数列出如下,只作必要的注释:
三角函数:
sincostancotseccscasinacosatanacotasecacsc
sinhcoshtanhasinhacoshatanh
其他基本函数:
sqrt(正的平方根)pow2(2的指数)exp(e的指数)log(自然对数)
log10(常用对数)log2(以2为底的对数)abs(绝对值或复数模)
round(四舍五入取整)floor(向-方向取整)ceil(向+方向取整)
fix(向0方向取整)sign(符号函数)real(取实部)imag(取虚部)
angle(取辐角)rats(有理逼近)
这些函数本质上是作用于标量的,当它们作用于矩阵(或数组)时,是作用于矩阵(或数组)的每一个元素.请看下面的例子:
>>x=(0:
0.2:
1)*pi;y=sin(x)
y=
00.58780.95110.95110.58780.000
>>a=[-3.5,4.6];...
b=round(a),c=floor(a),d=ceil(a),e=fix(a),f=rats(a)
b=
-45
c=
-44
d=
-35
e=
-34
f=
-7/223/5
另一个计算函数值的常用命令是feval(F,x),F是表示函数名的字符串(也可以是函数句柄,即在函数名前加符号@;建议当函数名出现在其他函数的自变量列表中时,均采用函数句柄形式),如
>>x=(0:
0.2:
1)*pi;y=feval('sin',x)或
>>x=(0:
0.2:
1)*pi;y=feval(@sin,x)(函数句柄形式)
均得到与上面同样的结果:
y=
00.58780.95110.95110.58780.000
简单的函数可以采用inline函数形式输入(该函数返回的是函数句柄),如
>>x=(0:
0.2:
1)*pi;y=feval(inline('sin(x)+2'),x)
y=
2.0002.58782.95112.95112.58782.000
不一定写x,可以是任意变量名
此外,还有一些多于一个自变量的函数,如基本的二元函数:
atan2(四象限取值的反正切函数);rem(同余函数)等.
2.3向量函数
有些函数只有当它们作用于(行或列)向量时才有意义,称为向量函数,这些函数也可以作用于矩阵,此时它产生一个行向量,行向量的每个元素是函数作用于矩阵相应列向量的结果.常用的有:
max(最大值)min(最小值)sum(和)length(长度)mean(平均值)
median(中位数)prod(乘积)sort(从小到大排列)
请看下例:
>>a=[43.1-1.206];...
b=min(a),c=sum(a),d=median(a),e=sort(a)
b=
-1.2000
c=
11.9000
d=
3.1000
e=
-1.200003.10004.00006.0000
>>f=[1:
3;4:
6;7:
9];f1=prod(f),f2=prod(f1)
f1=
2880162
f2=
362880
2.4矩阵函数
MATLAB有大量的处理矩阵的函数,从其作用来看可分为两类:
构造矩阵的函数;进行矩阵计算的函数.对于前者,我们已经介绍的主要有
zeros(0阵)ones(1阵)eye(单位阵)rand(均匀随机阵)
randn(正态随机阵)
还有
diag(生成或提取对角阵)triu(生成或提取上三角阵)
tril(生成或提取下三角阵)
等,在实验5中给出介绍.
对于后者,常见的有
size(大小)det(行列式)rank(秩)inv(逆矩阵)
eig(特征值)trace(迹)expm(矩阵指数)poly(特征多项式)
等.
norm(范数)cond(条件数)lu(LU分解)gr(正交分解)
svd(奇异值分解)
等,其中一些在实验5中给出介绍.
MATLAB有对矩阵维数重新整理的函数reshape,如
>>a=[123;456;789;101112];b=reshape(a,2,6)
b=
172839
410511612
即对a按列优先整理成26的矩阵.
>>sa=size(a),sb=size(b)
sa=
43
sb=
26
>>c=reshape(1:
9,3,3)
c=
147
258
369
2.5高维矩阵
除了基本的二维矩阵(及其特例——向量、标量)外,高维矩阵是二维矩阵的一种自然而然的扩展,MATLAB中也支持高维矩阵.例如,下面的语句输入了一个332的三维矩阵:
>>A(:
:
1)=reshape(1:
9,3,3);A(:
:
2)=reshape(-1:
-1:
-9,3,3)
A(:
:
1)=
147
258
369
A(:
:
2)=
-1-4-7
-2-5-8
-3-6-9
>>a=A(3,2),b=A(3,2,1),c=A(3,2,2),bc=A(3,2,:
),d=A(4),e=A(13)
a=
6
b=
6(a,b相同,说明在三维矩阵中,第三维的下标为I时可以缺省)
c=
-6
bc(:
:
1)=
6
bc(:
:
2)=
-6
d=
4(采用单一下标访问时,先访问第三维的下标为1者,然后以此类推)
e=
-4
>>A(:
2,2)=0:
2
A(:
:
2)=(也会显示A(:
:
1),不过A(:
:
1)结果同上,这里略去)
-10-7
-21-8
-32-9
更高维的矩阵的处理也类似.此外,元素为字符串的高维矩阵也可以类似定义和处理.
2.6结构变量
除了基本的数值矩阵和字符串矩阵外,MATLAB中还提供了一些其他较为复杂的数据类型,主要是结构(structure)和元胞矩阵(cellarray).
结构变量是由“域”组成的变量;通过“.”操作符可以访问结构变量的“域”.如下面是由name,fee和credit三个域组成的一个结构变量的例子:
>>student.name='abcABC';student.fee=5000.00;...
student.credit=[4,3,2,3;85,60,90,70]
student=
name:
'abcABC'
fee:
5000
credit:
[2x4double]
>>student.credit
ans=
4323
85609070
结构变量是可以嵌套的,即结构中还可以有结构,如:
>>student.name.firstname='abc';student.name.lastname='ABC'
student=
name:
[1x1struct]
fee:
5000
credit:
[2x4double]
>>student.name
ans=
firstname:
'abc'
lastname:
'ABC'
此外,除了上面这种直接赋值的方式外,结构变量也可以通过struct函数生成,如
>>student(5)=struct('name','abcABC','fee',5000.00,...
'credit',[4,3,2,3;85,60,90,70])
student=
1x5structarraywithfields:
name
fee
credit
这样,student(5)的结果同上;由于没有给出student
(1)至student(4)的取值,系统还会自动对结构变量student
(1)至student(4)的三个“域”赋值为空.
其他有关结构变量的操作函数的用法请读者查阅MATLAB帮助文件或其他书籍.
2.7元胞矩阵
元胞矩阵可以看成是数值(或字符串)矩阵的一种自然而然的扩展.在数值矩阵中,要求所有元素都是一个数;在字符矩阵中,要求所有元素都是一个字符.而在元胞矩阵中,不同的元素可以有完全不同的数据类型.如上面结构变量的例子也可以用如下的方式定义成元胞矩阵:
>>student(1,1)={'abcABC'};student(1,2)={5000.00};...
student(2,1)={[4,3,2,3;85,60,90,70]}
student=
'abcABC'[5000]
[2x4double][]
你可能已经注意到元胞矩阵中赋值时采用的是花括号,而不再是方括号.此外,上面的元胞变量定义过程也可以用下面的方式:
>>student{1,1}='abcABC';student{1,2}=5000.00;...
student{2,1}=[4,3,2,3;85,60,90,70]
输出同上.元素的访问方法和规则与数值矩阵类似,如:
>>student{1,2}
ans=
5000
>>student(1,2)
ans=
[5000]
>>student{2,1}(1,:
)
ans=
4323
>>student{2,1}(2,:
)
ans=
85609070
>>student{2,1}(4)
ans
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SXSYAAMATLAB 使用 入门