matlab矩阵列运算,MATLAB矩阵及其运算
第2章MATLAB矩阵及其运算2.1变量和数据操作2.2MATLAB矩阵2.3MATLAB运算2.4矩阵分析2.5矩阵的超越函数2.6字符串2.7结构数据和单元数据2.8稀疏矩阵
2.1变量和数
据操作
2.1.1变量与赋值1.变量命名在MATLAB 6.5中,变量名是以字母开
头,后接字母、数字或下划线的字符序列,最多63个字符。在MATLAB中,变量名区分字母的⼤⼩写。
2.赋值语句(1)变量=表达式(2)表达式其中表达式是⽤运算符将有关运算量连接起来的式⼦,其结果是⼀个矩阵。
例2-1计算表达式的值,并显⽰计算结果。在MATLAB命令窗⼝输⼊命令:x=1+2i;
y=3-sqrt(17);
z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))其中pi和i都是MATLAB预先定义的变量,分别代表代表圆周
率π和虚数单位。输出结果是:z =
-0.3488 + 0.3286i
2.1.2预定义变量
在MATLAB⼯作空间中,还驻留⼏个由系统
本⾝定义的变量。例如,⽤pi表⽰圆周率π的近似值,⽤i,j表⽰虚数单位。预定义变量有特定的含义,在使⽤时,应尽量避免对这些变量重新赋值。
2.1.3内存变量的管理1.内存变量的删除与修改MATLAB⼯作空间窗⼝专门⽤
于内存变量的管理。在⼯作空间窗⼝中可以显⽰所有内存变量的属性。当选中某些变量后,再单击Delete按钮,就能删除这些变量。当选中某些变量后,再单击Open按钮,将进⼊变量编辑器。通过变量编
辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。
clear命令⽤于删除MATLAB⼯作空间中的变量。who和whos这两个命令⽤于显⽰在MATLAB⼯作空间
中已经驻留的变量名清单。who命令只显⽰出驻留变量的名称,whos在给出变量名的同时,还给出它们的⼤⼩、所占字节数及数据类型等信息。
2.内存变量⽂件利⽤MAT⽂件可以把当前MATLAB⼯作空间中的⼀些有⽤变量长久地保留下来,扩展名是.mat。MAT⽂件的⽣成和装⼊由save和load命令来完成。常⽤格式为:save⽂件名[变量名表][-append][-ascii]
load⽂件名[变量名表][-ascii]
其中,⽂件
名可以带路径,但不需带扩展名.mat,命令隐含⼀定对.mat⽂件进⾏操作。变量名表中的变量个数不限,只要内存或⽂件中存在即可,变量名之间以空格分隔。当变
量名表省略时,保存或装⼊全部变量。-ascii选项使⽂件以ASCII格式处理,省略该选项时⽂件将以⼆进制格式处理。save命令中的-append选项控制将变量追加到MAT⽂件中。
2.1.4MATLAB常⽤数学函数MATLAB提供了许多数学函
数,函数的⾃变量规定为矩阵变量,运算法则是将函数逐项作⽤于矩阵的元素上,因⽽运算的结果是⼀个与⾃变量同维数的矩阵。函数使⽤说明:(1)三⾓函数以弧度为单位计
算。(2) abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。(3)⽤于取整的函数有fix、floor、ceil、round,要注意它们的区别。(4)
rem与mod函数的区别。rem(x,y)和mod(x,y)要求x,y必须为相同⼤⼩的实矩阵或为标量。
2.1.5数据的输出格式MATLAB⽤⼗进制数表⽰⼀个常数,具体可采⽤⽇常记数法和科学记数法两种表⽰⽅法。在⼀般情况下,MATLAB 内部每⼀个数据元素都是⽤双精度数来表⽰和存储的。数据输出时⽤户可以⽤format命令设置或改变数据输出格式。format命令的格式为:format格式符其中格式符决定数据的输出格式
2.2MATLAB矩阵
2.2.1矩阵的建⽴1.直接输⼊法最简单的建⽴矩阵的⽅法是从键盘直接输⼊矩阵的元素。具体⽅法如下:将矩阵的元素⽤⽅括号括起来,按
矩阵⾏的顺序输⼊各元素,同⼀⾏的各元素之间⽤空格或逗号分隔,不同⾏的元素之间⽤分号分隔。
2.利⽤M⽂件建⽴矩阵对于⽐较⼤且⽐较复杂的矩阵,
可以为它专门建⽴⼀个M⽂件。下⾯通过⼀个简单例⼦来说明如何利⽤M⽂件创建矩阵。
例2-2利⽤M⽂件建⽴MYMAT矩阵。(1)启动有关编辑程序或MATLAB⽂本编辑器,并输⼊待建矩阵:(2)把输⼊的内容以纯⽂本⽅式存盘(设⽂件名为mymatrix.m)。(3)在MATLAB命令窗⼝中输⼊mymatrix,即运⾏该M⽂件,就会⾃动建⽴⼀个名为MYMAT的矩阵,可供以后使⽤。
3.利⽤冒号表达式建⽴⼀个向量冒号表达式可以产⽣⼀个⾏向量,⼀般格式是: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等价。4.建⽴⼤矩阵⼤矩阵可由⽅括号中的⼩矩阵或向量建⽴起来。
2.2.2矩阵的拆分1.矩阵元素通过下标引⽤矩阵的元素,例如A(3,2)=200采⽤矩阵元素的序号来引⽤矩阵元素。矩阵
元素的序号就是相应元素在内存中的排列顺序。在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函数求得。
2.矩阵拆分(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=[]与clear X不同,clear是将X 从⼯作空间中删除,⽽空矩阵则存在于⼯作空间中,只是维数为0。
2.2.3特殊矩阵1.通⽤的特殊矩阵常⽤的产⽣通⽤特殊矩阵的函数
有:zeros:产⽣全0矩阵(零
矩阵)。ones:产⽣全1矩阵(⼳矩阵)。eye:产⽣单位矩阵。rand:产⽣0~1间均匀分布的随机矩阵。randn:产⽣均值为0,⽅差为1的标准正态分布随机矩阵。
例2-3分别建⽴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=[1 2 3;4 5 6];%产⽣⼀个2×3阶矩阵A
zeros(size(A))%产⽣⼀个与矩阵A同样⼤⼩的零矩阵
例2-4建⽴随机矩阵:(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的⼆维矩阵。
2.⽤于专门学科的特殊矩阵(1)魔⽅矩阵魔⽅矩阵有⼀个有趣的性质,其每⾏、每列及两条对⾓线上的元素和都相等。对于n阶魔⽅阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔⽅矩阵的函数magic(n),其功能是⽣成⼀个n阶魔⽅阵。
例2-5将101~125等25个数填⼊⼀个5⾏5列的表格中,使其每⾏每列及对⾓线的和均为565。M=100+magic(5)
(2)范得蒙矩阵范得蒙(Vandermonde)矩阵最后⼀列全为1,倒数第⼆列为⼀个指定的向量,其他各列是其后列与倒数第⼆列的点乘积。可以⽤⼀个指定向量⽣成⼀
个范得蒙矩阵。在MATLAB中,函数vander(V)⽣成以向量V为基础向量的范得蒙矩阵。例如,A=vander([1;2;3;5])即可得到上述范得蒙矩阵。
(3)希尔伯特矩阵在MATLAB中,⽣成希尔伯特矩阵的函数是hilb(n)。使⽤⼀般⽅法求逆会因为原始数据的微⼩扰动⽽产⽣不可靠的计算结果。MATLAB中,有⼀个专门求希尔伯特矩阵的
逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。
例2-6求4阶希尔伯特矩阵及其逆矩阵。命令如下:format rat%以有理形式输出H=hilb(4)
H=invhilb(4)
(4)托普利兹矩阵托普利兹(Toeplitz)矩阵除第⼀⾏第⼀列外,其他每个元素都与左上⾓的元素相同。⽣成托普利兹矩阵的函数是
toeplitz(x,y),它⽣成⼀个以x为第⼀列,y为第⼀⾏的托普利兹矩阵。这⾥x, y均为向量,两者不必等长。toeplitz(x)⽤向量x⽣成⼀个对称的托普利兹矩阵。例如T=toeplitz(1:6)
(5)伴随矩阵MATLAB⽣成伴随矩阵的函数是compan(p),其中p是⼀个多项式的系数向量,⾼次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使⽤命令:p=[1,0,-7,6];
compan(p)
(6)帕斯卡矩阵我们知道,⼆次项(x+y)n展开后的系数随n的增⼤组成⼀个三⾓形表,称为杨辉三⾓形。由杨辉三⾓形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)⽣成⼀个n阶帕斯卡矩阵。
例2-7求(x+y)5的展开式。在MATLAB命令窗⼝,输⼊命令:pascal(6)矩阵次对⾓线上的元素1,5,10,10,5,1即为展开式的系
数。
2.3  MATLAB运算2.
3.1算术运算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.1000
5.0000]。对于矩阵来说,左除和右除表⽰两种不同的除数矩阵和被
除数矩阵的关系。对于矩阵运算,⼀般A\B≠B/A。
(4)矩阵的乘⽅⼀个矩阵的乘⽅运算可以表⽰成A^x,要求A为⽅阵,x为标量。2.点运算在MATLAB中,有⼀种特殊的运算,因为其运
算符是在有关算术运算符前⾯加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进⾏点运算是指它们的对应元素进⾏相关运算,要求两矩阵的维参数相同。
2.3.2关系运算MATLAB提供了6种关系运算符:(⼤于)、>=(⼤于或等于)、==(等于)、~=(不等于)。它们的含义不难理解,但要注意其书写⽅法与数学中的不等式符号不尽相同。
关系运算符的运算法则为:(1)当两个⽐较量是标量时,直接⽐较两数的⼤⼩。若关系成⽴,关系表达式结果为1,否则为0。(2)当参与⽐较的量是两个维数相同的矩阵时,⽐较是对两矩阵相同位置的元素按标量关系运算规则逐个进⾏,
并给出元素⽐较结果。最终的关系运算的结果是⼀个维数与原矩阵相同的矩阵,它的元素由0或1组成。
(3)当参与⽐较的⼀个是标量,⽽另⼀个是矩阵时,则
把标量与矩阵的每⼀个元素按标量关系运算规则逐个⽐较,并给出元素⽐较结果。最终的关系运算的结果是⼀个维数与原矩阵相同的矩阵,它的元素由0或1组成。
例2-8产⽣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是进⾏等于(==)⽐较的结果矩阵。
2.3.3逻辑运算MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(⾮)。逻辑运算的运算法则为:(1)在逻辑运算中,确认⾮零元
素为真,⽤1表
⽰,零元素为假,⽤0表⽰。(2)设参与逻辑运算的是两个标量a和b,那么,a&ba,b全为⾮零时,运算结果为1,否则为0。a|ba,b中只要有⼀个⾮零,运算结果为1。~a当a是零时,运算结果为1;当a⾮零时,运算结果为0。
(3)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进⾏。最终运算结
果是⼀个与原矩阵同维的矩阵,其元素由1或0组成。(4)若参与逻辑运算的⼀个是标量,⼀个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个
进⾏。最终运算结果是⼀个与矩阵同维的矩阵,其元素由1或0组成。(5)逻辑⾮是单⽬运算符,也服从矩阵运算规则。(6)在算术、关系、逻辑运算中,算术运算优先级最⾼,逻辑运算优先
级最低。
例2-9建⽴矩阵A,然后出⼤于4的元素的位置。(1)建⽴矩阵A。A=[4,-65,-54,0,6;56,0,67,-45,0]
(2)出⼤于4的元素的位置。find(A>4)
2.4矩阵分析2.4.1对⾓阵与三⾓阵1.对⾓阵只有对⾓线上有⾮0元素的矩阵称为对⾓矩阵,对⾓线上的元素相等的对⾓矩阵称为数量矩阵,对⾓线上的元素都为1的对⾓矩阵称为单位矩阵。
(1)提取矩阵的对⾓线元素设A为m×n矩阵,diag(A)函数⽤于提取矩阵A主对⾓线元素,产⽣⼀个具有min(m,n)个元素的列向量。diag(A)函数还有⼀种形式diag(A,k),其功能是提取第k条对⾓线的元素。(2)
构造对⾓矩阵设V为具有m个元素的向量,diag(V)将产⽣⼀个m×m 对⾓矩阵,其主对⾓线元素即为向量V的元素。diag(V)函数也有另⼀种形式diag(V,k),其功能是产⽣⼀个n×n(n=m+)对⾓阵,其第k条对⾓线的元素即为向量V的元素。
例2-10先建⽴5×5矩阵A,然后将A的第⼀⾏元素乘以1,第⼆⾏乘以2,…,第五⾏乘以5。A=
[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;...
11,18,25,2,19];
D=diag(1:5);
D*A%⽤D左乘A,对A的每⾏乘以⼀个指定常数
2.三⾓阵三⾓阵⼜进⼀步分为上三⾓阵和下三⾓阵,所谓上三⾓阵,即矩阵的对⾓线以下的元素全为0的⼀种矩阵,⽽下三⾓阵则是对⾓线以上的
元素全为0的⼀种
矩阵。
(1)上三⾓矩阵求矩阵A的上三⾓阵的MATLAB函数是triu(A)。triu(A)函数也有另⼀种形式triu(A,k),其功
能是求矩阵A的第k条对⾓线以上的元素。例如,提取矩阵A的第2条对⾓线以上的元素,形
成新的矩阵B。(2)下三⾓矩阵在MATLAB中,提取矩阵A的下三⾓矩阵的函数是tril(A)和tril(A,k),其⽤法与提取上三⾓矩阵的函数triu(A)和triu(A,k)完全相
同。
2.4.2矩阵的转置与旋转1.矩阵的转置转置运算符是单撇号(‘)。2.矩阵的旋转利⽤函数rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略。
3.矩阵的左右翻转对矩阵实施左右翻转是将原矩阵的
第⼀列和最后⼀列调换,第⼆列和倒数第⼆列调换,…,依次类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。4.矩阵的上下翻转MATLAB对矩阵A实施上下翻转的函数是flipud(A)。
2.4.3矩阵的逆与伪逆1.矩阵的逆对于⼀个⽅阵A,如果存在⼀个与其同阶的⽅阵B,使得:A·B=B·A=I (I为单位矩
阵)则
称B为A的逆矩阵,当然,A也是B的逆矩阵。求⼀个矩阵的逆是⼀件⾮常烦琐的⼯
作,容易出错,但在MATLAB中,求⼀个矩阵的逆⾮常容易。求⽅阵A的逆矩阵可调⽤函数inv(A)。例2-11⽤求逆矩阵的⽅法解线性⽅程组。Ax=b其解为:x=A-1b
2.矩阵的伪逆如果矩阵A不是⼀个⽅阵,或者A是⼀个⾮满秩的⽅阵时,矩阵A没有逆矩阵,但可以到⼀个与A的转置矩阵A‘同型的矩阵B,使得:A·B·A=A
B·A·B=B此时称矩阵B为矩阵A的伪逆,也称为⼴义逆矩阵。在MATLAB中,求⼀个矩阵伪逆的函数是pinv(A)。
2.4.4⽅阵的⾏列式把⼀个⽅阵看作⼀个⾏列式,并对其按⾏列式的规则求值,这个值就称为矩阵所对应的⾏列式的值。在MATLAB中,求⽅阵A所对应的⾏列式的值的函数是det(A)。
2.4.5矩阵的秩与迹1.矩阵的秩矩阵线性⽆关的⾏数与列数称为矩
阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。2.矩阵的迹矩阵的迹等于矩阵的对⾓线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
2.4.6向量和矩阵的范数矩阵或向量的范数⽤来度量矩阵或
向量在某种意义下的长度。范数有多种⽅法定义,其定义不同,范数值也就不同。
1.向量的3种常⽤范数及其计算函数在MATLAB中,求向量范数的函数为:(1)
norm(V)或norm(V,2):计算向量V的2—范数。(2) norm(V,1):计算向量V的1—范数。(3)
norm(V,inf):计算向量V的∞—范数。
2.矩阵的范数及其计算函linspace函数调用的格式为
数MATLAB提供了求3种矩阵范数的函数,其函数调⽤格式与求向量的范数的函数完全相同。
2.4.7矩阵的条件数在MATLAB中,计算矩阵A的3种条件数的函数是:(1) cond(A,1)计算A的1—范数下的条件数。(2) cond(A)或
cond(A,2)计算A的2—范数数下的条件数。(3) cond(A,inf)计算A的∞—范数下的条件数。
2.4.8矩阵的特征值与特征向量在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常⽤的调⽤格式有3种:(1) E=eig(A):求矩阵A的全部特征值,构成向量E。(2) [V,D]=eig(A):
求矩阵A的全部特
征值,构成对⾓阵D,
并求A的特征向量

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。