|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑 # M% p) `7 W$ j# E6 U& h* B& B
3 `' G4 U4 I- N( m9 k) W* j/ A
§3.1 加和减
' ?7 Q# y" {/ U如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:
/ d6 n3 }: d( p, f
[3 e5 p8 r% s2 ]8 v8 eA= B=' n- S' h! f3 r, j D1 R0 \/ _: w/ G6 f
. a1 N" o1 H* F8 V+ S4 x2 p
1 2 3 1 4 7
4 O' @7 A& J8 k, Y0 P* @; K* R0 a7 N, ^
4 5 6 2 5 8* |0 y* o9 Y1 r5 v8 V/ w
7 S3 e1 c9 D, U/ }7 8 0 3 6 03 g9 {! F4 ?# {$ _0 F+ A
- |/ F! a, @; A: M: t$ G! y4 Q4 @
C =A+B返回:& U7 V5 `' k/ s! I O/ B
+ e5 m; [% r& M6 c- _4 e
C =8 k! }+ d, f, q U* N& O3 z
; F6 e0 s1 g# p% a9 M+ o 2 6 104 E7 ^3 W1 f9 @- W5 H8 X
3 c, C( a5 |- G$ N( U) g* l3 K
6 10 14
e/ _- c/ e9 v' y y) k* d* n
& H" C; d. g; |$ g& x 10 14 0
1 `. ]5 T" V9 ]" D+ J. I
! n1 t- A9 K% p0 H3 @& I如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:: e+ \6 U+ K: Y% o- U
, P( l- _0 Z- M; }x= -1 y=x-1= -2; G8 k- M3 F& @% _
; ?& g9 g, Q4 { o5 E8 m0 -1
2 j& f7 U, c% @ t2 E
& b4 d. O( z/ o0 {& _, |7 S2 1
% r0 ?* e4 X s' P# X/ O+ x9 O
§3.2矩阵乘法
+ A+ }3 R- e; q$ n( N" R8 IMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
. r5 I! m+ u0 H' j/ y! a
/ a# ?; v4 S/ S. Q, B! ?§3.2.1 矩阵的普通乘法8 [4 E4 y8 y+ a) y3 A2 \
矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.
/ H( l0 O; B a0 C+ e2 N* D* I Q" ` E+ d4 b
如:A=[1 2 ; 3 4]; B=[5 6 ; 7 8]; C=A*B,
; O" T: g' s& }2 \" P1 T. j6 E9 i* f" D2 Q \. m9 K
结果为* y0 t- r+ a% u S$ Z9 ^ O& P0 G' {
$ O) {7 B+ V3 a' VC= × = =
* A; V7 r5 T7 K, x1 p6 E2 R3 b
8 t4 z+ i0 g/ S& X* D即Matlab返回:% O' A& B2 @ K% d0 q
; S0 J$ L, s, l$ s0 ^; `C =
% s8 v' J/ }1 h2 L4 Y) r+ D, u. |6 [% [$ h
19 22
' m) p8 C: N5 z5 H
! H9 y3 {2 ^ x( d1 A 43 50
) T8 I: P& n$ r& {% |$ }, v) t7 p3 ]$ t
如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.
$ [3 G8 |9 _% u; }; R& `/ ^ J* U
! {0 k3 _2 d( M& O9 r2 I§3.3 矩阵除法9 u9 Z( L1 L; d" w, d6 o6 x2 _
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
% ?+ i+ J; x% v: o& I( T
' {% V# e1 N2 R通常:) }/ v7 t, X) |; X5 h
# f2 \- p _# r0 S0 @2 s1 w6 i
x=A\B就是A*x=B的解;
@! I$ H+ U2 v& h7 n; v [5 q- k. ]4 v7 B8 |# v8 Z# w
x=B/A就是x*A=B的解." O6 Z+ u) X/ s1 h- e' ^
$ ] @. G @% D* [; o* \+ ?当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.
* l/ b4 S) q& {% a5 }' Z# j7 U7 I/ t) \
如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
5 J) H; a& H/ i7 M2 H
* j6 C( i( v7 D$ G右除B/A可由B/A=(A'\B')'左除来实现.
* v7 P& L4 |/ P1 c" v
% T& l8 [+ P& q! o7 g: ]5 W§3.4矩阵乘方
* u, b, [' g/ F3 h zA^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:
4 ]9 f; F/ P8 s) L
0 C3 N w% H; O$ m6 N' V, t3 uA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)8 M( N) }5 a e& p: v. H5 l
9 m) a, Y" E% C3 _) Z+ `如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.$ O, |( m) ^$ Q2 s3 J
; D9 X% c3 q- Q1 F! w
§3.5 矩阵的超越函数
8 a- [8 q# Q2 l, A6 d' I$ r! F4 c在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.; D. @6 m9 h$ n) a9 y
, M& t g" E) F9 `. T% _! _
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:
! _; B; x5 |8 H" t/ T+ P1 x( p7 G* z; D) W* L2 O
expm 矩阵指数
& B+ s. \) q9 `2 ?6 u* w3 u* l( a- b. U4 H/ L! `1 Y) `
logm 矩阵对数, a J3 f2 _8 ]8 W z. h
. b; S" `% }6 @6 y3 P
sqrtm 矩阵开方
( P% R# K$ Q2 m4 R0 H( d6 H+ z' p4 | u: l9 I
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.
* P* h9 e' Y) |+ y( M% U' ~7 X' e8 c1 y0 |$ S
§3.6数组运算# k6 [) N. l% O" K& d- I
数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.7 P7 r' t% J; w, [7 j
# M4 B/ I+ L0 m" J6 p
§3.6.1数组的加和减
1 |! G V, o# J8 d1 U5 D6 ^对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.9 F' X0 l, ]: |2 k; s6 O
9 Q* z5 F8 R6 e§3.6.2数组的乘和除; y/ l1 @8 E' {3 @
数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1 2 3]; y=[ 4 5 6];" ^6 C/ P( W% i; |% I- \
& G. a7 ~3 W; ~9 n5 E$ C9 Z
计算z=x.*y
! e1 i/ C- o2 k
+ {: c A* n8 J7 ^+ j9 y8 m' S结果z=4 10 18& z4 H. `" Z2 g; x
5 Z8 u) E8 e2 X& h+ F9 {
数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.. B3 s% p+ h( v( R5 g
_$ e% [' \+ K! M. n; ^
§3.6.3 数组乘方
8 h6 c& k! p" P/ z) v# j数组乘方用符号.^表示.
# |+ j+ F, w5 A$ m' N4 \+ s
6 {, O/ B; I: K例如:键入:
f H# g# q( ^
' R6 h# ?. G, Vx=[ 1 2 3]
4 Q0 K8 H6 g& r0 }" _) b
2 C: X) w: T% y: |5 o6 iy=[ 4 5 6]3 x% @5 }1 K9 [ r0 d) I+ [& r+ C
2 B3 t1 `3 m' ]/ A' J7 ]
则z=x.^y=[1^4 2^5 3^6]=[1 32 729]
' a& Q, Y/ t1 H
8 i7 ]4 d! b3 B/ [1 r(1) 如指数是个标量,例如x.^2,x同上,则:' R5 y* [" i. s$ m R
0 f% K& b4 D2 f( x! k- ?. D/ w
z=x.^2=[1^2 2^2 3^2]=[ 1 4 9]4 O1 \& t* Y$ I4 d6 j% f
# [) T- m0 s$ V
(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
0 Z& J! H0 W' \3 r( Y3 e7 ]5 A' c- ~4 U% {2 m# b/ E) H1 ~
z=2 .^[x y]=[2^1 2^2 2^3 2^4 2^5 2^6]=[2 4 8 16 32 64]! D0 T/ [, d: H9 \- j
: z' @# m! A& b9 W* r* m
从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.
9 y7 u9 @2 F7 P0 W' e5 u2 i, p
7 J: V9 Z+ _3 M0 S6 F: T§3.7 矩阵函数. s g) i# w# ^% \9 H/ d- s
Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:3 h" q3 X' J# W0 z; U, T
( F; V7 k- W( c8 b! \; y: Z(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.
7 Q0 x( X6 L% P' h3 `7 X7 o/ P
. ~" k7 u* p4 {' o. y4 ~0 C d) z% L§3.7.1三角分解) z# q) F+ O2 N- n
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.. r# x6 y9 j0 `9 o
' V; ]( S% M9 L4 [8 D1 d从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
1 i4 U" L) L, @2 d5 G2 Z
6 O2 M, h# U& z! Q) d/ B例如:
( E3 \& Z$ m' S: Q* m8 }0 v% w Y7 t/ q7 M
A=[ 1 2 3
% V) M& ]4 d6 c8 M$ g" m, o; n* r* I; A* F* I& m4 G. M4 ~) _0 ?5 u
4 5 6
( K+ F' I, ?5 `" h; K3 k
8 B; S) Q* K( \2 F7 8 0]) V) h% d) w# b5 E9 { F' `! k
% N9 e' \3 v. @* g1 x8 C, Y( P
LU分解,用Matlab的多重赋值语句
4 @ n5 r7 n/ a
6 J- s. |1 }2 G2 X1 |4 m[L,U]=lu(A). o; E" y: t/ Q% |# B& V- F
- Y' _4 S* l, C: W5 C! _6 ~( O6 |$ W
得出2 h6 @8 O1 s7 |7 j& W% _
2 u) |% z' B! \* m. z
L =/ e: N" e2 b7 Z1 l* [! k0 S
1 K/ R7 P* ?& ]- @4 R; z( t0.1429 | 1.0000 | 0 | 0.5714 | 0.5000 | 1.0000 | 1.0000 | 0 | 0 | + G5 Y( R5 v. \ F ]* k% @
U =6 n+ ~# [) c4 G5 C6 Y- I
! Z0 `7 j' m3 y4 u9 l' R1 d7.0000 | 8.0000 | 0 | 0 | 0.8571 | 3.0000 | 0 | 0 | 4.5000 | 8 r! z( ?0 b: m) A- w
注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.8 `' j' K3 `; g5 y* F
& _" v U3 }: E0 B9 |6 K
求逆由下式给出: x=inv(A)
+ |; L! H9 l3 R+ W) M( A' r, |1 {' _7 S. P. ~
x =
9 \7 I! J; ^6 N1 u# ^) j+ Y, d/ V( L7 m3 C2 ?: d' A8 H' D
-1.7778 | 0.8889 | -0.1111 | 1.5556 | -0.7778 | 0.2222 | -0.1111 | 0.2222 | -0.1111 | . B' L+ ]# r8 Y, g+ I& \
从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:
5 W3 _; ^* \' Q* n8 n9 [3 e- b7 T! Y0 d$ R" [
d=det(A). j3 @$ y. a% z" k: E& Q
2 E4 ~2 ~- ~1 y9 Z; gd =, p4 i' Q: a4 v' B' F
. H4 b: t' `8 ?( z* T; R1 h
27
. B* q) x) z5 Z! q2 f
0 n# o6 ^: E- F y* D: p1 @直接由三角分解计算行列式:d=det(L)*det(U)
8 Q/ O+ o0 \! b7 F) b8 d6 r
- J6 Y3 ~* G0 E* f! ~" ?% qd =
' W8 j9 P) j9 w! _/ O' ?6 D! U8 A( ~0 {3 i, p
27.0000
1 m( }( ~) S5 w8 m7 L v
9 x" ?& [/ [4 A$ d& G为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.
0 G- M) w/ v) z2 y1 K, j* A0 g3 D; s7 p
例如:线性联立方程取 b=[ 1
B3 \4 M8 W9 c4 B/ w V. x/ P' u) u) m& q
3 V, j: Y6 u* z2 R
R" v4 w7 c, d9 n9 U 5]/ ^: I; }8 S S! H6 [8 g
2 m- |' T# Q8 g* `/ p
解Ax=b方程,用Matlab矩阵除得到& A5 z n. R2 i0 c
* |5 V( o/ F0 }, s( A8 w1 wx=A\b8 p/ x, z' u$ R3 C/ [# D6 f$ z' M
' E6 i9 Z) ^* K) o: j( l1 `2 h# R结果x=2 V. A" t$ I/ ?" l
" W; o5 I! a2 A0 P
0.33333 E ~) a0 C6 O8 L! k: j) o
& p2 f. Q7 _% O" E$ w( @
0.3333
( Y. P: ]6 ^5 k+ Q
# O+ X& c. l5 M' I! S6 a/ W) N0.0000
* k. {+ T; Y8 z) x5 u
/ b2 C2 s$ f* E; c3 @, `由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:9 {3 `* q( _- w/ y
0 L9 W, s: L5 [0 o; H
y =5 m% C( V% q' L- q
4 _/ R" [* Q; v, k5.0000
2 b: n, s |# e: n& Y
& p* @' a) u2 s: [: I8 o; s0.2857
1 k/ @! u8 X) Y" ?$ O4 K' ^- X7 j2 u' d. p3 \3 S. k
0.0000
' M' J+ H) O( t5 n
8 }4 X$ o* [/ w7 D3 _' d8 ]& x& NMatlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.
) Q+ s6 l- i! g" q7 ^4 r! f3 c1 J6 g+ D6 D
§3.7.2正交变换! ]. r+ _2 f, H" m
“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.# h4 C$ a J. G! j6 d& d% W
# [% U* U5 y, C0 I
例如A=[ 1 2 3/ D$ J. o& g4 \ c) |9 ^. f! a
$ f/ W+ z2 D2 M A0 `5 s; U$ x4 5 6
- e4 ^' Q; \1 p+ l% i' u* h1 S0 o, y* l! H
7 8 9/ ~2 n6 L1 b; }+ g9 @: s1 T
, A/ _; ^8 R0 L9 e5 R10 11 12]0 E0 l4 E- W8 T. Q' a
" \% }4 k5 v2 e! [: w是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:3 @: {% i T; v1 {" T7 s' ]1 p
8 `; G+ u! E8 s) ?, E( o' ^( g/ Y
[Q,R]=qr(A)
9 y s4 d( z! }/ v" s( u
8 R- j3 ], Q1 u/ j& W2 H: H! r% PQ =
4 J" E( c, t; r$ i! M2 L' W# m: N
% Y0 {$ x0 {% a-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 P+ J3 |4 I9 ?5 z
R =$ C# p9 A1 e6 F" o0 A
6 Y4 p: H$ q4 _: h-12.8841 | -14.5916 | -16.2992 | 0 | -1.0413 | -2.0826 | 0 | 0 | 0.0000 | 0 | 0 | 0 |
" t( |5 Z8 @- J! H可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.5 v* A% s3 c9 G, n. u% s8 r0 N& j
0 K5 ^5 |4 n% O$ e5 ~9 \! {下面尝试利用QR分解来求超定和降秩的线性方程组的解.
8 l$ D0 r! x5 F! g
( d* R3 `' C$ H% T8 \例如:: f x4 C$ y w7 {
. T* w% P6 ?; x* X; r; q
b=[ 1
) @! u/ z; O9 E% f5 g9 m s: r7 d2 D: r
37 x5 y0 q% o' B; }
: R% N3 j0 @6 U% I
50 o% V# q* V; n# P0 c- B
1 i& j' L$ U5 F9 y% T6 A: C1 q7]0 g# W2 v I& r u
1 \ |+ p, n( |9 [# p讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.
" u- A: H5 Z( d: U9 y7 o; C" Z2 [4 q; i- E- Y
结果为:, k5 l: g) Z5 s" ^( f0 m
3 F& a5 K) N" SWarning: Rank deficient, rank = 2 tol = 1.4594e-014
9 B. t; E$ O* A. Z$ E ?# s6 ?: e
4 }) ~2 m4 D% [$ F2 s% D jx =; f3 x8 D0 s; g( @
) g2 X$ B( g1 u- f6 x. t& R, B3 { 0.5000
: b4 B- D% O9 O- C7 R6 f7 J7 n& \0 E1 e- p' F
00 t3 T3 `+ C9 m$ Z" u& R' V
% D# p" u8 V# N( k6 N5 ]
0.1667" A$ E4 t) J+ A
0 U+ Q% h# c# {/ m
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:
/ |7 a Q- s! \/ \* u" c2 x2 }5 x" E' S" Q' w/ Y
y=Q'*b
9 L9 G0 l' x+ |! u) q3 P. l0 @ @9 m% f- |+ `+ E% z
x=R\y3 Y" R o5 {1 b5 d
% A, x, |, @, s1 m- e求出的y值为2 s4 ~7 T% o: v- y
: i1 ^0 Z$ E; C8 ^
y =
5 u4 v) K; k+ W. G* `
# ^! K/ d' I/ a7 I+ q-9.1586 | -0.3471 | 0.0000 | 0.0000 | ( G4 r% T( E ], q
x的结果为
: d( A5 L( X2 A% \. |, X j$ y' v2 g% }& I+ z9 c
Warning: Rank deficient, rank = 2 tol = 1.4594e-014- `3 n# x' Y% S3 u/ H8 H& J* x& O
5 y y( w/ k: T; Mx =, p4 }! o% g) ]/ y+ A% Z
, M$ _* [+ j& |, P" Z+ A* Y 0.50002 I8 g3 q: q! ?- w: |
& N* i4 y" i4 V+ b- V
0
. f: e d6 p" m3 i8 f! K8 k$ D$ ]% q
1 k) y1 T5 i7 {, r$ } 0.16675 U5 F+ D- Y3 f% o3 E; N
9 L1 l. l) Z; a& z/ a用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.* g$ y) _+ _4 R! z
0 b5 Z2 E& s, f2 Y6 s# t. }* A§3.7.3奇异值分解5 t+ C! L& ]/ p$ P6 z- a' x
在Matlab中三重赋值语句3 q% K( N8 L! L, ?
# P' ]- ]- j# g0 ~9 \* Q[U,S,V]=svd(A)
! q: w6 C+ {7 o* r; o2 {$ d9 `; A3 m
# }5 m1 p3 N! N0 P0 I在奇异值分解中产生三个因数:
3 c* G* t$ e5 b" Y" }5 B( m8 F% n# M7 V h% G4 Y( }' ]! o; N
A=U*S*V '
8 \. @) {8 O8 Z- {. u8 A# |0 R6 N% ^% e0 @9 B5 g
U矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
. E2 e6 P" ?: Y& G
! J$ f6 j# j$ w5 E+ U奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).3 V8 |# I' q1 T7 E0 i% D0 x
- _+ S/ Y- k- L- f* T
§3.7.4 特征值分解- ~' X! _0 P" j H, Q) `% z, G0 T
如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量. q# R! A7 D5 j+ X( }
9 d$ u2 G! x& g/ D1 `函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:: s7 R6 D4 {; C
, c+ z, _5 _# L8 _: ]& a( O+ s
A=[ 0 1
/ n; @7 P% x3 R4 @0 ~9 e& u: e
; }- Z: a2 p# Y2 r$ q-1 0]5 s6 ~& V. u- W( O- Y- j
. u0 b% d# ]+ t- v* `- }, Q2 H
eig(A). a" a+ n7 t2 S, y3 R
8 U4 \, O9 j+ E( f. y# K" ?/ h6 T产生结果
! |7 ]" K s- A& X6 T2 @
* r- T3 O6 R, a2 d/ ]ans =
$ p! D9 p7 v% d+ @; D. t4 M8 }; r
0 + 1.0000i
& @4 r5 X; Y0 s& w& N; H l) }9 Z0 ]1 _ D+ g
0 - 1.0000i
% q3 Q# }% \% G6 w4 A
+ ]0 a5 W* z6 O* a8 ]如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:* b8 A& c( k0 r8 J
* T3 j! X% E2 E+ r7 j' \9 T B[x,D]=eig(A)7 ^% m- d" z1 t5 U; B
7 j8 s4 J% L# |' `5 e0 g
D的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D." `/ u" I9 h# e) m; R8 A B" C+ g" P
" g/ J, ]" b- V; b& Q计算特征值的中间结果有两种形式:
4 F1 Q2 X3 H/ x3 I, \2 |- |& v" z8 f4 l7 g6 Y* U
Hessenberg形式为hess(A),Schur形式为schur(A).1 u5 h% Y4 {( |- C% J3 @
' i+ \' n) O6 E- b2 mschur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).# b. [ u* W! Q" ?/ l. j
' h) n0 J# i6 V& T0 [如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程' d o& h6 P7 P8 z+ z: M
% A) ?# ] x: U* ]# v; V) mAx=lBx" D' ^$ I3 C6 Q; y" M/ o
% G; y: N0 e4 {. J双赋值获得特征向量( ^+ O& P, r) u
* ?7 y8 G. b" K* a. k[X,D]=eig(A,B)# w" M; i7 V' s' ?2 _ A
% o4 ]: @1 |. D" b+ }! N4 j
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.
0 g! J+ |7 \3 i; u
. v" z) j+ w( o; V. O§3.7.5秩6 v$ \* S2 Z7 A
Matlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.* C+ l2 ]5 C1 d1 e1 d1 x
5 L/ _* i2 J. C7 `利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助. [4 H0 P; z& c6 x: Q
* O9 Z" _" {* M2 U4 ^; \3 Q1 f6 W9 U
|
|