Matlab矩阵基本操作(定义,运算)
⼀、矩阵的表⽰
在MATLAB中创建矩阵有以下规则:
a、矩阵元素必须在”[ ]”内;
b、矩阵的同⾏元素之间⽤空格(或”,”)隔开;
c、矩阵的⾏与⾏之间⽤”;”(或回车符)隔开;
d、矩阵的元素可以是数值、变量、表达式或函数;
e、矩阵的尺⼨不必预先定义。
⼆,矩阵的创建:
1、直接输⼊法
最简单的建⽴矩阵的⽅法是从键盘直接输⼊矩阵的元素,输⼊的⽅法按照上⾯的规则。建⽴向量的时候
可以利⽤冒号表达式,冒号表达式可以产⽣⼀个⾏向量,⼀般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终⽌值。还可以⽤linspace函数产⽣⾏向量,其调⽤格式为:linspace(a,b,n) ,其中a和b是⽣成向量的第⼀个和最后⼀个元素,n是元素总数。
2、利⽤MATLAB函数创建矩阵
基本矩阵函数如下:
(1) ones()函数:产⽣全为1的矩阵,ones(n):产⽣n*n维的全1矩阵,ones(m,n):产⽣m*n维的全1矩阵;
(2) zeros()函数:产⽣全为0的矩阵;
(3) rand()函数:产⽣在(0,1)区间均匀分布的随机阵;
(4) eye()函数:产⽣单位阵;
(5) randn()函数:产⽣均值为0,⽅差为1的标准正态分布随机矩阵。
3、利⽤⽂件建⽴矩阵
当矩阵尺⼨较⼤或为经常使⽤的数据矩阵,则可以将此矩阵保存为⽂件,在需要时直接将⽂件利⽤load命令调⼊⼯作环境中使⽤即可。同时可以利⽤命令reshape对调⼊的矩阵进⾏重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的⼆维矩阵。
⼆、矩阵的简单操作
1.获取矩阵元素
可以通过下标(⾏列索引)引⽤矩阵的元素,如 Matrix(m,n)。
也可以采⽤矩阵元素的序号来引⽤矩阵元素。
矩阵元素的序号就是相应元素在内存中的排列顺序。
在MATLAB中,矩阵元素按列存储。
序号(Index)与下标(Subscript )是⼀⼀对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利⽤sub2ind和ind2sub函数求得。
2.矩阵拆分
2.矩阵拆分
利⽤冒号表达式获得⼦矩阵:
(1) A(:,j)表⽰取A矩阵的第j列全部元素;A(i,:)表⽰A矩阵第i⾏的全部元素;A(i,j)表⽰取A矩阵第i⾏、第j列的元素。
(2) 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表⽰某⼀维的末尾元素下标。
利⽤空矩阵删除矩阵的元素:
在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从⼯作空间中删除,⽽空矩阵则存在于⼯作空间中,只是维数为0。
3、特殊矩阵
(1) 魔⽅矩阵魔⽅矩阵有⼀个有趣的性质,其每⾏、每列及两条对⾓线上的元素和都相等。对于n阶魔⽅阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔⽅矩阵的函数magic(n),其功能是⽣成⼀个n阶魔⽅阵。
(2) 范得蒙矩阵范得蒙(Vandermonde)矩阵最后⼀列全为1,倒数第⼆列为⼀个指定的向量,其他各列是其后列与倒数第⼆列的点乘积。可以⽤⼀个指定向量⽣成⼀个范得蒙矩阵。在MATLAB中,函数vander(V)⽣成以向量V为基础向量的范得蒙矩阵。
(3) 希尔伯特矩阵在MATLAB中,⽣成希尔伯特矩阵的函数是hilb(n)。使⽤⼀般⽅法求逆会因为原始数据的微⼩扰动⽽产⽣不可靠的计算结果。MATLAB中,有⼀个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。
(4) 托普利兹矩阵托普利兹(Toeplitz)矩阵除第⼀⾏第⼀列外,其他每个元素都与左上⾓的元素相同。⽣成托普利兹矩阵的函数是
toeplitz(x,y),它⽣成⼀个以x为第⼀列,y为第⼀⾏的托普利兹矩阵。这⾥x, y均为向量,两者不必等长。toeplitz(x)⽤向量x⽣成⼀个对称的托普利兹矩阵。
(5) 伴随矩阵 MATLAB⽣成伴随矩阵的函数是compan(p),其中p是⼀个多项式的系数向量,⾼次幂系数排在前,低次幂排在后。
(6) 帕斯卡矩阵我们知道,⼆次项(x+y)n展开后的系数随n的增⼤组成⼀个三⾓形表,称为杨辉三⾓形。由杨辉三⾓形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)⽣成⼀个n阶帕斯卡矩阵。
三、矩阵的运算
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)。对于含有标量的运算,两种除法运算的结果相同。对于矩阵来说,左除和右除表⽰两种不同的除数矩阵和被除数矩阵的关系,⼀般A\B≠B/A。
(4) 矩阵的乘⽅⼀个矩阵的乘⽅运算可以表⽰成A^x,要求A为⽅阵,x为标量。
(5) 矩阵的转置对实数矩阵进⾏⾏列互换,对复数矩阵,共轭转置,特殊的,操作符.’共轭不转置(见点运算);
(6) 点运算在MATLAB中,有⼀种特殊的运算,因为其运算符是在有关算术运算符前⾯加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩
(6) 点运算在MATLAB中,有⼀种特殊的运算,因为其运算符是在有关算术运算符前⾯加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进⾏点运算是指它们的对应元素进⾏相关运算,要求两矩阵的维参数相同。
2、关系运算
MATLAB提供了6种关系运算符:<(⼩于)、<=(⼩于或等于)、>(⼤于)、>=(⼤于或等于)、==(等于)、~=(不等于)。关系运算符的运算法则为:
(1) 当两个⽐较量是标量时,直接⽐较两数的⼤⼩。若关系成⽴,关系表达式结果为1,否则为0;
(2) 当参与⽐较的量是两个维数相同的矩阵时,⽐较是对两矩阵相同位置的元素按标量关系运算规则逐个进⾏,并给出元素⽐较结果。最终的关系运算的结果是⼀个维数与原矩阵相同的矩阵,它的元素由0或1组成;
(3) 当参与⽐较的⼀个是标量,⽽另⼀个是矩阵时,则把标量与矩阵的每⼀个元素按标量关系运算规则逐个⽐较,并给出元素⽐较结果。最终的关系运算的结果是⼀个维数与原矩阵相同的矩阵,它的元素由0或1组成。
3、逻辑运算
MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(⾮)。逻辑运算的运算法则为:
linspace函数调用的格式为(1) 在逻辑运算中,确认⾮零元素为真,⽤1表⽰,零元素为假,⽤0表⽰;
(2) 设参与逻辑运算的是两个标量a和b,那么,a&b a,b全为⾮零时,运算结果为1,否则为0。 a|b a,b中只要有⼀个⾮零,运算结果为1。~a 当a是零时,运算结果为1;当a⾮零时,运算结果为0。
(3) 若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进⾏。最终运算结果是⼀个与原矩阵同维的矩阵,其元素由1或0组成;
(4) 若参与逻辑运算的⼀个是标量,⼀个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进⾏。最终运算结果是⼀个与矩阵同维的矩阵,其元素由1或0组成;
(5) 逻辑⾮是单⽬运算符,也服从矩阵运算规则;
(6) 在算术、关系、逻辑运算中,算术运算优先级最⾼,逻辑运算优先级最低。
四、矩阵分析
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)对⾓阵,其第m条对⾓线的元素即为向量V的元素。
2、三⾓阵
三⾓阵⼜进⼀步分为上三⾓阵和下三⾓阵,所谓上三⾓阵,即矩阵的对⾓线以下的元素全为0的⼀种矩阵,⽽下三⾓阵则是对⾓线以上的元素全为0的⼀种矩阵。
(1) 上三⾓矩阵求矩阵A的上三⾓阵的MATLAB函数是triu(A)。 triu(A)函数也有另⼀种形式triu(A,k),其功能是求矩阵A的第k条对⾓线以上的元素。
(2) 下三⾓矩阵在MATLAB中,提取矩阵A的下三⾓矩阵的函数是tril(A)和tril(A,k),其⽤法与提取上三⾓矩阵的函数triu(A)和triu(A,k)完全相
(2) 下三⾓矩阵在MATLAB中,提取矩阵A的下三⾓矩阵的函数是tril(A)和tril(A,k),其⽤法与提取上三⾓矩阵的函数triu(A)和triu(A,k)完全相同。
3、矩阵的转置与旋转
(1) 矩阵的转置转置运算符是单撇号(’)。
(2) 矩阵的旋转利⽤函数rot90(A,k)将矩阵A旋转90o的k倍,当k为1时可省略。
4、矩阵的翻转
对矩阵实施左右翻转是将原矩阵的第⼀列和最后⼀列调换,第⼆列和倒数第⼆列调换,…,依次类推。矩阵A实施左右翻转的函数是
fliplr(A),对矩阵A实施上下翻转的函数是flipud(A)。
5、矩阵的逆与伪逆
(1) 矩阵的逆对于⼀个⽅阵A,如果存在⼀个与其同阶的⽅阵B,使得:AB=BA=I (I为单位矩阵) 则称B为A的逆矩阵,当然,A也是B的逆矩阵。求⽅阵A的逆矩阵可调⽤函数inv(A)。
(2) 矩阵的伪逆如果矩阵A不是⼀个⽅阵,或者A是⼀个⾮满秩的⽅阵时,矩阵A没有逆矩阵,但可以到⼀个与A的转置矩阵A’同型的矩阵B,使得:ABA=A,BAB=B 此时称矩阵B为矩阵A的伪逆,也称为⼴义逆矩阵。在MATLAB中,求⼀个矩阵伪逆的函数是pinv(A)。
6、⽅阵的⾏列式
把⼀个⽅阵看作⼀个⾏列式,并对其按⾏列式的规则求值,这个值就称为矩阵所对应的⾏列式的值。在MATLAB中,求⽅阵A所对应的⾏列式的值的函数是det(A)。
7、矩阵的秩与迹
(1) 矩阵的秩矩阵线性⽆关的⾏数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。
(2) 矩阵的迹矩阵的迹等于矩阵的对⾓线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
8、向量和矩阵的范数
矩阵或向量的范数⽤来度量矩阵或向量在某种意义下的长度。范数有多种⽅法定义,其定义不同,范数值也就不同。
(1) 向量的3种常⽤范数及其计算函数在MATLAB中,求向量范数的函数为:
a、norm(V)或norm(V,2):计算向量V的2-范数;
b、norm(V,1):计算向量V的1-范数;
c、norm(V,inf):计算向量V的∞-范数。
(2) 矩阵的范数及其计算函数 MATLAB提供了求3种矩阵范数的函数,其函数调⽤格式与求向量的范数的函数完全相同。
(3) 矩阵的条件数在MATLAB中,计算矩阵A的3种条件数的函数是:
a、cond(A,1) 计算A的1-范数下的条件数;
b、cond(A)或cond(A,2) 计算A的2-范数数下的条件数;
c、cond(A,inf) 计算A的 ∞-范数下的条件数。
9、矩阵的特征值与特征向量
9、矩阵的特征值与特征向量
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常⽤的调⽤格式有3种:
(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对⾓阵D,并求A的特征向量构成V的列向量。
(3) [V,D]=eig(A,’nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,⽽格式3直接求矩阵A的特征值和特征向量。
五、字符串
在MATLAB中,字符串是⽤单撇号括起来的字符序列。MATLAB将字符串当作⼀个⾏向量,每个元素对应⼀个字符,其标识⽅法和数值向量相同。也可以建⽴多⾏字符串矩阵。字符串是以ASCII码形式存储的。abs和double函数都可以⽤来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以
把ASCII码矩阵转换为字符串矩阵。与字符串有关的另⼀个重要函数是eval,其调⽤格式为: eval_r(t) 其中t为字符串。它的作⽤是把字符串的内容作为对应的MATLAB语句来执⾏。
六、其他
查看矩阵⾮零元素的分布spy(A);
第⼆部分矩阵的应⽤
⼀、稀疏矩阵
对于⼀个 n 阶矩阵,通常需要 n2 的存储空间,当 n 很⼤时,进⾏矩阵运算时会占⽤⼤量的内存空间和运算时间。在许多实际问题中遇到的⼤规模矩阵中通常含有⼤量0元素,这样的矩阵称为稀疏矩阵。Matlab⽀持稀疏矩阵,只存储矩阵的⾮零元素。由于不存储那些”0″元素,也不对它们进⾏操作,从⽽节省内存空间和计算时间,其计算的复杂性和代价仅仅取决于稀疏矩阵的⾮零元素的个数,这在矩阵的存储空间和计算时间上都有很⼤的优点。
矩阵的密度定义为矩阵中⾮零元素的个数除以矩阵中总的元素个数。对于低密度的矩阵,采⽤稀疏⽅式存储是⼀种很好的选择。
1、稀疏矩阵的创建
(1) 将完全存储⽅式转化为稀疏存储⽅式函数A=sparse(S)将矩阵S转化为稀疏存储⽅式的矩阵A。当矩阵S是稀疏存储⽅式时,则函数调⽤相当于A=S。 sparse函数还有其他⼀些调⽤格式: sparse(m,n):⽣成⼀个m*n的所有元素都是0的稀疏矩阵。 sparse(u,v,S)--:u,v,S是3个等长的向量。S是要建⽴的稀疏矩阵的⾮0元素,u(i)、v(i)分别是S(i)的⾏和列下标,该函数建⽴⼀个max(u)⾏、max(v)列并以S为稀疏元素的稀疏矩阵。此外,还有⼀些和稀疏矩阵操作有关的函数。full(A):返回和稀疏存储矩阵A对应的完全存储⽅式矩阵。
(2) 直接创建稀疏矩阵 S=sparse(i,j,s,m,n),其中i 和j 分别是矩阵⾮零元素的⾏和列指标向量,s 是⾮零元素值向量,m,n 分别是矩阵的⾏数和列数。
(3) 从⽂件中创建稀疏矩阵利⽤load和spconvert函数可以从包含⼀系列下标和⾮零元素的⽂本⽂件中输⼊稀疏矩阵。例:设⽂本⽂件 T.txt 中有三列内容,第⼀列是⼀些⾏下标,第⼆列是列下标,第三列是⾮零元素值。 S=spconvert(T)。
(4) 稀疏带状矩阵的创建 S=spdiags(B,d,m,n) 其中m 和n 分别是矩阵的⾏数和列数;d是长度为p的整数向量,它指定矩阵S的对⾓线位置;B 是全元素矩阵,⽤来给定S对⾓线位置上的元素,⾏数为min(m,n),列数为p 。
(5) 其它稀疏矩阵创建函数
S=speye(m,n)
S=speye(size(A)) % has the same size as A
S=buchy % ⼀个内置的稀疏矩阵(邻接矩阵)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论