|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
! F) W" [/ M% u K' Z7 d# ?% T, W4 S* C; B) g
§3.1 加和减 L8 A4 y% `" x2 u
如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:) A4 u) d( X, ?& Y } [4 a
' G: [+ K+ S; a' b% m; xA= B=% v- S7 r; o/ ~* Z7 w
; t& H. s' }6 Z" |; j9 U1 2 3 1 4 7( @7 C% y0 L+ f9 d; _9 n, |
% O, x ?: I5 E% P4 u4 5 6 2 5 84 H+ p. C/ I) g; L# B
+ v3 J y5 z" V
7 8 0 3 6 0, e$ f+ N3 o6 A
3 o9 e: w; c* ?8 [
C =A+B返回:
/ P+ Q, j4 |7 }, w0 a+ \9 g" E! a! M, a$ i$ c, @1 W7 w& ?
C =9 L$ Z% }3 h, V
7 s- H: }7 I# X1 t5 m, f- S
2 6 10% j1 L, ~9 m! o+ L4 H0 X5 x3 L
) X( g' P% \, |" ^. f; W 6 10 14
# T6 A2 v3 n+ R7 K/ M0 y. k7 T$ K( M7 C5 a
10 14 0
8 v; B8 D7 g% V3 l- D. r5 m( d$ s- r4 w* w
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:
, R* d7 d1 e% C1 T6 P9 ]* P ]$ V5 s/ H4 {% ]
x= -1 y=x-1= -2) K) N( W% g3 Y+ }/ u; G
6 w- Z0 |* g, I9 C+ k4 O0 -1: o1 V6 `6 }) \! `* N$ e3 f; g1 S
2 R8 p" L! ^2 J; u# i
2 1# h7 u# j8 t& U! i2 ^
: w. v0 j* _) p2 M1 u1 H- Y§3.2矩阵乘法1 L3 b" j9 G& x2 b
Matlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
1 M* b9 [8 F$ w S% y6 ^" u; t- W! w% N
§3.2.1 矩阵的普通乘法$ |7 y4 h7 S0 S6 E% x0 o
矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.
2 k4 V" a, C; b8 e! R: E; N$ X+ k
" P# J2 Z8 l; q4 {; m3 d1 }$ ]! C1 m0 B如:A=[1 2 ; 3 4]; B=[5 6 ; 7 8]; C=A*B,2 h5 B' P5 D6 y, p5 [
! k9 q/ z" s0 n7 `6 G, \9 X结果为
4 {# @& ^% ?+ U6 o8 b% E5 ]% c2 G1 q3 `( a S
C= × = =
$ [% O+ T1 O0 l& q; V8 T- G* D% ~' ~) Z9 g9 ]
即Matlab返回:
9 q& D# G8 [4 Q+ A5 ~$ n1 V5 R- N7 [
C =
4 q9 V9 k8 O4 h( |
' c3 v$ F* n0 o- y+ S 19 22
# }6 J! B! P! |7 {1 {6 C! S2 {! M& J9 G) Y1 s+ V( {
43 50
+ Q7 f* H( {( } A* m0 \0 W5 F" z, R, f! g/ g8 P
如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵./ v' m$ p" S/ G) |
3 j; q. u, D- N$ w
§3.3 矩阵除法
, v: Q$ k! T6 e; r+ f在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
/ a' q9 Y6 B5 w( q5 {% O" L5 q V2 y+ q5 n- _7 Y8 b' y
通常:
& n1 k1 l" H5 @5 r- ?
$ Q; m6 _* R7 h2 u8 A2 Mx=A\B就是A*x=B的解;
& o# Y& }7 p7 ~. `5 x/ u6 V1 s2 ?" z& K
x=B/A就是x*A=B的解.3 s; C- m# H; N! D) i" C6 b7 i L
" \ \/ h3 V# K' t2 O5 y当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.+ |5 M# H! g1 G# ]$ g
% U2 y0 ~% w# i9 k" x
如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
, d0 Q3 T, M% |( ?% ]) D. y* H, d4 d, u! t6 E5 q- [) Y% d
右除B/A可由B/A=(A'\B')'左除来实现.* E9 W: [4 D. f$ Z' Z
* I/ Q s0 t/ p4 ~; u. S3 K§3.4矩阵乘方/ s3 j- f& A4 o5 f5 I5 A
A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:4 S1 U- P. y7 L( d* Z# p6 M! n
, ^- ?2 B. @+ r* ?) r, i: K
A^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)
/ [" ? o% J, r. r4 [# _
) F8 Q8 G- T5 f5 Q如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.- ?+ g* Q) f5 {" w. x4 d: F
' I6 O2 g/ u8 R. z2 n$ F
§3.5 矩阵的超越函数, h% w8 q% V$ \. m
在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.% Z! `% E/ ]" I' `. I c' h$ v
5 K, x) y7 N f+ F- o5 \一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:! d/ v$ V$ @, }3 O7 C0 I
9 ~' p* j5 t: E+ Mexpm 矩阵指数
! I+ p1 l3 T0 m" H L0 Q' x! }6 Z
logm 矩阵对数& ^8 P, ?2 x- D9 V3 L8 R. \/ t* I
% ^3 w$ Q% Z' T$ r* dsqrtm 矩阵开方
7 V( @- F' m6 ~' q3 t
: u1 h% O9 W1 z; ?. M- }- F: F/ B5 \% n所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.0 U4 ?# J$ v2 k5 u1 c8 \
4 d F) z; u; g, i
§3.6数组运算
3 H1 N% e% w5 ^' R& [. R数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.
! g% A: i( p3 `
: [! m/ l8 h/ E5 A§3.6.1数组的加和减
) ?0 S& e7 x% t1 M {: {. q对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.
) I& {' E. G- l O& a( O# r" S1 w: h0 I& k% |
§3.6.2数组的乘和除* r8 k n# b# _( z9 l7 S5 j5 v
数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1 2 3]; y=[ 4 5 6];
; V5 j. u# b- W7 K" z9 x' Z( E9 M$ b% m8 m
计算z=x.*y
" W9 p: Q a* I+ r8 m
$ |9 |% ]; b: r% {结果z=4 10 189 \$ ?* ]4 `+ m6 N' `, k4 n
4 U! U- B. |* v" `9 `- s2 T数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.# w% {; A3 a8 [
3 D/ ^4 P: r) B# m7 s# g
§3.6.3 数组乘方1 s' V: T* t, }
数组乘方用符号.^表示.
% Q8 \$ k/ [" w+ S8 Y3 M9 r
9 n: `! \6 G' P) j( D' t U例如:键入:2 b3 J& \/ B% V
% f7 n6 v4 O. _) `0 z7 px=[ 1 2 3]5 ?* W Q+ t# E7 S* K- L
4 Z* t3 N# l! R) G" A9 xy=[ 4 5 6]
a h; |/ h* U* ]) n+ l7 I. H" ^: d$ ~+ q" Y) X! j2 R0 F( h
则z=x.^y=[1^4 2^5 3^6]=[1 32 729]9 c% G5 L: Z: w ]# O
4 k1 b; Q2 u2 {- g(1) 如指数是个标量,例如x.^2,x同上,则:
, [# L% x, }1 u4 F# E, a
$ ~, W: z$ d& v; Y3 Ez=x.^2=[1^2 2^2 3^2]=[ 1 4 9]
/ {: I0 b5 b3 \/ R* \
. b' t+ S R4 Z+ e5 O(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
( i) O6 N9 Z; F) j
0 A" F, _* ?, A1 Lz=2 .^[x y]=[2^1 2^2 2^3 2^4 2^5 2^6]=[2 4 8 16 32 64]
- k8 Q' d8 @. Q5 s
! L% N U! ]. ]从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.
; [' Z8 S; t# T
?8 H5 l }6 X0 Z0 d/ b§3.7 矩阵函数' o3 z. d# ]( o! O* Q
Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:) N, _2 Q# }& w t) q
% d: v* J7 ^7 l9 L
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.
/ _# x8 ]# C2 m7 l) }% h
9 K5 `* z- b/ l" H# p4 U8 @; O§3.7.1三角分解
* P; n: r% {) `% C# u. K最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法. }+ `- ? F, T# u
6 ]- Z0 t5 `) H& n! Y从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
6 P$ Q; N Q; r6 {5 R/ q: h. x" M" j& O8 g9 |9 A2 x
例如:& W) s9 G" j j6 P6 {5 a) |
9 W# x J( S P7 g% DA=[ 1 2 3
* J" B: U* ]+ k; W
; Z% n! H0 t5 C# V4 5 6' N+ q% P9 H# H+ C n" I' I
2 I- S" S9 C+ l# p( A9 Q; X# |
7 8 0]6 t2 q6 A4 ~1 Y
5 E' ^7 N u& i K, }
LU分解,用Matlab的多重赋值语句
; @) y1 _& x7 B8 F& m* N1 _$ D( C) }: M
[L,U]=lu(A)) X; G$ s; R S% A; N
- x! |8 X) q! s# U f& Z8 f8 b得出
- ^0 g. C5 Q5 k+ c1 n% h L5 q7 g: g9 g, ? N! d) D) I
L =
' w V- V h6 n- c0 }4 w3 |, ?% f3 y
0.1429 | 1.0000 | 0 | 0.5714 | 0.5000 | 1.0000 | 1.0000 | 0 | 0 |
! X& T& d- A7 pU =8 @2 b: p# ~- W8 U5 U$ z& F
& J0 J. Z6 M6 ^' S
7.0000 | 8.0000 | 0 | 0 | 0.8571 | 3.0000 | 0 | 0 | 4.5000 | % R7 ]# J+ k& a0 o
注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.0 d" v9 U, _& p% e- v* U
# j3 C+ S8 n% N }
求逆由下式给出: x=inv(A)( K k5 ]6 Q6 C" C: y5 j% e
8 N6 K8 m( E' a2 j/ r* G# b/ R: x# {x =5 e- Y) P1 l4 [
/ Z2 G, K# C! l-1.7778 | 0.8889 | -0.1111 | 1.5556 | -0.7778 | 0.2222 | -0.1111 | 0.2222 | -0.1111 |
# X0 {3 W( C* n7 V) D E* G S) |从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:
9 S: v0 x) t! i& O( g+ A, v- h a6 G& E$ `( D
d=det(A)8 K8 @! J8 y" ? {
2 d5 \3 K/ g2 ]d =' G- D$ x3 D5 }7 p6 \' j
/ I9 y. B$ N" J
27
# L: h5 s# \3 H2 d
$ D4 M) M5 ^0 m直接由三角分解计算行列式:d=det(L)*det(U)
: H% {( D" i% F; y9 _) F5 l% \) Q9 C; x+ T
d =
7 \. e* ^+ E+ `
- z2 A) t/ t& ]* v; O& Z+ f27.0000
0 h3 n7 K' J! }. D) `. I& I: X7 x3 |
为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.
' w# Z4 N/ j# n! W
u: Z% H$ p: I7 x+ P. E例如:线性联立方程取 b=[ 11 O, U" A" L7 {; ?7 E4 L. J1 G+ M4 B
) @1 \5 W s- m& A3 [ 3
6 V! e* }+ f' }# ?
3 Y8 c1 a9 R% [! t" ?" c 5]: G5 M* a0 m$ x/ Z5 N
0 Y/ M. T. R. E6 L* ~解Ax=b方程,用Matlab矩阵除得到* n$ P6 o1 q& l. R9 U7 C
8 A: ]9 O! p7 b
x=A\b! D6 ?) D& b, v- z0 _! f# A
/ T6 l. P% n4 c/ [2 ^
结果x=* M1 B: r- Z( ]% O
' I4 `* B) P8 ]0.3333
) T, w4 r% I, }* s, P. p! H" K$ d" e, j( x0 j. O* G
0.3333/ \& p( }1 u5 o8 g5 j
2 Q* v+ j: Q; h9 L6 v' L( D8 |
0.0000
# {. d5 }/ E9 O) V
5 l8 I% F( W" v% b由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:" |6 p5 H8 I+ M( v1 P: F% V3 q9 V
% W/ I3 u, j. h. R5 Gy =
" h9 ]" f# l/ c( \& g2 {) o, x. U8 e4 n: ]
5.0000
- Z. K- G Q. U; q8 G7 i
$ @, b4 h8 A: _3 H+ |) O3 B% ?0.2857
g" Q f5 ~3 e8 O
* O \, }1 {+ @* Q6 W2 Z' H; f0.0000
' Y0 z: e/ w$ E! v2 s# w
3 N! m5 T6 z3 W' P% A0 @Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.
1 c5 [( M+ @) S3 P7 B
; L% n; e) U6 P§3.7.2正交变换+ ~$ R# J9 m# v4 v( I6 Z
“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
( s. u/ V" v3 m1 f! K$ }' n& d9 d' K& d& f
例如A=[ 1 2 3
' R4 U. S; l* r1 O+ k- y
# h; J& w, Q, c1 i4 5 6$ x. v8 M3 A7 S
' X5 H' H" t3 h3 a* T
7 8 9$ U/ o* C; Y& ?! J
) t* @2 q8 y+ n6 R: G3 |7 H6 M
10 11 12]& H( l! |6 I: b0 H
9 Y1 M6 x2 X' X7 S T是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:; m! B# T% ?: p' c
/ b5 _! a# {4 n4 I[Q,R]=qr(A). s8 k9 H0 c2 n+ l
4 f# X$ l# z( Z2 p* cQ =
7 t1 {0 E! D) j
! i% A: q9 t: S0 z8 I-0.0776 | -0.8331 | 0.5444 | 0.0605 | -0.3105 | -0.4512 | -0.7709 | 0.3251 | -0.5433 | -0.0694 | -0.0913 | -0.8317 | -0.7762 | 0.3124 | 0.3178 | 0.4461 | " u. ~% U* u, `8 b
R =2 G( t4 I: y, \: e4 Z
; ], W' B+ m4 p$ Y! I
-12.8841 | -14.5916 | -16.2992 | 0 | -1.0413 | -2.0826 | 0 | 0 | 0.0000 | 0 | 0 | 0 | ; d3 c/ T8 _, R- d/ n! w
可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.
4 Q, S0 x. `- I5 Q K( |9 H
2 L$ D0 T% ?- F5 Y6 j1 H# w下面尝试利用QR分解来求超定和降秩的线性方程组的解.
: A1 [3 J. I0 l% E7 G4 k% K/ b
& |: j( \, q B* G1 m4 F例如:3 u+ L/ F% h6 ?& Z
" s% t; U. D6 \& ^, }5 g/ hb=[ 1( P; V4 z2 G7 c0 T! `7 _) c9 n% c
$ } [$ j/ u& _9 @7 A36 b+ Z, o9 a( d
' T* [/ J. G& n7 D. D3 [
5, K# U& O+ A& s! b. A
% G& b' i5 x4 E, I6 h
7]
( w$ ~+ A/ S' x1 A$ V( q/ L. K t) H
讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.! M3 G8 i- O) n* x) R
7 h' N$ G; h0 P3 C9 r8 K结果为:- F) G! V7 @; i2 c1 c2 S
# l& K: n3 U4 s% f) B+ H3 SWarning: Rank deficient, rank = 2 tol = 1.4594e-0146 Y; N* l, l& o7 m; E
9 v) ^. t! ^* H8 r3 b3 ]9 W
x =' g3 p7 |* H+ [8 |- C5 R
2 a. l; T2 {' D; Y4 Y) z# o
0.5000
0 D2 B/ r8 S+ Q' B" x) c
& N! P! \4 C6 y9 V+ D 0- {& i" |0 P! N y% F9 ^
% a7 \! Y; z, ]! B
0.16679 |6 n0 F8 J; H, g. u& o$ {& i
2 \- v9 i1 Z) ]2 Q
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:( `% v/ O) R+ D; Z% D
; N' a' T' L- k! k- T2 Ty=Q'*b9 z3 d( G `3 H, D* N# I
: M' \# D: Y. t( j+ s& K% tx=R\y* t+ p. k( u6 G. ` k5 ?! E _) }7 a
" K# r$ ]6 }# q* n& Y
求出的y值为+ ?. ?' V/ b: o2 i' S W. L
5 U2 p, O! Q7 {2 Yy =; p' w% F* ]1 |
+ M- R* t, u2 q; F
-9.1586 | -0.3471 | 0.0000 | 0.0000 | 4 Y7 ?2 {5 J8 k
x的结果为
/ ]& C1 w: g- \. _/ k9 v, e/ }9 R N
Warning: Rank deficient, rank = 2 tol = 1.4594e-014, ~; R3 s6 Q( M' T: r7 U' u
$ |+ ?) b9 S9 S8 }6 P
x =& | [0 d/ q0 C2 _' B( S
, H. n, D# M1 A1 q( V3 K2 v) @
0.5000
! y+ O/ a* B+ @, v) I; E( \9 t2 n* f
0( Z% e Y, d# g8 \ X% x0 W/ A, g
" z/ m* y$ G1 E+ Z! V. m8 @/ f9 o N. H& Z
0.1667) I9 w) H) G+ n# ?
9 _ Y* Z1 q6 n2 c0 f# o
用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.% \; k2 y0 [! F i
. x t/ f3 l/ W+ |& S§3.7.3奇异值分解
+ |. i; h4 M: j i! r在Matlab中三重赋值语句% n- f# \$ y7 i5 d5 s
1 C( R! `7 d& z. [
[U,S,V]=svd(A)
7 w- G7 R8 P+ Z9 K2 D
& L) u) _1 N6 c/ p3 q$ ]( w1 Z在奇异值分解中产生三个因数:7 e! g; W- k: j$ U r
/ t0 \- N' t: f7 [A=U*S*V '
# {3 k6 v/ d2 C7 @3 _. U( y! u) u+ H3 Y1 p
U矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
+ d) H1 F' R3 Z+ m+ p8 {1 r$ |
3 @# J4 D. Y: |奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
" M! |8 ?* T/ Z" q0 f4 j. y
) x! {5 a5 i, t! ~; g7 Z§3.7.4 特征值分解
4 G5 @8 P$ k' A6 q如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.2 v5 {/ w: y) B4 }) _9 A
* ^1 X, v7 O5 h# P+ C: r' O9 E
函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:
2 [! C! T2 c$ @+ x# s- I
" H3 v8 p3 _! [; x2 SA=[ 0 1' }5 \0 H9 n+ _+ B: j3 }
5 }4 y1 E- v& s) g7 m
-1 0]
2 G2 l0 ~' M: G$ w( |- p# S6 W7 B" V/ i0 {4 X; n. o* o
eig(A)
% {3 m& c- P$ d! E7 H F. n) \* S8 Y$ |, [' O& ?
产生结果$ ~# r6 h5 {8 T8 j
8 d+ d; p8 |- B
ans =
# {/ ?! N4 L! J4 @4 n6 l0 [* Z5 a. I( x( M+ q1 D
0 + 1.0000i
# f1 Y, b* P/ N4 v5 Z/ _$ P! L* G6 O" C1 {* X3 z& {
0 - 1.0000i9 M) e0 V* I8 @$ r" S ^" I3 c
: [6 `3 q4 M$ [$ j5 d; D5 |如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:; |! Q+ c- l4 j' R2 o
( y6 G$ q0 M* j1 q; U/ _9 e[x,D]=eig(A)2 ?* m) s1 r7 q$ e3 X9 u
! i- m: j! ~( w, B3 D5 C5 x: l/ K
D的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.8 B- s9 s4 @" ]
7 J% c& b! q$ G- H8 E/ i0 [
计算特征值的中间结果有两种形式:
3 T. o) \6 R2 K
7 s4 `7 o$ x$ H' @5 EHessenberg形式为hess(A),Schur形式为schur(A).
$ b5 M p/ T! L+ i( n5 U7 E9 {" [5 I# a1 }8 d" S0 W/ |
schur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).
) D& V. |- ~9 ]7 Y A4 b
% i8 Y0 Z4 ^4 P- l3 u( Y/ y& O如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程
7 [" H! }& `, I) Z8 \8 a: m" H+ M
Ax=lBx
9 ?5 g9 s9 D8 d1 g% S6 c% B: L$ d4 J6 i
双赋值获得特征向量6 `0 c& u! |7 P- D; V( X9 ~
: Z! D8 @# j& @$ s9 d[X,D]=eig(A,B)
( V, T4 v% p( k( N {% }& z" S) \+ F( h+ Q! i" J" H6 h
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.
8 [- q+ e# C1 Z0 E' J* n, U+ j9 U& d3 l9 h$ ?6 D
§3.7.5秩
7 l; P- V: [* C# Z/ h! EMatlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.. z. G& s S& ]' Z- x
" F% i) H# g+ @% u' b
利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.3 \5 j7 q y2 |- M+ g
6 O" a; ]# `' o% | |
|