第3章 Matlab中的矩阵及其运算.docx
《第3章 Matlab中的矩阵及其运算.docx》由会员分享,可在线阅读,更多相关《第3章 Matlab中的矩阵及其运算.docx(24页珍藏版)》请在冰豆网上搜索。
第3章Matlab中的矩阵及其运算
Matlab中的矩阵及其运算
矩阵是数学中一个十分重要的概念,其应用能够十分广泛,Matlab中最基本最重要的功能就是进行矩阵运算,其所有数值功能都已矩阵为基本单元来实现,掌握Matlab中的矩阵运算是十分重要的。
关键词:
Matlab矩阵特殊矩阵
一、矩阵的生成
1、矩阵生成有多种方式,通常使用的有四种:
(1)在命令窗口中直接输入矩阵
(2)通过语句和函数产生矩阵
(3)在M文件中建立矩阵
(4)从外部的数据文件中导入矩阵
其中第一种是最简单常用的创建数值矩阵的方法,较适合创建较小的简单矩阵。
把矩阵的元素直接排列到方括号中,每行内元素用空格或逗号相隔,行与行之间的内容用分号相隔。
如:
matrix=[1,1,1,1;2,2,2,2;3,3,3,3;4,4,4,4]%逗号形式相隔
matrix=
1111
2222
3333
4444
matrix=[1111;2222;3333;4444]%采用空格形式相隔
matrix=
1111
2222
3333
4444
2、特殊矩阵的生成
1、零矩阵和全1矩阵
零矩阵指各个元素都为零的矩阵。
(1)A=zeros(M,N)命令中,A为要生成的零矩阵,M和N分别为生成矩阵的行和列。
(2)若存在已知矩阵B,要生成与B维数相同的矩阵,可以使用命令A=zeros(size(B))。
(3)要生成方阵时,可使用命令A=zeros(N)来生成N阶方针。
全1矩阵用ones函数实现。
A=zeros(4,5)
A=
00000
00000
00000
00000
B=[12345;23456;98765;87654]
B=
12345
23456
98765
87654
A=zeros(size(B))
A=
00000
00000
00000
00000
A=zeros(5)
A=
00000
00000
00000
00000
00000
C=ones(5,6)
C=
111111
111111
111111
111111
111111
C=ones(3)
C=
111
111
111
2、单位矩阵的生成
(1)A=eye(M,N)命令,可生成单位矩阵,M和N分别为生成单位矩阵的行和列。
(2)若存在已知矩阵B,要生成一个与B维数相同的单位矩阵,可以使用命令A=eye(size(B))。
(3)也可以使用A=eye(N)来生成N阶方阵。
A=eye(4,5)
A=
10000
01000
00100
00010
A=eye(size(B))%B与上例相同
A=
10000
01000
00100
00010
A=eye(4)
A=
1000
0100
0010
0001
3对角矩阵的生成
对角矩阵指的是对角线上的元素为任意数,其它元素为0的矩阵。
(1)A=diag(V,K)命令中,V为某个向量,K为向量V偏离主对角线的列数。
K=0时表示V为主对角线;K>0的数时表示V在主对角线上;K<0表示V在主对角线以下。
(2)A=diag(V)相当于A=diag(V,0)
v=[19816]
diag(v,1)
ans=
010000
009000
000800
000010
000006
000000
diag(v,-1)
ans=
000000
100000
090000
008000
000100
000060
diag(v,-1)
ans=
000000
100000
090000
008000
000100
000060
4、上三角阵和下三角阵的生成
(1)triu(X,K)命令中,K=0表示主对角线以上部分(包括主对角线);K>0表示矩阵的主对角线K列以上的部分;K<0表示矩阵的主对角线K列以下的部分。
triu(X)等价于triu(X,0)。
B=[1980;1981;1949;2008]
B=
1980
1981
1949
2008
triu(B,2)
ans=
0080
0001
0000
0000
triu(B)
ans=
1980
0981
0049
0008
triu(B,0)
ans=
1980
0981
0049
0008
5、随机矩阵的生成
随机矩阵之矩阵元素是由随机数构成的矩阵。
(1)rand(N)生成N阶随机矩阵,生成的元素值在区间(0.0,1.0)之间。
(2)rand(M,N)命令生成M*N阶随机矩阵,生成的元素值在区间(0.0,1.0)之间。
(3)randn(N)命令生成N阶随机矩阵,生成的元素服从正态分布N(0,1)。
(4)randn(M,N)命令生成M*N阶随机矩阵,生成的元素服从正态分布N(0,1)。
rand(5)
ans=
0.95010.76210.61540.40570.0579
0.23110.45650.79190.93550.3529
0.60680.01850.92180.91690.8132
0.48600.82140.73820.41030.0099
0.89130.44470.17630.89360.1389
randn(5)
ans=
-0.43261.1909-0.18670.11390.2944
-1.66561.18920.72581.0668-1.3362
0.1253-0.0376-0.58830.05930.7143
0.28770.32732.1832-0.09561.6236
-1.14650.1746-0.1364-0.8323-0.6918
6、范德蒙德矩阵的生成
范德蒙德矩阵是线性代数中一个很重要的矩阵。
用A=vander(V),其中有V(i,j)=V(i)^(n-j)。
v=[13579];A=vander(v)
A=
11111
8127931
6251252551
24013434971
65617298191
7、魔术矩阵
魔术矩阵是一个方阵,且方针的每一行每一列以及每条主对角线的元素之和都相同(2阶方阵除外),用magic函数生成魔术矩阵。
Magic(N)命令生成N阶的魔术矩阵,使矩阵的每一行每一列以及主对角线的元素和相等;N>0或N=2除外。
magic
(2)
ans=
13
42
magic(3)
ans=
816
357
492
magic(4)
ans=
162313
511108
97612
414151
7、Hilbert矩阵和反Hilbert矩阵的生成
Hilbert矩阵是有名的病态矩阵,它的第i行第j列的元素值为1/(i+j-1)。
(1)hilb(N)命令生成N阶的Hilbert矩阵。
(2)invhilb(N)命令生成N阶反Hilbert矩阵。
A=hilb(5)
A=
1.00000.50000.33330.25000.2000
0.50000.33330.25000.20000.1667
0.33330.25000.20000.16670.1429
0.25000.20000.16670.14290.1250
0.20000.16670.14290.12500.1111
B=invhilb(5)
B=
25-3001050-1400630
-3004800-1890026880-12600
1050-1890079380-11760056700
-140026880-117600179200-88200
630-1260056700-8820044100
C=A*B
C=
1.00000000
01.0000000
001.0000-0.00000
0001.00000
00001.0000
8、Hadamard矩阵
Hadamard矩阵为元素1或-1组成,并且满足条件H’*H=N*I,Hadamard矩阵的维数为N,I为N阶单位矩阵,Hadamard矩阵在组合数学,数值分析和信号处理方面都有广泛的应用。
与要注意的是,当N=1时,Hadamard矩阵就是1,当N>=2时,Hadamard的维数N有一定的要求,即N、N/12或N/20是2的正整数次幂。
Hadamard(8)
ans=
11111111
1-11-11-11-1
11-1-111-1-1
1-1-111-1-11
1111-1-1-1-1
1-11-1-11-11
11-1-1-1-111
1-1-11-111-1
hadamard(6)
?
?
?
Errorusing==>hadamard
nmustbeanintegerandn,n/12orn/20mustbeapowerof2.
9、Hankel矩阵
Hankel
矩阵是针对于一个向量C或者两个向量C或R,而生成的一个对称矩阵。
矩阵中各元素满足如下规律:
(1)当只有一个向量C时,H=hankel(C):
以向量C作为Hankel
矩阵的第一列;反对角线上的各元素相等;主反对角线下方元素为0。
(3)当有两个向量C和R时,H=hankel(C,R):
以向量C作为Hankel矩阵的的第一列;以向量R作为矩阵的第一行;当C的第一个元素不同于R的第一个元素时,取C的第一个元素作为主反对角上的元素。
>>c=[5678910];
r=[67891011];
H=hankel(c)
H=
5678910
6789100
7891000
8910000
9100000
1000000
>>H=hankel(c,r)
Warning:
Lastelementofinputcolumndoesnotmatchfirstelementofinputrow.
Columnwinsanti-diagonalconflict.
(Type"warningoffMATLAB:
hankel:
AntiDiagonalConflict"tosuppressthiswarning.)
>InC:
\MATLAB6p5\toolbox\matlab\elmat\hankel.matline27
H=
5678910
6789107
7891078
8910789
91078910
107891011
10、Toeplitz矩阵
Toeplitz矩阵与Hankel矩阵类似,也是针对于一个向量C或者两个向量C或R,而生成的一个对称矩阵。
矩阵中各元素满足如下规律:
(1)当只有一个向量C时,T=toeplita(C):
以向量C作为Toeplitz矩阵的第一列:
对角线上的各元素相等;各元素关于主对角线对称。
(2)当有两个向量C或R时,T=toeplitz(C,R)时:
以向量C作为Toeplitz矩阵的第一列;以向量R作为矩阵的最后一行;当C的第一个元素不同于R第一个元素时,取C的第一个元素作为主对角上的元素。
>>c=[5678910];
r=[67891011];
T=toeplitz(c)
T=
5678910
656789
765678
876567
987656
1098765
>>T=toeplitz(c,r)
Warning:
Firstelementofinputcolumndoesnotmatchfirstelementofinputrow.
Columnwinsdiagonalconflict.
(Type"warningoffMATLAB:
toeplitz:
DiagonalConflict"tosuppressthiswarning.)
>InC:
\MATLAB6p5\toolbox\matlab\elmat\toeplitz.matline18
T=
57891011
6578910
765789
876578
987657
1098765
二、矩阵的特征参数运算
1、矩阵的逆运算的充分必要条件是矩阵的行列式不为零。
A=[1000;1200;2130;1214]
A=
1000
1200
2130
1214
>>B=inv(A)
B=
1.0000000
-0.50000.500000
-0.5000-0.16670.33330
0.1250-0.2083-0.08330.2500
2、矩阵的行列式运算
当矩阵为方阵时,可以进行矩阵的行列式运算操作,用det函数操作。
>>x=det(A)%A、B取自上例
x=
24
>>y=det(B)
y=
0.0417
>>i=x*y
i=
1
3、矩阵的特征值运算
(1)用eig和eigs两个函数来进行矩阵的特征值运算。
其格式如下:
E=eig(X)命令生成由矩阵X的特阵值所组成的一个列向量。
(2)[V,D]=eig(X)命令生成两个矩阵V和D,其中V是以矩阵X的特征向量作为列向量组成的矩阵,D是由矩阵X的特征值作为主对角线元素购成的对角矩阵。
(3)eigs(A)命令是由迭代法求解矩阵的特阵值和特征向量。
(4)D=eigs(A)命令生成由矩阵A的特征值组成的一个列向量。
A必须为方阵,最好是大型稀疏矩阵。
(5)[V,D]=eigs(A)命令生成两个矩阵V和D,其中V是以矩阵A的特征向量作为列向量组成的矩阵,D是由矩阵A的特征值作为主对角线与元素构成的对角矩阵
>>x=magic(3)
x=
816
357
492
>>a=[100;003;090]
a=
100
003
090
>>E=eig(x)
E=
15.0000
4.8990
-4.8990
>>[V,D]=eig(x)
V=
-0.5774-0.8131-0.3416
-0.57740.4714-0.4714
-0.57740.34160.8131
D=
15.000000
04.89900
00-4.8990
>>D=eigs(a)
D=
-5.1962
5.1962
1.0000
>>[V,D]=eigs(a)
V=
001.0000
0.50000.50000
-0.86600.86600
D=
-5.196200
05.19620
001.0000
>>D=eigs(a)
D=
-5.1962
5.1962
1.0000
4、矩阵的范数运算
数值分析与计算方法所得不同之处在于引入了范数的概念,用norm和normest函数来计算矩阵的范数,其格式如下:
(1)norm函数
norm(X)用来计算矩阵X的2-范数
norm(X,2)与norm(X)的功能相同
norm(X,1)用来计算矩阵X的1-范数
norm(X,inf)用来计算矩阵X的无穷范数
norm(X,’fro’)用来计算矩阵X的frobenius范数
(2)normest函数
normest函数只能计算矩阵的2-范数。
且是其2-范数的估计值,适用于计算norm(X)比较费时的情况,其格式为normest(X).
>>X=hilb(4)
X=
1.00000.50000.33330.2500
0.50000.33330.25000.2000
0.33330.25000.20000.1667
0.25000.20000.16670.1429
>>norm(4)
ans=
4
>>norm(X)
ans=
1.5002
>>norm(X,2)
ans=
1.5002
>>norm(X,1)
ans=
2.0833
>>norm(X,inf)
ans=
2.0833
>>norm(X,'fro')
ans=
1.5097
>>normest(X)
ans=
1.5002
5、矩阵的条件数运算
矩阵的条件舒适判断矩阵“病态”程度的一个量值,矩阵A的条件数越大,表明A越“病态”,反之,表明A越“良态”。
(1)cond函数
cond函数用于计算矩阵的条件数,cond(X)返回关于矩阵X的2-范数的条件数。
cond(X,P)关于矩阵X的P-范数的条件数(P为1、2、inf或fro)。
(2)rcon函数
rcond函数用于计算矩阵条件数的倒数值,所以当矩阵X病态时,rcond(X)就接近0;X“良态”时,rcond(X)就接近1。
(3)condest
condest(X)用于计算关于矩阵X的1-范数的条件数的估计值。
>>M=magic(3);
>>H=hilb(4);
>>c1=cond(M)
c1=
4.3301
>>c2=cond(M,1)
c2=
5.3333
>>c3=rcond(M)
c3=
0.1875
>>c4=condest(M)
c4=
5.3333
>>h1=cond(H)
h1=
1.5514e+004
>>h2=cond(H,inf)
h2=
2.8375e+004
>>h3=rcond(H)
h3=
3.5242e-005
>>h4=condest(H)
h4=
2.8375e+004
6、特征值的条件数运算
通过函数condeig进行特征值条件数的计算。
函数使用方式为condeig(A)或者[V,D,S]=condeig(A),其中condeig(A)表示有矩阵的各特阵值条件数所构成的列向量;[V,D,S]=condeig(A)等价于上面介绍[V,D]=eig(A)和S=condeig(A)。
V表示特征向量组成的矩阵,D表示特征值组成的对角阵,S表示对应的特征值条件数。
>>V=[11110E10]
V=
1.0e+011*
0.00000.00000.00001.0000
>>A=diag(V)
A=
1.0e+011*
0.0000000
00.000000
000.00000
0001.0000
>>Jt=cond(A)%矩阵的条件数计算
Jt=
1.0000e+011
>>Tt=condeig(A)%矩阵特征值的条件数计算
Tt=
1
1
1
1
>>M=magic(7)
M=
3039481101928
384779182729
466817263537
5141625343645
1315243342444
2123324143312
2231404921120
>>Jt=cond(M)%矩阵的条件数计算
Jt=
7.1113
>>Tt=condeig(M)%矩阵特征值的条件数计算
Tt=
1.0000
1.0048
1.3171
1.3125
1.0048
1.3125
1.3171
7、矩阵的秩
用rank来求得矩阵的秩
>>T=rand(6)
T=
0.95010.45650.92180.41030.13890.0153
0.23110.01850.73820.89360.20280.7468
0.60680.82140.17630.05790.19870.4451
0.48600.44470.40570.35290.60380.9318
0.89130.61540.93550.81320.27220.4660
0.76210.79190.91690.00990.19880.4186
>>r=rank(T)
r=
6
>>T1=[111;223]
T1=
111
223
>>r=rank(T1)
r=
2
8、矩阵的迹
矩阵的迹是指矩阵主对角线上所有元素的和,也是矩阵的特征值。
用trace函数求得。
>>T=trace(M)
T=
65
>>T1=eig(M)
T1=
65.0000
-21.2768
-13.1263
21.2768
13.1263
>>T2=65-21-13+21+13
T2=
65
9、矩阵的伪逆
在MATLAB中,矩阵的伪逆运算可以有函数pinv实现。
完整的应用形式为X=pinv(A),矩阵X和矩阵A同维数,并且矩阵A和矩阵X满足条件A*X*A=A、X*A*X=X和A*X=X*A=I(在一定的误差条件下近似成立)
>>A=magic(4