矩阵在MATLAB中的运算与应用.docx
《矩阵在MATLAB中的运算与应用.docx》由会员分享,可在线阅读,更多相关《矩阵在MATLAB中的运算与应用.docx(16页珍藏版)》请在冰点文库上搜索。
矩阵在MATLAB中的运算与应用
矩阵在MATLAB中的运算与应用
摘要:
介绍了Matlab在矩阵运算方而的功能。
演示了用Matlab构造矩阵,获取矩阵的相关信息,进行矩阵运算的方法,对矩阵运算进行了分析,对矩阵作图进行了研究。
关键词:
矩阵;Matlab
1引言
Matlab的含义是矩阵实验室(MatrixLaboratory),是由美国Mathwork公司于1984年推出的一套高性能的数值计算和可视化软件[1]。
现在,它己发展为国际上最优秀的科技应用软件。
如果能将它用到相关学科课的学习上无疑是非常有意义的。
Matlab赋予学习者一个可实验的环境,一个强大的数值计算和分析及可视化(图形)工具。
矩阵论是高等院校理、工科研究生的一门重要基础课程。
有人认为“科学计算,归根结底就是矩阵的计算”[2]。
因此,对于将来从事科学技术工作的研究生来说,矩阵理论和方法是必不可少的数学工具。
矩阵的理论和方法在数学和其他学科中都具有重要的意义,但许多学生无法克服矩阵庞大的计算量带来的恐惧,从而丧失了学习的兴趣和动力。
本文展示了如何方便地用Matlab构造矩阵,获取矩阵的相关信息以及完成矩阵的运算,展示了矩阵的结构和运算,以此来说明在机器计算环境中,庞大复杂的计算不再是令人头疼的事情。
2矩阵及其运算
矩阵是进行数据处理和运算的基本元素。
在MATLAB中:
a、通常意义上的数量(标量)可看成是“1*1”的矩阵;
b、n维矢量可看成是“n*1”的矩阵;
c、多项式可由它的系数矩阵完全确定。
2.1矩阵的创建
在MATLAB中创建矩阵有以下规则:
a、矩阵元素必须在“[]”内;
b、矩阵的同行元素之间用空格(或“,”)隔开;
c、矩阵的行与行之间用“;”(或回车符)隔开;
d、矩阵的元素可以是数值、变量、表达式或函数;
e、矩阵的尺寸不必预先定义。
2.1.1直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。
建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:
e1:
e2:
e3,其中e1为初始值,e2为步长,e3为终止值。
还可以用linspace函数产生行向量,其调用格式为:
linspace(a,b,n),其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
可以看出来linspace(a,b,n)与a:
(b-a)/(n-1):
b等价。
2.1.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的标准正态分布随机矩阵。
2.1.3利用文件建立矩阵
当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。
同时可以利用命令reshape对调入的矩阵进行重排。
reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。
2.2矩阵的拆分
2.2.1矩阵元素
可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。
也可以采用矩阵元素的序号来引用矩阵元素。
矩阵元素的序号就是相应元素在内存中的排列顺序。
在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。
序号(Index)与下标(Subscript)是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利用sub2ind和ind2sub函数求得。
2.2.2矩阵拆分
1、利用冒号表达式获得子矩阵:
(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表示某一维的末尾元素下标。
2、利用空矩阵删除矩阵的元素:
在MATLAB中,定义[]为空矩阵。
给变量X赋空矩阵的语句为X=[]。
注意,X=[]与clearX不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。
2.2.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阶帕斯卡矩阵。
2.3矩阵的运算
2.3.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中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
点运算符有.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
2.3.2关系运算
MATLAB提供了6种关系运算符:
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
关系运算符的运算法则为:
(1)当两个比较量是标量时,直接比较两数的大小。
若关系成立,关系表达式结果为1,否则为0;
(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成;
(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
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)在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
3矩阵分析
3.1对角阵
(1)对角阵只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。
(2)提取矩阵的对角线元素设A为m*n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。
diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。
(3)构造对角矩阵设V为具有m个元素的向量,diag(V)将产生一个m*m对角矩阵,其主对角线元素即为向量V的元素。
diag(V)函数也有另一种形式diag(V,k),其功能是产生一个n*n(n=m+k)对角阵,其第m条对角线的元素即为向量V的元素。
3.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)完全相同。
3.3矩阵的转置与旋转
(1)矩阵的转置转置运算符是单撇号(’)。
(2)矩阵的旋转利用函数rot90(A,k)将矩阵A旋转90o的k倍,当k为1时可省略。
3.4矩阵的翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依次类推。
矩阵A实施左右翻转的函数是fliplr(A),对矩阵A实施上下翻转的函数是flipud(A)。
3.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)。
3.6方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。
在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。
3.7矩阵的秩与迹
(1)矩阵的秩矩阵线性无关的行数与列数称为矩阵的秩。
在MATLAB中,求矩阵秩的函数是rank(A)。
(2)矩阵的迹矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
在MATLAB中,求矩阵的迹的函数是trace(A)。
3.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的∞-范数下的条件数。
3.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的特征值和特征向量。
4矩阵的应用
4.1稀疏矩阵
对于一个n阶矩阵,通常需要n2的存储空间,当n很大时,进行矩阵运算时会占用大量的内存空间和运算时间。
在许多实际问题中遇到的大规模矩阵中通常含有大量0元素,这样的矩阵称为稀疏矩阵。
Matlab支持稀疏矩阵,只存储矩阵的非零元素。
由于不存储那些”0″元素,也不对它们进行操作,从而节省内存空间和计算时间,其计算的复杂性和代价仅仅取决于稀疏矩阵的非零元素的个数,这在矩阵的存储空间和计算时间上都有很大的优点。
矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总的元素个数。
对于低密度的矩阵,采用稀疏方式存储是一种很好的选择。
4.1.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中有三列内容,第一列是一些行下标,第二列是列下标,第三列是非零元素值。
loadT.txtS=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))%hasthesamesizeasA
S=buchy%一个内置的稀疏矩阵(邻接矩阵)
4.1.2稀疏矩阵的运算
稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的,可以直接参与运算。
所以,Matlab中对满矩阵的运算和函数同样可用在稀疏矩阵中。
结果是稀疏矩阵还是满矩阵,取决于运算符或者函数。
当参与运算的对象不全是稀疏存储矩阵时,所得结果一般是完全存储形式。
4.1.3其他
(1)非零元素信息
nnz(S)%返回非零元素的个数
nonzeros(S)%返回列向量,包含所有的非零元素
nzmax(S)%返回分配给稀疏矩阵中非零项的总的存储空间
(2)查看稀疏矩阵的形状spy(S)
(3)find函数与稀疏矩阵
[i,j,s]=find(S)
[i,j]=find(S)
返回S中所有非零元素的下标和数值,S可以是稀疏矩阵或满矩阵。
4.2运用矩阵进行MATLAB作图
数据可视化是人们认识世界不可缺少的手段、科学与工程研究大量依赖于可视化技术。
数据图视化能使人们用视觉器官直接地、形象地感受到数据的许多内在本质。
MATLAB为用户提供了大量的丰富的图形功能,编制了大量的数据可视化的指令,并配备了许多高级图形案例。
利用这些功能、指令和案例,用户可以方便地实现数据的可视演示,表达数据的特性。
4.2.1运用矩阵进行绘制二维图形
plot函数:
plot绘图的基本素材是二维点组(xy)(i=1,2,….n)。
二维点组(xy)(i=1,2,….n)的定义形式如:
(1)x=[2.3,4.3,3,4,4.9,1.5,2.8,4.6,5.5]或y=0:
0.1:
5。
这种定义方法,默认横坐标是自然数(1,2,3,4…..)
(2)t=0:
pi/100:
2*pi;x=sin(t),二维点组(xy)(i=1,2,….n)的定义形式。
下例用来体会plot的基本的绘图原理。
绘向量得折线图:
h=figure;%定义一个新的图形窗,返回此图形窗的柄号。
%holdon;%图形保持开关。
x=[2.3,4.3,3,4,4.9,1.5,2.8,4.6,5.5];
plot(x)
plot(x,'-ro')
绘x=sin(t)图。
曲线光滑与否与点数相关。
holdoff
t=0:
pi/3:
2*pi;
x=sin(t);
plot(t,x,'r-')
holdon
t=0:
pi/100:
2*pi;
x=sin(t);
plot(t,x,'b-')
4.2.2运用矩阵进行绘制三维图形
(1)plot3(三维直线函数)
以下例子用来体会plot3的基本的绘图原理。
%绘参数方程x=t;y=sin(t);z=cos(t)的空间曲线
clf
t=0:
0.05:
100;
x=t;y=sin(t);z=sin(2*t);
plot3(x,y,z,'b:
')
(2)三维曲面网格图
划马鞍面:
clf
x=-4:
0.5:
4;
y=-4:
0.5:
4;
[U,V]=meshgrid(x,y);
Z=-U.^4+V.^4-U.^2-V.^2-2*U*V;
mesh(Z);
xlabel('x');
ylabel('y');
zlabel('z');
5结语
Matlab除了具有强大的包含知阵计算在内的数值计算能力外,还可以实现优化统计骗微分方程数值解以及一维二维图像绘制科学计算可视化等功能如果Matlab)软件用于矩阵论的学习上,将会提供全新的数学学习体验和方法,同时会大大提高矩阵学习的兴趣和效率。
因此,在矩阵学习中使用Matlab等数学软件无疑具有重要的作用。
参考文献:
[1]苏金明,王永利.Mailab7.0实用指南[M]电子工业出版社,2005.
[2]薛定宇,陈阳泉.高等应川数学问题的Matlab求解[M].北京:
清华人学出版社,2004.
[3]张志勇.精通Matlab6.5版[M].北京:
北京航空航天人学出版社,2003.
[4]张禾瑞,郝炳新.高等代数[M].4版.北京:
高等教育出版社,1997.
[5]北京人学数学力学系儿何与代数教研室代数小组.高等代数[M]北京:
人民教育出版社,1978.
[6]P.W.Wheeler,J.Rodriguez,J.C.Clare.Matrixconverters:
atechnologyreview[J].IEEETransactionsonIndustrialElectronics,2002,Vo1.49
(2):
276-288.
[7]BuranyN.Safecontroloffour-quadrantswitches.ProceedingsIEEEIAS'89.1989,1190-194.