|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
8 O5 e& k8 u" b/ o4 ]" b
" u# m1 ^- [; _$ m3 y+ c+ `§3.1 加和减/ ^; f2 j- w, e4 M1 C& V
如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:
: K e3 t! D/ \. e& l
+ S) p5 Z& g; L9 L& H; }. ]A= B=
/ E! |. p4 V K4 ~! P8 ^% F
3 {9 g4 r/ K: Q; z: @! e1 C0 k1 2 3 1 4 7, i- U& Y; ]8 Y9 s3 r2 v
- b. c! ]5 M. n* ~4 5 6 2 5 8' c7 M5 t+ y5 b# H
6 s) m+ P$ r) V+ S7 8 0 3 6 05 Z) L( O( E" O9 h+ z! c. k/ D
# }! ]" C9 p8 i0 u& V
C =A+B返回:
! T% @% q9 {$ U3 X2 u5 |- C7 b: I" S9 l6 h$ | _4 E, G
C =
3 Z+ @4 @. w! \
0 s8 Z4 E5 y$ w% C 2 6 10, o, L- Q& N1 }! H" {4 v
$ l1 j. r7 `! V. E$ A" c! j 6 10 142 Z8 y- U, g2 I& @$ P9 R7 N, t
9 h( G p/ P3 N& f1 x( J 10 14 0
6 ?, E) O0 x z1 M) p: _4 s5 J$ w0 D7 n- Q
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:$ x4 D. b: U4 B$ Z
! n. P$ r9 x1 w5 R
x= -1 y=x-1= -2
% U' H, W; v) b
5 k. Z4 Y* ~0 x4 j d: b6 J0 -1/ W i; v" H0 @/ a0 S
" H# [' ~' }5 F! @, ]
2 1
/ \$ x6 X1 J n- d o7 |/ X0 @. I2 R a4 y0 x& U) @. @8 q; @
§3.2矩阵乘法
) v3 E: b$ H0 f& a. MMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
% d5 t6 b; Y7 l; @, Z3 z0 q. g3 c# b+ k
§3.2.1 矩阵的普通乘法
4 K$ y2 ~4 R- b7 N- b! ~( u矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同. I/ t- A3 K' l
5 c4 L9 U( H) Q* t9 _/ a7 J) M" s如:A=[1 2 ; 3 4]; B=[5 6 ; 7 8]; C=A*B,
- E1 q6 D: u9 |- @
! ^& E4 L; l. n; `: E: V5 M* ~+ [; ~结果为
. C% H/ o) |+ O3 t/ {# V! x) W9 P M! l
C= × = =0 n$ B* s% i \0 [2 U
; U- r4 _% Y% l( d5 p: L& ^- h
即Matlab返回:
* j1 H5 o) I9 m2 P( s* w7 D+ D& {/ j7 [7 a1 M1 z
C =
5 a+ I6 h4 w" @3 ^5 o
7 j/ ?9 J. @7 R 19 229 `2 L4 \; T! V# B4 g. G
& Z$ @+ {2 c/ b
43 50( Z9 N N% L" f
; [" o1 Y4 z, ]* C5 J% B
如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.0 S* y7 a% f( V1 Z' c- M
( Z1 X! C* N6 `( S
§3.3 矩阵除法9 [; r. x+ V) l/ D
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
! L& A, Q. G' |4 `( A2 v/ v0 g$ y- Q8 I" _* D N. n) U8 x
通常:8 l1 ], x9 w. {6 X3 T* j. V7 }
- f: \. b* @8 Px=A\B就是A*x=B的解;
) H% i( F9 S0 q# E4 x/ A' L# J" s
y9 k- ]! G/ R0 xx=B/A就是x*A=B的解.
' A2 y$ ^( l: c" g: X& a& @9 c% e" R" [/ h2 o( Y, F5 `
当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.
Q9 c/ m' B. {1 j% f! @+ \8 ~" t2 L% K! Z/ K& Z1 P2 b7 P+ T
如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.7 o9 d1 j6 E+ x7 E* {
1 A3 ` k: G- Y! l: a4 B6 X2 s
右除B/A可由B/A=(A'\B')'左除来实现.
& m9 F" V) x/ [ @4 X. X4 k1 c" `" x" g6 `
§3.4矩阵乘方- F( Q# E: [* F3 S
A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:+ O4 ~6 f, n: m8 U9 g! K8 r$ p
$ r& _ v# a4 T" G9 i' _/ r1 e1 GA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)6 \5 Q5 O& H ~/ Z0 ?5 f2 d4 h
) f6 N% q- x3 O0 b
如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.
0 C/ h' r1 o- B% f# }7 s% K% d5 X% B; M. P& G* l- s' S5 ~
§3.5 矩阵的超越函数* _7 s- L7 _" i4 W1 c* g0 Y
在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.- Z& A. ]9 h/ A$ `
3 R t. q2 z* ^' _; @' E
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:$ u$ m$ k& \+ h- x E H) f
# O7 |0 R* y8 _
expm 矩阵指数5 l( z' z. J/ V6 q( D" ?
, L# r# J3 a% J5 {) K' z3 k/ ]( H7 ulogm 矩阵对数7 m4 I0 i4 C* |% V. P
+ s# Y, v7 N9 D `. l8 asqrtm 矩阵开方8 U$ A- ]. c+ k) O6 @7 }
! X9 X! _2 A+ X6 U* {# w
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.
' u# U7 h; j2 i8 v% [, b- a6 n9 {2 l7 ]- x) m
§3.6数组运算9 k0 k1 p% q/ b8 q8 i$ h
数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.3 q/ V: j8 [4 _5 l& g: A4 F
|6 D. I4 Z" S§3.6.1数组的加和减
, S$ s# ^, e' o对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.
4 ?1 |" q8 L3 x& h f9 g1 n& T5 R" y$ D$ n, N, i
§3.6.2数组的乘和除) `( W0 ]' C6 S( M1 N
数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1 2 3]; y=[ 4 5 6];1 I- ]0 o! P# A8 N, V) u
' y' H. v: W; x
计算z=x.*y- e3 Y5 W4 b7 Q; @! y
% w: ?0 H9 m' i+ P结果z=4 10 18
! e. V: H: }/ `, y) S ^0 F f9 X+ t* E
数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.
& I$ j7 h0 U: {5 A& W) b: u' P4 ^: @ I
§3.6.3 数组乘方. ?$ c5 P" @( i) m/ e
数组乘方用符号.^表示.
; ^' ]5 U7 D4 P8 v/ |4 s
/ w! w/ P$ w* ~, c% j! S例如:键入:& T7 s: r# U/ v
: ], M3 `, z2 r( N
x=[ 1 2 3]
; S% t2 }5 U( ~# d2 m# O% S- Y* O- U2 K! u$ W
y=[ 4 5 6]
: v# e% W/ E% C6 X) [3 k. I, E* F u
- V( s. p9 C$ b则z=x.^y=[1^4 2^5 3^6]=[1 32 729]
2 s7 D. _1 D$ H: Z( r4 V& ?1 F, Y( @% m
(1) 如指数是个标量,例如x.^2,x同上,则:6 I s) x6 [, o, P4 M* M: C
" p4 q, |# c; v5 _% L* R
z=x.^2=[1^2 2^2 3^2]=[ 1 4 9]) }& c; L) p: C
- _6 q" i7 M. J/ G+ ]2 ~. w(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
! x6 ~! E' }% B4 e) K4 t9 c* P" O' ~0 b& w5 z: H, x
z=2 .^[x y]=[2^1 2^2 2^3 2^4 2^5 2^6]=[2 4 8 16 32 64]( S) E4 r. z7 @
, e" i! @& @+ c8 s" p- P从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.
5 }8 x* E8 H5 }" x
5 o+ ^% C. V, ^' B$ Q3 F! C§3.7 矩阵函数
. K7 ~4 a/ R4 L6 @# |* G7 ^Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:
+ @8 m* }! w( A, P9 J& l% H5 b1 C7 ~! S" w5 X! m, H% j/ D. X5 `
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.
9 C: m3 U0 S; h2 A+ m6 H
9 |# p( N: _ I* |§3.7.1三角分解, A+ f5 x6 C1 O% h
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.
) a5 L8 ~( H: T( q. a+ o( s
6 }$ @9 f n7 @1 f' M( W/ s5 g从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
& S+ K0 v/ p! B# s/ w4 Y W- g% z& z% g% v
例如:, k, J3 H) E7 n! z+ `6 [7 A
4 K, N1 w+ @0 e7 m9 zA=[ 1 2 3, [- ?+ L" ~' [. n7 V% V' t
" m3 P9 g ^* N( X6 _6 w4 5 66 o( r' t& Z( G
7 i; c; Q+ Q# l* F- X1 i% H7 8 0]
. O' [/ X5 H9 N: z+ o3 J3 u# `, s( t4 n, @9 J' B! H4 k5 L+ K
LU分解,用Matlab的多重赋值语句* _. y! x j" Z% y; @) d
! E; Q j8 }! r Y[L,U]=lu(A)
, n) g( b4 m7 i: G4 C
1 G5 R3 i3 O S+ |! D5 i得出7 F s' o5 b7 C4 q
) C$ g' H$ o$ D$ e2 pL =
7 n% S* U, s& W) C$ [
4 F9 e# N7 }0 R: W! a, _- m0.1429 | 1.0000 | 0 | 0.5714 | 0.5000 | 1.0000 | 1.0000 | 0 | 0 |
; v+ Y6 j2 E8 }$ B Y: aU =
1 A' ]4 W+ ? ] r! s
9 K4 p4 D8 S, @6 Z; ?7.0000 | 8.0000 | 0 | 0 | 0.8571 | 3.0000 | 0 | 0 | 4.5000 | ; h( n. N# l) ~2 K; O1 r2 ^
注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.
( z" B" f) e3 t9 k, H, \, d+ S$ e8 L8 M; v" |
求逆由下式给出: x=inv(A) {/ O9 K q! r7 Y! c
: X, j9 O. t% ^5 K
x =4 ]% \, e8 }( K& |3 A% x2 b1 [2 Q
; f( ?" Q% |; f h& z6 i! K @-1.7778 | 0.8889 | -0.1111 | 1.5556 | -0.7778 | 0.2222 | -0.1111 | 0.2222 | -0.1111 | $ Y& X) j7 h5 i1 E' P- r
从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:
2 s- B) {& e9 d9 T: D2 D
% d- d* u' u* ~3 B6 t! j6 }d=det(A)) v6 G7 Z+ z9 R
" H0 ]/ ~5 y5 X5 R
d =
; }! U1 W }* M0 q M2 t* P7 {& B7 f, e" g8 N( ^% n
27: E, R/ H4 Z S7 d
$ c9 S3 N0 I B5 Y( `3 q2 q
直接由三角分解计算行列式:d=det(L)*det(U)
9 x& t0 i* c* ]+ g- \
2 c- [4 V) y: ^; Xd =* S# C0 b5 }# F4 c
7 y' N* v! Y4 j# ~% y27.0000& }3 m8 z. k. T4 k; P
/ J7 j! k6 J9 d' g4 v. I+ @为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.1 |" T* [, i: y0 x3 N6 J' Z
/ x8 l/ `3 G3 _1 {
例如:线性联立方程取 b=[ 1+ y. y& ]9 p3 ]9 U. Q- U( \
7 Q& A7 {. b4 x. c
3
! N$ s `% |4 X% Y2 }
# }1 [+ K+ K9 H2 b2 b2 f' n 5]
7 Y# f2 G% ]4 K) A5 {4 m
2 K. }$ Z2 y1 ^$ ~ J! w$ \解Ax=b方程,用Matlab矩阵除得到/ ^7 U3 E- J2 t
1 v! S5 E0 E- Y- P: p. ^x=A\b: Z6 K, `3 ?) S. R+ l
6 }( E% g' @* T5 r
结果x=
& X9 O! R. b3 F& `% x5 P' N7 N1 x5 e9 m- h& K& i2 G8 D
0.3333
( Q) A; x% m3 |. t, T- D5 z8 j) }0 j5 {0 j* l4 E" e) s' D2 a2 h
0.3333
- g+ B: H8 L& C' y! B2 e. {
! E8 l* I* y: x; A0 J0.0000$ v7 W6 z6 F5 o6 j. W$ u" I2 g
' L6 P* z$ T& K8 t3 s* ]4 K由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:
4 x& Z8 D% H; a; {) O8 h( u; H0 Z2 i4 G8 [
y =
- S; g$ }2 r1 R! I) N6 C( F
/ T( Q9 E, b2 l# N. }: g5.0000
. O- p' J J: c
# G8 ` i1 p* g$ w4 O! L- T0.28579 E; |" I% U, Z) j
& K ~" s7 Z. S
0.0000: z0 u( J# C! {+ h- P
- G$ F( Q1 N+ E1 ~2 b* D# h3 v
Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.
/ [3 I% z8 e6 M9 y
" E/ u. @2 r7 V' v7 ~/ C1 m§3.7.2正交变换0 f. z2 h' @ w! x# v3 b
“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
& J) y2 {- X2 }8 r) J! }: z! [9 C* s
例如A=[ 1 2 36 |4 C) U H# @: T: X. E7 o
7 B2 R$ j6 c7 v7 O! s$ J7 F
4 5 6
' w0 M) p3 D9 F6 P2 D* m% F( n. R, j) \1 q) Z- t
7 8 93 s9 ~1 U9 ]0 Z& ]4 F
/ a, m# D& _; r; h' X# b+ P10 11 12]( Y9 b. a3 Q# B$ I! L( }4 _& t
1 G5 N7 s! l( k6 D& E- F1 @是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:1 y; i2 j% o% J; C, W- u
- E: C' Q! c% P* r/ H7 ^) ~, Y4 S
[Q,R]=qr(A)
B2 j; Z/ q M% n
3 y, Y( C. x% z+ c# z v( h) uQ =
r* f) E2 L3 |. V7 E
+ S; T- R* I5 B# t: H% X-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 | : L- S& m* g. I! [: @: Q T- J
R =: g* V( C9 H( d7 y3 `, q* v P
2 Y8 _: ], b. _: O$ X4 j+ G-12.8841 | -14.5916 | -16.2992 | 0 | -1.0413 | -2.0826 | 0 | 0 | 0.0000 | 0 | 0 | 0 |
" E/ \" h) Q( J- X2 A/ r7 |9 n; ^可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.
( b" J" o; Z% t3 t% {: A" N. [1 C
% |" q4 ?+ T/ S2 W" ~5 W& G& m" V下面尝试利用QR分解来求超定和降秩的线性方程组的解.! g. f- \6 g1 ^6 u8 {
* W. G8 X, H" g6 e7 G1 C例如:
) X! F4 C' M2 r+ ]. U9 Z7 V3 i9 d4 e- d
b=[ 1
8 {5 ]! g; P% s. p1 L7 b
; o0 X* Q; U2 v; O; L7 V3+ R# |6 t0 C: \' Y( d D1 ]
& o8 w5 h, p: z& t: b. c& V3 ^; f
5
( O1 a+ |6 t' x) L# }2 _! w$ I& `: N; d, x
7]
% [7 ]9 l3 L! s& O {
1 B2 r! |3 J$ k讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.7 {4 N% t; A8 C, j. d
) _9 X. Y! e- U w" X, m
结果为:. J; A$ f; g) A6 l
# I8 `- @3 H, g! n% P& K% z
Warning: Rank deficient, rank = 2 tol = 1.4594e-014
, h7 E T, C( L, m3 x; u3 m( H2 R4 K: h" G# ?, X# a4 V; ^
x =, g! @. H& J; B% r6 R
# L+ L/ c- \# Z+ x! B! y( Y9 s 0.5000
. \8 a9 F4 u, W7 w& Z* a G* m
" v' Q. V2 l [: `6 L I 0
# H! k: g& _, ?' z
) U! M. L' d: F' A( v 0.1667
- _( _3 z( Y W/ L. d8 f9 U
4 F4 T/ b/ B$ S* @4 C我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:! w. @1 Y; F M. J+ P/ T
% C5 M* Q: M2 z9 P" W- v
y=Q'*b
7 D5 Q1 q( r/ H$ w! X0 v% e5 T/ n6 ?
x=R\y+ j$ s( H9 W5 E$ a4 s. ]
8 ]+ b) ?6 d5 F4 `3 r求出的y值为- K ~. F: c3 g3 X ?) b
& S, R# L; G1 y) o1 ~; U; Sy =0 s/ W; W8 s C1 }
8 `/ g4 }) x) _: H-9.1586 | -0.3471 | 0.0000 | 0.0000 | 4 n4 Y9 H5 d8 d- o/ n
x的结果为
7 d/ L8 E I; G2 {' M8 {$ [4 g. a& ^
Warning: Rank deficient, rank = 2 tol = 1.4594e-014$ I$ e: P8 X; D0 b
/ y& s: V4 U8 } s& }6 px =+ g# G* W0 O# v$ E$ f6 H
, m7 n8 K# `& U# s" |2 W9 j6 i
0.5000- `3 @, g2 V7 O' y( C- _
# X9 T6 A$ J! i 00 [& X2 D6 f6 I0 Z! Y9 Q
4 @7 k9 P5 {3 {& g' w 0.1667
& K3 H8 J! T! b9 Y0 Z! h- E8 B
# ~$ @2 p! S, W用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.
: e# D5 n+ J+ U2 N& V7 d& x* @
+ c% n4 }, ?$ k O9 D0 ~§3.7.3奇异值分解
7 y( g2 H$ @$ q4 S9 {% D& z在Matlab中三重赋值语句
6 I# K+ O" U- _$ d2 l4 V4 ~- M: }, R# u! j% @# g1 A
[U,S,V]=svd(A)
+ [( \7 X- f7 A: Y) u5 z% _% T/ z8 U# f* j' t) M" ~
在奇异值分解中产生三个因数:: J/ i- w, R% F; x9 M/ c
8 f4 u) I- P* o* f+ m% DA=U*S*V '
! S, W9 e# u, E+ {
+ i/ t1 q7 ^2 D0 N( Q& o* B9 k6 aU矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
" c. a( { V/ ^. `( ?) g. S
) b& T8 j2 J) M奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).' N1 o$ l8 [5 b$ T5 h
* ? `8 q2 J/ N4 D. k* h0 s! T§3.7.4 特征值分解
- t j/ I6 y5 M7 {如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.' l. i* B) S# L2 K2 z3 n- ~6 ~. f
# {* Y# B2 I6 k& `8 b, [& U; @1 n' @函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:& J4 L# j/ ^8 ~( a3 v# g
2 p8 F# o7 k, L: L5 j+ V& R1 C& F! a
A=[ 0 1
' W% x' i: C' q" y- f# O+ j
7 n8 ~6 s+ ^2 `9 C! K+ }8 s T$ |-1 0]
% J: ^4 `! K4 f) k# L4 I2 @9 z0 l& k. }7 r) z
eig(A)
6 D6 z! @* }. s+ ?
8 ^1 Z' K. N; g; d6 C+ n# s产生结果
5 V* I5 _& o) i" ^
* Q9 j$ }0 r* Kans =; E5 }' t6 O7 @, j! ~* R( P
$ F3 U t0 D; u( j) _/ \0 + 1.0000i
1 b; t5 B+ G/ W: n! S9 @, P2 o# `/ P9 j8 [- I$ S
0 - 1.0000i& o7 r# v' w8 j5 _$ k! v% k
- |/ ~& C7 p e% S4 ]如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:$ B2 F& \% C0 {; i+ ~6 [! [
- s/ F: w4 R2 U ], ]% U$ X5 G$ e; }[x,D]=eig(A)) M8 \$ i" Y; U
% X# ]: W; y# o+ O" n/ wD的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.3 X, r4 A) }% G9 K v+ i3 V8 U$ e
% K2 {* g4 x% I) f计算特征值的中间结果有两种形式:
- S( z( e% X& ~" [" Z1 q2 \2 \% O, z
Hessenberg形式为hess(A),Schur形式为schur(A).% j: \# }6 s! f, |1 s9 W( r
) R3 Z4 I8 x+ b8 L5 E+ Pschur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).
3 V# Y) u! r8 R& p$ D( I+ S) w0 o5 n4 t" d6 o, g |
如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程 w6 s4 K0 T* {+ {5 J
- F- E* I( `' I7 m' p' DAx=lBx
* X- O: P4 N) J t4 F* I+ l5 Y% n) b8 |
双赋值获得特征向量
6 W" O4 f& Q8 |
. {: F8 f+ i0 x- q/ T3 M[X,D]=eig(A,B)
* z1 g; O/ p" @6 p' |+ R3 X; r3 [! L! y+ `1 E) _
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.3 |' Y3 h& @6 w# G1 V- q6 U* e
0 \* j1 K0 ?3 c( F
§3.7.5秩6 \/ ]) |4 q' l2 P: ?
Matlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.) {7 O) d" Z6 ]+ _
; K$ i; e) \0 N3 g G) C利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助./ m2 L3 m; `. C9 ]
0 S+ e9 U: u( o. y2 N1 C |
|