|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
, Y1 v6 ? w0 ]
( n$ o9 |% N( q2 r* O2 Q' w§3.1 加和减) j3 Y9 i2 f1 D
如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:; K/ v2 z; }. n
6 R d2 X+ K5 L. K9 H2 O8 YA= B=
. B1 ~! M* v3 X! K' N5 a& t7 C8 [/ G! \6 C9 n( L& W
1 2 3 1 4 7
' K* ~. x& Y4 s/ [0 r& N3 ~; X- \; |: `7 B( _& j$ d1 Y
4 5 6 2 5 8
& U& g0 m# m* c' E; T1 f* Z# X
( a8 W9 {) ^, u( S- b+ C5 }* _7 8 0 3 6 09 ?# Q. L$ S: C, \
$ [" `" f" [% s( a5 {
C =A+B返回:( B- e3 D" ^8 k
7 \4 B1 [) Q% g/ |. T# ^
C =6 W4 k& O1 h7 l; a$ \- X$ ]
, r, G' F2 n# J* f
2 6 10" Z% v3 K/ S' y0 I, u9 R" K
( D. R# V" s4 f& _8 Q3 r4 X6 v8 g+ Q 6 10 14
4 G+ L& O3 b |$ B
) j! I! y* f _% ~' ~ v 10 14 05 D. [) [. o5 F1 H: M" d R
3 H2 s' P0 K: y: B% t' T
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:
7 t. ^; d- r2 z) b8 T; a( D2 a4 J! `+ O7 |: g4 `, c
x= -1 y=x-1= -2
& _; d; |1 F4 z/ k2 I0 w3 g; V3 ?7 C& _0 k. C' t4 k
0 -1
* I1 h2 q6 N2 g. S) B
I- x* `; f# `2 15 c, z# L; w$ d0 [
; N' A6 _+ v/ J9 s" S
§3.2矩阵乘法
% I J# |* W h7 }) DMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
; Z! B( _) O4 }" b' k( _+ p* ]5 G' N; _5 N, X1 K. C1 |
§3.2.1 矩阵的普通乘法" z: y; _/ I6 b" H, t, }2 r
矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.
) n( G6 p+ Z6 i* e6 T) \
+ b j' T! V9 @& T# Z7 o$ W+ V如:A=[1 2 ; 3 4]; B=[5 6 ; 7 8]; C=A*B,* J) Y/ a" ?. ]# ]4 w$ x
/ |+ e. m4 ], n
结果为
$ ~/ M1 f' g4 C/ w2 T$ e" u, h) J: M) ]
C= × = =5 H4 I8 m4 ^$ H# x
9 @( ]1 n: n# N8 b" _3 b即Matlab返回:
6 \0 z1 |: e# G6 ^. W" S8 I3 \- V4 _9 Z( W6 r
C =
6 `7 g+ q9 S. g$ ~' C' C
# m7 }" V, f' M5 D* y9 b 19 22/ [; w, @! s2 } ]
6 `8 p% i' d5 Y% C9 `
43 50
( }7 R* p7 {5 K# m
4 O+ ^. `$ @7 H1 U, x4 E8 k4 C如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.
/ S. ~/ t, [: j2 {7 Y& [: S: l+ \( a! l
§3.3 矩阵除法0 M# u4 J# v0 }% c
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算./ W/ k) P/ X/ Z/ p: e; k
# r1 h2 S) v R C" H) d7 v
通常:
# x4 h4 _! H1 H) Z3 H, A7 P" A- @ V. x1 ^; I
x=A\B就是A*x=B的解;% K P W& N$ G1 x6 u
% i5 I; _8 [& T" F* ?9 g$ l: ^
x=B/A就是x*A=B的解.1 ]+ w4 g$ g# ?- c1 C) j: A
, K7 d4 x: a/ M3 {, ]- h) q, n/ b当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.
0 @3 F6 x& m% |, g
+ z, {) |7 Z# q, c4 X @如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
9 I+ y0 A2 G3 u- _ ], ?8 Z) i
4 t. J: D1 B; f右除B/A可由B/A=(A'\B')'左除来实现.
7 y3 a" n* y c, k# L F4 ] V- G4 K9 Z, u! j0 ?( J
§3.4矩阵乘方
$ K5 p7 {) A5 `$ ]; {/ C( SA^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:1 T' P# _2 L2 \
8 g, y* {+ o& |0 H$ d6 M( ZA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)* a- a3 [6 [& M9 G; @7 u! v
5 t2 p# f/ m1 r a$ }$ d3 x如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.. T& R1 Q: H' E+ K
9 i1 C0 X0 A: Y# w" s§3.5 矩阵的超越函数
0 B. Y$ O v0 a+ U/ T在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.6 r8 b& h/ u4 \1 t9 E$ a0 R2 U; Y% t
' l. H, R7 E6 A( i4 v% T: E5 f
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:% G! Q0 r: I9 [0 Y0 l' O7 X; J
# ?9 t0 Y( x- p, l
expm 矩阵指数! [- E6 E n9 U: X
7 m0 x- I9 V7 W q: ]7 L
logm 矩阵对数
) `! a4 W4 L# I! ]* z7 F) J1 ?0 @$ }' i. Q0 s
sqrtm 矩阵开方
$ [% C: s' z! u H% a5 e: F$ T
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.
2 q1 ?$ Y0 z2 T0 L N- ^" E# d8 r6 z
§3.6数组运算
" g( Q6 f; u* |! p数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.
) K) U, x, R* a9 I# Y" U* C- b! j" J; v3 n" I' ]1 F* g
§3.6.1数组的加和减3 v. I$ l! [+ x! O$ {
对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.2 g0 f/ l( \; ^7 O4 V- M* u
; D1 [# G8 P3 n" a§3.6.2数组的乘和除
1 J, q+ c- N @ E数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1 2 3]; y=[ 4 5 6];& R; Q0 g% b( \2 }% Z: @0 L
' z4 X' ^. m: B( V! F计算z=x.*y" A, g ?* F( C9 l, D# M/ p
7 t0 o: f* ~9 A, c结果z=4 10 184 C9 `1 ]. ~; x5 z
0 u$ w3 k e4 U& z( `' @数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.
8 A% ?& g% i( H7 O% X# o$ Q
2 o! a* ?$ F8 Y: W, f; X/ n" y) i0 ^§3.6.3 数组乘方
8 P# }8 z+ _* N数组乘方用符号.^表示.. b. }; i, n0 [
: J6 j' ]; e9 |' n1 k9 f- i& D8 u$ o
例如:键入:
% B* M+ s. O$ E9 A* a; C' H+ J) h3 W% K0 s% t' A
x=[ 1 2 3]
: `# J- \) ]; Z
: M2 ~$ ~/ D+ y C% y% dy=[ 4 5 6]
0 z% R6 j. z) o+ |( Y9 u' L
3 d# b9 J, k7 L! U9 w& ~则z=x.^y=[1^4 2^5 3^6]=[1 32 729]7 F, ]' J% d2 R, U, ^
8 D: G* p# w3 H# D(1) 如指数是个标量,例如x.^2,x同上,则:$ s- U7 l1 Q6 w2 o8 J+ Z2 _
( f# g" c$ M- R. N/ O% F9 Kz=x.^2=[1^2 2^2 3^2]=[ 1 4 9]
8 f* l# i+ ?; a- y
1 i, m1 ~# e9 k* L5 }$ A, p5 o(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:* F; I) a) _- \, E: n9 i
( f0 |" j6 c5 E6 |) I2 a l
z=2 .^[x y]=[2^1 2^2 2^3 2^4 2^5 2^6]=[2 4 8 16 32 64]% P$ I: y: } i' K6 U, ]6 L. `, t x
8 C0 y" V1 d) H; F% ?/ R
从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵., d, [- }& S* w
. [" E% k! ~3 q, _. Q: l$ _7 x§3.7 矩阵函数
3 W8 P ]6 T7 s x7 MMatlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:5 n9 O" w! R+ c& ~( J
6 s& @" b$ _( q+ ?# t
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.+ N4 D1 U& v6 A8 b4 a) R
& d2 s8 X( e' M5 Y: X, K
§3.7.1三角分解
: T' l+ F3 J; t5 j H+ G最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.
. v# Y1 m1 J0 y. M- D) G% e( C, [8 \# h! H8 G# M, n
从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.' \/ k3 [- u2 T+ i' s" z9 W
8 G1 h9 y; Y r2 `, _# `. J例如:3 Z" i9 Y4 u7 T* F3 q
* J( Y7 ? l, i$ @; u) P# w
A=[ 1 2 3: a0 G$ } z6 |% w
& q r% r7 y( A! N6 v' @4 5 63 _. }( q& G" k% ^- t
5 ^* h/ q! Q z9 K
7 8 0]' L$ Z; O6 l$ m
5 K, T7 }$ u8 h3 [) gLU分解,用Matlab的多重赋值语句
3 A0 ^# O, z- ]9 E2 s! @2 @. ~% {9 d9 P" T
[L,U]=lu(A)
- c+ |; \' v, c" n2 Y% P2 ]" Z& z1 }% V* n4 z
得出$ b+ t7 w& _8 h3 r" ^* B2 B# Z; D
" a) P+ z ~2 O' tL =" h, ]) y4 M0 I% g
8 i+ v, }1 T, Y5 e9 z" z0.1429 | 1.0000 | 0 | 0.5714 | 0.5000 | 1.0000 | 1.0000 | 0 | 0 | ) ~1 Y- }# s5 e# w: b4 W( a
U =
( u- H, P4 p7 H3 }% W! o$ Z
" n# t( T2 o) `0 c6 h6 V7 \7.0000 | 8.0000 | 0 | 0 | 0.8571 | 3.0000 | 0 | 0 | 4.5000 |
9 L/ f' n' W" m注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.- _: P; D" p- s, x8 M A
9 z! L- M7 X7 ?求逆由下式给出: x=inv(A)# V1 q& _. V# B% [
! e) C N5 G1 {1 H, |1 h" f& z* fx =
( _% A b7 u0 @$ M
9 R h- W1 q4 o" {8 q-1.7778 | 0.8889 | -0.1111 | 1.5556 | -0.7778 | 0.2222 | -0.1111 | 0.2222 | -0.1111 | 5 f3 u' v% _9 ^" _
从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:
H# m( Q Y- M
: f: ]( l$ \5 Y) K; bd=det(A)
& L8 d8 o/ W9 i& A6 P
9 h5 e4 c4 D' t8 R* h9 i/ cd =* y( g# z, E9 q0 X- |- H/ B* k# A* {
# ~7 L6 y" N& N6 f/ D; y273 f& ^2 i' i# V$ D3 Z5 W$ g
& {- r: c# x/ n: G( }& |直接由三角分解计算行列式:d=det(L)*det(U)8 a+ F. i9 |$ T7 H9 s
9 h4 |! H# R; r7 p. \/ g V
d =
3 m5 z+ I- F' l R$ V' t( y2 G( E; k
27.0000) [, J) u- M# Z# Y
) L8 y6 c# V, h* y为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.! K9 `' U) S2 C. \* O
( J- j2 u# j+ G例如:线性联立方程取 b=[ 1) L, X; v3 _% ?
- v, X/ X- G$ K. M 35 l a3 A* k- W1 T* [5 L
( D) o, m2 b+ l t6 b7 w 5]
# J! t! L+ c( j t" ?; ^, _ i' `% ?+ n+ F9 F3 H, A( Y
解Ax=b方程,用Matlab矩阵除得到
4 r% i. [* ^* ^2 ]; K- F; i0 x1 a' T
x=A\b: |% N- B) c/ j5 }* u5 H! l
2 }$ I; A6 w, a% v4 w9 B, [0 o结果x=1 v5 s$ L* f8 ~$ Q0 W% y
7 N# g; Y! l* b
0.33331 ]5 s Y, A: T* _
. T: |4 T2 x1 J9 e% E9 |7 A$ Y0.3333 c; u+ C% J! [+ N% x
* e6 R1 P8 F1 `4 }
0.00001 q F8 ?5 G' t/ b0 q V! D
# D5 h) d4 u. _1 x) A) g
由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:
6 A( }1 N* |/ G
. k4 S' Y2 w/ L/ \y =
, h8 S3 m6 \# n# I
9 {# o c. b9 U; g8 J7 J5.0000
: ]/ o% b- u8 @' k
. p, N/ U* Z( C. Q+ l0.28575 x9 v- T |1 }2 x& e2 G& i
- L Y. I. k& X0 Q
0.0000" _% `3 I4 T9 H$ f/ B3 {
7 C; a. y4 V- O% P& P cMatlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.; Y& p$ E- s' ]( Y( C
1 _) A6 b- Y* W4 r; L( w
§3.7.2正交变换
& p2 V2 Z; H5 ^! R* `9 n8 K* m4 i' c“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.$ ^) {: Z8 O' l. Y- T. z$ \
6 i3 ?" ?" B" D8 q9 q/ w8 _. ?例如A=[ 1 2 38 W6 _+ z2 J$ [1 V
6 l+ ?0 V" D$ o4 5 6. \: b; [: H- A6 J1 L3 v% s; u
) D% R! @( {3 Q; N( [
7 8 9- p0 F4 E, \9 V* ?* u
: O0 }% z4 @+ ^
10 11 12]0 d$ T5 [$ P2 I/ E6 X j1 b
/ x9 G4 D1 y( g+ r V
是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:
7 w7 M% h6 _" I, b( }. |; z
$ V6 }- ^4 g1 d! [/ d[Q,R]=qr(A)
7 R- U+ g7 e5 _+ ]3 j
' x |- |+ f- A9 aQ =2 W% U9 W$ O) s. Z9 j! a
- _6 @/ ?5 ^$ 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 | & i, d7 l" {+ k' I
R =
/ t* G( B( q; r
- y2 O$ f0 K* \6 l7 O) c. ~( K-12.8841 | -14.5916 | -16.2992 | 0 | -1.0413 | -2.0826 | 0 | 0 | 0.0000 | 0 | 0 | 0 |
) T/ U6 n* N& h w可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.
% t2 [9 a- [, ~* r# F5 }2 j- ?" `3 V# Y% N1 x" f3 [) B
下面尝试利用QR分解来求超定和降秩的线性方程组的解.
# R, J0 v, H/ \/ b' O/ D( d+ S
1 b0 e& Y/ f% b% I4 I8 n T例如:
0 G7 f# b3 v3 K q Z$ H( R2 n, l4 P. ?
b=[ 1 r) H3 b6 ^" E* o
3 q: z e( N4 c4 H3 N3
; \7 W r* @& w" [8 g" ^; h8 \
% q( h; x5 q. L1 W- i# e) _57 j7 N6 f! y: A! C6 j. I/ a, l
- _2 }- l/ M+ \6 y y8 L
7]
' S" I- a- H3 @3 V: ?% `9 o/ N1 S7 \. L5 q! n4 `0 M( b9 [ g
讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b., s2 s6 m3 ?) ?* f% ^ ~7 f
$ \) q/ Z: X ]# B结果为:
% @3 |1 k0 g* F0 h; \8 [! k9 } K4 O- a3 J7 X* e- ^, v( w5 I1 h; Y
Warning: Rank deficient, rank = 2 tol = 1.4594e-014, @8 J- k% Z9 Q6 B! X# J$ H
$ H8 g" i7 W, U2 Hx =6 o+ [& @* n0 p* R3 ?1 k
4 v2 M" I6 C' ?8 X* W( s
0.50000 u# j9 d- o# v; Y9 O
0 g* {" t' O; Q2 g7 k) i; n/ I 0! u# ^/ N5 j" f
" G d! C! b% M8 q7 @
0.1667
s! h5 l5 p+ E# M3 I& i/ N* k3 W3 ?- Z3 _, _4 M
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤: u5 T1 {# R" d+ l( p K
1 v) q0 y$ D2 {! r' } \
y=Q'*b
9 w1 \" l9 S9 U" I$ h m+ Y; K4 u8 F2 Q4 W- X! ?' M. \
x=R\y. L8 w9 P6 `9 Q( b# Z
. S6 Z9 M% R/ b) ^& m6 U5 `- d
求出的y值为
/ J4 a; f! `! l: A! ?0 ^( M5 y; i/ C2 u+ c8 g
y =. w! y9 A! }) u1 I: S1 Z0 _
$ g! I% W$ D/ [; m- A
-9.1586 | -0.3471 | 0.0000 | 0.0000 | / n) a* G1 I1 l9 q. \# E' C0 T
x的结果为) ~# f* ~1 Y& y4 N, [; U
: z1 _. q! K, k' P5 N% f
Warning: Rank deficient, rank = 2 tol = 1.4594e-014
3 P0 ?: G4 n/ H. h) E8 M1 U1 f2 A9 \ B
x =* Z; f) x$ b4 R9 N' r
% C) o3 ]. \9 F9 Y
0.5000; t( C% H" J3 J1 Y8 M$ ^. M
* C+ \) P) k2 }* n 0
/ b) ~! L! \6 e9 E
, Q% b% r7 n# E9 ]+ f, v/ h# m 0.1667
) \* o1 X& f9 x; h# ~" I) |/ F2 K/ Z: Z+ v C
用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.: Y* @6 {, p3 q. ?( W* d+ D
9 c0 @* V! ~6 F9 q+ N1 H4 V
§3.7.3奇异值分解- T9 E: ~. J/ Z+ D
在Matlab中三重赋值语句) h- y0 ~/ E: L1 k
2 I; T7 A" o8 B8 V, u/ k
[U,S,V]=svd(A)# O8 Q( d0 s4 z# E/ q
. a$ T2 u! h7 x! H在奇异值分解中产生三个因数:- j; [3 Q7 S X ~
2 Z) G7 ]$ A* k+ O% mA=U*S*V '
* ?" n8 j( X0 o% }" D5 _; Z/ y6 ?& h! G7 V5 F
U矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
) }/ X1 B7 T9 g* D$ H0 j
D% }7 y; K# K, m1 z% c奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
9 N( A3 T2 {7 Q. p8 k0 p2 u% s7 n) |) M# v+ m4 q& T6 d K- G# K
§3.7.4 特征值分解
7 T2 y1 K0 m' d( @5 R8 ]如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.- z9 s* ^! w8 i. o6 [. Q0 W
+ ~) k7 Y, B% n' Q6 f4 a
函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:2 |, W. ]& ]0 S7 Y
# U/ z: I5 Q# A) i4 R( ?; r
A=[ 0 1
1 m' M- r% {$ l0 k3 u# p7 J+ h9 K. Q$ _: q$ l
-1 0]; n9 p. w$ D9 Y& v
, S" L6 O, R; U
eig(A)- @# G E) T4 ^! j9 ]
; M7 _- k; M6 J5 V
产生结果4 y, ?; a4 V4 |6 G' C( ~
: ]$ T5 ~* P O9 }& W: N" C
ans =/ y4 Q) G! S: _. ]) n
/ t$ z1 o, E8 w( Y7 O# H2 b! G" e
0 + 1.0000i0 q' T) c% n% n6 M- b
- x7 P! m) W X9 K U# @- l' W- \
0 - 1.0000i2 z1 Q6 N7 m& t3 H: L
- i; e a8 e b" v如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:2 t9 K& _- i% j) L: h+ l' ]3 e
2 ?. Y+ r5 M# b[x,D]=eig(A)( N3 J$ u3 k* w/ i9 P7 `
: X$ b! h2 R$ H8 H, k5 MD的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.
, v' n" V2 `7 s& l& k
4 m0 v1 x, J/ _% }- t" G+ s0 Z; b计算特征值的中间结果有两种形式:
( o+ R/ D, g) d9 P9 o/ u( f* z9 P4 d2 y
Hessenberg形式为hess(A),Schur形式为schur(A).% t" z% h+ D8 f# r3 e
4 M9 V) v& C9 N2 Aschur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).- O7 ~9 O4 L0 ]
* W6 f7 B! o7 K# `0 p2 l; h0 S如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程! R; `1 g4 M: ~$ Z( H
9 ~" D7 S" R& w
Ax=lBx" ?3 }+ O* d4 i1 ]* O) j
! u4 o$ l, y/ A# b
双赋值获得特征向量4 E. n" V) v3 T, X2 w- l, {: H* u
" c: a- h5 U$ X+ \6 L2 w
[X,D]=eig(A,B)
" v% y# G% H$ L1 I8 e- Q8 L \7 U5 d) g
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.5 V% p/ L, v. d+ G6 e9 L
8 J2 k% t9 a( ` X% ~/ a§3.7.5秩9 f9 Y* a3 i4 u6 [! J, E
Matlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.
6 t) b" k0 Z; O1 E6 W- U( p) U/ Y& ~( w( y
利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.4 b$ k' X$ x+ v. W3 A
8 H/ B& |/ x8 T- z |
|