|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) o* k; B& `% l
矩阵是进行数据处理和运算的基本元素。在MATLAB中
/ @! K* ?' S4 Z" j. Z/ sa、通常意义上的数量(标量)可看成是”1*1″的矩阵;" m7 C' A' t8 p) E8 D; R
b、n维矢量可看成是”n*1″的矩阵;/ R' ?6 H7 E8 O) X; Q+ s8 v/ k
c、多项式可由它的系数矩阵完全确定。9 m6 F1 K' @( Z' v3 b
4 k% V r3 N/ J% } U! Z; o一、矩阵的创建4 T* C+ O; ~+ U% \( l! ~
* P0 N* l" a1 `, A( z# P1 u' l
在MATLAB中创建矩阵有以下规则:
- K% {# S/ @3 L5 ga、矩阵元素必须在”[ ]“内;
) ` ~3 g; V) E8 ?6 Jb、矩阵的同行元素之间用空格(或”,”)隔开; H/ K; [. s* g1 [9 W
c、矩阵的行与行之间用”;”(或回车符)隔开; X1 R5 S! [9 H' T9 k* M
d、矩阵的元素可以是数值、变量、表达式或函数;
! m) v* q1 X- \; H! }, m+ Oe、矩阵的尺寸不必预先定义。' c \3 c/ H( u3 v0 e
2 M i1 Q! j) c. }
下面介绍四种矩阵的创建方法:
7 z) ?8 n+ t" u0 x1 B0 U, I
3 e% W+ @0 z o$ s3 l! a" G$ s1、直接输入法- J) g- e. p0 e' p( `, n: ]" |5 X
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。 还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 可以看出来linspace(a,b,n)与a:(b-a)/(n-1):b等价。
1 j' T/ I( Y( |; Q) Q0 l. y$ T
/ g* D' c5 T+ H0 T$ j2、利用MATLAB函数创建矩阵
" l: {1 _/ n8 |0 x' N基本矩阵函数如下:
" h$ q$ `1 |* E(1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵;
" n4 c2 l; C3 t9 v' Z5 l# o( ^7 H(2) zeros()函数:产生全为0的矩阵;
$ O! H- A! k4 P9 n5 T" o(3) rand()函数:产生在(0,1)区间均匀分布的随机阵;" ^9 P/ P; _$ ]9 J$ i( F
(4) eye()函数:产生单位阵;2 B0 f/ _$ F) \2 W+ o
(5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。
2 }% l) Y- o" a4 ?, A! A+ f A# `3 G3 p# O9 u( ?2 I* g3 K
3、利用文件建立矩阵/ N' C* ?8 l( d9 @. N
当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。
1 Z7 D3 |# b2 c: g, a, V1 p* @: `6 C0 j# W
二、矩阵的拆分6 J0 }, o: F7 u# f4 X
: Q/ n- t. Y+ ]) M! q' K
1.矩阵元素
, b1 w' P+ D+ D' d可以通过下标(行列索引)引用矩阵的元素,如 Matrix(m,n)。也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。其相互转换关系也可利用sub2ind和ind2sub函数求得。
6 Y. ^# I7 m+ t1 v' L4 O- L
5 a+ n G, u5 T2.矩阵拆分% A7 p. Y8 {- m
利用冒号表达式获得子矩阵:
! x4 k3 N; X0 K3 F9 r(1) A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。
4 e `, _3 w& t& k; L(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表示某一维的末尾元素下标。
6 k% A; f& q- r7 ~- n利用空矩阵删除矩阵的元素:5 r" t% t a' G. y
在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。
- N! Z5 v7 V f8 |2 ^ F& d2 b- e4 a. T5 S$ b; R+ U2 A$ y/ L. ~
3、特殊矩阵& c2 W! f. ?* `2 D+ g
(1) 魔方矩阵 魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。
, J8 _0 t' E' K3 W7 Y1 | t(2) 范得蒙矩阵 范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。
3 k* ~; k% g3 y% K, M1 i; D+ O(3) 希尔伯特矩阵 在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。 使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。! n- E) U, r& \& W" S7 e
(4) 托普利兹矩阵 托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。: c- U2 q6 P' J7 g5 a* Q
(5) 伴随矩阵 MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
% s/ U2 K- }; [' M(6) 帕斯卡矩阵 我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)生成一个n阶帕斯卡矩阵。# F @, O1 i# X$ t( z& F2 B
, k* U) p7 f6 I+ H( M; ?/ R; U$ G三、矩阵的运算: F6 E& [, b. x* s/ ^
2 J% a; o9 g% F4 r9 S+ w1、算术运算
! i. e* i' r: ]" `/ OMATLAB的基本算术运算有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)、’(转置)。 运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。
% O) e1 _, O3 C- P, ]! }, t* u& ]# O(1) 矩阵加减运算 假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。 t+ x0 M3 }6 O% v
(2) 矩阵乘法 假定有两个矩阵A和B,若A为m*n矩阵,B为n*p矩阵,则C=A*B为m*p矩阵。
# b3 i# @9 d, z- l(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。6 G& ~7 f; E4 _8 ?
(4) 矩阵的乘方 一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
" x4 p7 A/ S: Q. a(5) 矩阵的转置 对实数矩阵进行行列互换,对复数矩阵,共轭转置,特殊的,操作符.’共轭不转置(见点运算);. l. v( V3 e( \5 D- \
(6) 点运算 在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。9 T/ Z# c( ^- J7 Z u( u- E# l# O
4 W/ Z* b2 D4 Q4 j( T2 {+ B2、关系运算
0 |$ N3 j- [' Y& TMATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。关系运算符的运算法则为:
3 `2 z* x: ~2 ^# {, m" Q) m(1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0;
$ g+ L0 w, K9 ?" u3 y6 ^ f& B(2) 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成;
/ W6 R. z! [- }8 O% `& j: A(3) 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
" `9 F6 h; d" D: i3 f, x0 }# a, J. e. p0 }$ ]+ Q$ c2 W
3、逻辑运算
, K4 D! Q3 X) m3 l. O7 e, U4 t4 eMATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。 逻辑运算的运算法则为:5 P( ~' D5 M* @' [$ G( Q& `
(1) 在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示;
" @( s. e4 [% r$ n! _* Q(2) 设参与逻辑运算的是两个标量a和b,那么,a&b a,b全为非零时,运算结果为1,否则为0。 a|b a,b中只要有一个非零,运算结果为1。~a 当a是零时,运算结果为1;当a非零时,运算结果为0。
3 K$ @ `; O6 J! Q$ Z, v(3) 若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成;! T7 I5 {4 C" f" a6 U" v
(4) 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成;: ?1 i m, n: O' B+ s& w# b
(5) 逻辑非是单目运算符,也服从矩阵运算规则;" f1 M5 G8 [' r( c p9 Z! M
(6) 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
& j( g+ k% Y% c. K: e; ~6 U8 z: K9 e4 _$ E% U1 u1 z) K0 i
四、矩阵分析
7 G/ q8 z- e4 }0 [# w% r6 H/ D# C, X7 M- S8 d7 j+ J; q# L
1、对角阵
s: U: c) K9 ]* @(1) 对角阵 只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。
# |3 R! }; |) g% \4 o8 x(1) 提取矩阵的对角线元素 设A为m*n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。
$ y; U6 C6 |) Q$ x. b% A! |(2) 构造对角矩阵 设V为具有m个元素的向量,diag(V)将产生一个m*m对角矩阵,其主对角线元素即为向量V的元素。diag(V)函数也有另一种形式diag(V,k),其功能是产生一个n*n(n=m+k)对角阵,其第m条对角线的元素即为向量V的元素。* ~4 ?+ v9 ~6 q5 A7 G
* O% `! g4 U- H% H2 N2、三角阵1 Y) }* R" b ?' T& P1 ]
三角阵又进一步分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。
! H% e( D5 K: c: I9 L2 b3 A(1) 上三角矩阵 求矩阵A的上三角阵的MATLAB函数是triu(A)。 triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。" k5 j }& x9 x9 l; H9 e b
(2) 下三角矩阵 在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。0 Z/ z: `; \% V
- Y: k" G$ W* I% b3、矩阵的转置与旋转
9 t2 u: z% e5 W5 i* A(1) 矩阵的转置 转置运算符是单撇号(’)。" c! A3 M6 h7 q$ [( y
(2) 矩阵的旋转 利用函数rot90(A,k)将矩阵A旋转90o的k倍,当k为1时可省略。
" t4 n, y* P( w6 B6 J+ L
$ `* N1 }( z# q; V4、矩阵的翻转
1 f; D4 \$ b% e( E: t对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依次类推。矩阵A实施左右翻转的函数是fliplr(A),对矩阵A实施上下翻转的函数是flipud(A)。
) f' K& q- O9 C
. {! |/ |+ ]+ y8 M: Z2 p; w5 B8 j$ Z5、矩阵的逆与伪逆
* y9 M2 T3 |7 \1 l& c; J(1) 矩阵的逆 对于一个方阵A,如果存在一个与其同阶的方阵B,使得:AB=BA=I (I为单位矩阵) 则称B为A的逆矩阵,当然,A也是B的逆矩阵。求方阵A的逆矩阵可调用函数inv(A)。+ ~+ ~3 K; ~7 q
(2) 矩阵的伪逆 如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A’同型的矩阵B,使得:ABA=A,BAB=B 此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。# H4 }4 ]: G" a0 D1 F7 O
0 C) p2 j: Q& U; S& o% t
6、方阵的行列式" T7 n; k) N! s' G, A& `3 l
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。 ], Q0 c3 N' O' D' [! w) ?$ A
1 C+ t# F9 I1 X* c. K. f C- ]7、矩阵的秩与迹
/ t0 b4 U7 x) H) B/ y(1) 矩阵的秩 矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。
2 B+ P# \5 X+ X(2) 矩阵的迹 矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
1 N3 K0 b0 y9 z0 q5 o$ b. [, m0 _7 S
: x" |: J. y$ ?) z9 u8、向量和矩阵的范数
7 L9 s, V: w- V4 z矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。! F4 u+ I$ e( c& Z6 {& ~
(1) 向量的3种常用范数及其计算函数 在MATLAB中,求向量范数的函数为:6 i0 n- k7 i) V6 h* Q* u; i2 h
a、norm(V)或norm(V,2):计算向量V的2-范数;) m, }/ S- y% _1 w' F( [# [" L
b、norm(V,1):计算向量V的1-范数;* g, z! N: M. N
c、norm(V,inf):计算向量V的∞-范数。5 ^3 p3 W! ]: U
(2) 矩阵的范数及其计算函数 MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。
$ a2 d( J$ X( b- v& Z P(3) 矩阵的条件数 在MATLAB中,计算矩阵A的3种条件数的函数是:
* | W/ U! k& ?2 |* ua、cond(A,1) 计算A的1-范数下的条件数;9 k1 J$ i& _" a0 g
b、cond(A)或cond(A,2) 计算A的2-范数数下的条件数;3 G8 o& }; G/ w+ \: _ [
c、cond(A,inf) 计算A的 ∞-范数下的条件数。
. U0 C; ?( f- ]* q+ S) h$ s9 u) `- H
( l/ v6 @; U# a- Q9、 矩阵的特征值与特征向量) h- S2 r& T; D; i* Q4 O3 `
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:
' d' K! ~, i1 _9 }(1) E=eig(A):求矩阵A的全部特征值,构成向量E。. n7 U' d" I5 ]( k/ g7 f
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
$ n% A: f- A; V2 T# _( g(3) [V,D]=eig(A,’nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。9 J6 [5 T5 w) M3 b, a
; a6 x9 T8 r) d0 t5 c; H五、字符串8 Q: n3 A2 _0 O: \! W
7 k# s5 x* Y1 w7 ^2 [+ _
在MATLAB中,字符串是用单撇号括起来的字符序列。MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。与字符串有关的另一个重要函数是eval,其调用格式为: eval(t) 其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。; y6 G$ D) D+ Q9 m8 Y
: P& p" O9 T5 Y" ]* h' v( ?六、其他' s3 U! I# x! P5 ?
$ a) D- ^. B9 u) I5 H
查看矩阵非零元素的分布spy(A); |
|