找回密码
 注册
关于网站域名变更的通知
查看: 500|回复: 1
打印 上一主题 下一主题

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-16 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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( t

0.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 d

7.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

该用户从未签到

2#
发表于 2019-12-16 18:27 | 只看该作者
学到了,赞赞赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 19:55 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表