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

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
! h4 y6 H1 T' l, ?; B; a% p
- d7 Q' N" G0 l" n: y/ i" @§3.1 加和减
4 U5 p, e# O1 N4 ?2 I" c如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:8 r$ I( T) z, G3 X1 f; V3 i
* R* a4 e5 {: `/ [
A=                                B=1 a0 T' P: q2 c  w9 d1 `

" d1 a, ?+ I4 H. |+ f  [$ B3 {1     2     3                   1     4     7
& R  _* i- s; g% ^6 Z' i4 ]$ p- l% ?. v4 J0 f: H& g
4     5     6                   2     5     8
, `5 h: B0 r7 Y6 z. e/ O5 {2 T" _8 a7 V9 X% G- n6 Z
7     8     0                   3     6     0
) i, m# d: S" u& {
8 u$ ]6 a: j2 w% Q7 sC =A+B返回:
& o% v: f, y6 ]1 d/ p* }3 J, ?* @' G8 N8 Y& V* C% G- d1 X
C =9 U9 P$ C' {: R! c" t% R0 S

/ |* G: ^& }1 d# c7 a2 ^    2     6    10, r8 N+ C1 _( f3 g; y
% @8 ]* Q1 B& c3 N" k
    6    10    14, t3 z0 E& Z, ~' d& O
7 p7 n' b: H4 I+ s' b' }
   10    14     07 D) q# U" K1 x6 }2 M

; T1 C/ v! G1 i& `7 ]" ?- F2 t% f如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:
1 r5 W2 n% }! u& p+ \  B+ W: @* Y1 j0 |$ I" ^
x=    -1                  y=x-1=    -2
( a6 x. o5 q+ Q4 C* E. b' p, t, ]5 j) S; m, r) z5 e$ {
0                                 -1
  P! |* @9 g; N6 O. E7 z' B: b& |) O4 ], h
2                                 1" ~6 }7 T# T$ H" z* G. P+ c6 {
6 I# Q; {/ X4 `; E% T! K2 L7 U6 j# O  n
§3.2矩阵乘法% T) C3 Q0 \3 C2 ]) P3 K8 _
Matlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
8 h; S* n# l! W) o6 }5 u. j8 c8 X' Y
3 m4 t: ~6 w4 F+ Q5 k3 c§3.2.1 矩阵的普通乘法
+ @; ^8 F5 t0 N. v. w7 p矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.
4 v, W: f  O1 T  Q+ \7 I; F
2 z$ `  l: J7 U如:A=[1  2 ; 3  4]; B=[5  6 ; 7  8];  C=A*B,
8 C' Q( u) h- Y. N  x
% E" F! _3 X7 u) ]4 z( g6 X& f9 C2 C结果为
$ u. K* L" d2 X& R2 ~5 f' K: Z% P# U) O! I6 w( f; ^( Z
C= × = =
6 @( |2 e' l% g) U* f: j! F7 L9 i) a
/ z" j  V: Q! X' x即Matlab返回:
; p; Z3 @% Z$ g* }+ {7 _' O4 L# O, Z
; x6 F+ N0 _9 ^1 d* MC =! ~7 m5 P' `/ E4 ]. D

7 x) q( v+ q# d9 ~6 R. U4 y    19   220 \* }. W& [" Y2 h5 n

. T7 Y- T6 Y9 h    43   50& G$ F7 c9 z. q, A* ~  ?

: i" Y5 h; s$ I& c/ r9 X1 r如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.6 P7 X6 V3 s$ q' A- T( ^
5 U  W! U) o4 G, O2 r$ F3 M5 }2 ^6 I
§3.3 矩阵除法0 B6 P! j3 {' ]- y! _5 J0 C
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
. L2 ?3 O/ c3 ~& l1 u- y5 z
4 X) E1 E+ T! A  N通常:/ `# J6 l. E% I9 K: e. x, \4 r

- y2 d& ]" N" ?" p% @- w- _x=A\B就是A*x=B的解;. q# ?; G" }2 E' c# ?

2 r/ t1 Z! ?. o1 I9 K. yx=B/A就是x*A=B的解.+ T- y  }& U1 P
! I4 P2 n8 m1 k8 H
当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.9 B( [' c3 ^0 e! r+ D

5 ~. U" I; o5 d* r4 c, Y如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
1 k$ }3 Y" C; ]
9 a2 k* z( I( L: {( J" ]4 |右除B/A可由B/A=(A'\B')'左除来实现.9 K7 A5 i( a8 p+ H
6 h* R( d( T$ L: t
§3.4矩阵乘方+ O$ d) ?* d6 V
A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:
$ Q' O  B+ I) a2 e& m
  A. d" z  C) x: R- H- PA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍); Q" [) X+ n% M: ]! f9 R( Y
- J3 h; _" c. N! V1 V6 u& E* o% E) u
如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.
1 W5 \# n+ t: j% Q# b4 a
- z7 b/ C% D7 |# `§3.5 矩阵的超越函数
- \  g; |/ `& z% g4 @在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.
" J1 b8 y, }3 |/ `' T0 @+ y# p4 ?% T3 x3 Z
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:$ g. M! Y, ]2 I+ u
2 R3 ?( l- [& i
expm           矩阵指数& q  c+ R! K8 w! o  I7 R7 O

* R; P3 O5 D4 H2 ^( ?/ O& tlogm        矩阵对数2 V! J3 I3 J+ |

3 N* U2 X: b; Csqrtm           矩阵开方$ d& B) k. E; c, b# |
3 [4 n, C8 T; K: |2 S
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.' G( G6 b- H9 N, f

; P8 \$ u+ W- P& X% ~  L/ k% l5 @$ g§3.6数组运算5 ]& c3 f- y: |
数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.
5 ^& j0 d& P- j& N' }& j! \) {' L5 B8 x/ s0 c2 h
§3.6.1数组的加和减' L8 v0 Z0 s% j4 ?, B
对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.
0 u- O1 N3 x; P, u
7 G8 j- d% _% u7 @§3.6.2数组的乘和除
' I& ~/ P# l  p: @& b数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1  2  3]; y=[ 4  5  6];: A  k, y/ u! E" X8 [# y4 x; H

; N- z3 K; M% C  }: x2 _0 u计算z=x.*y
& R) i" h0 [/ ?6 s5 s! J: ]7 _0 a, {* O% \. b$ G; X+ k, w. f2 n
结果z=4  10  18' s1 I/ w/ l2 x  t& E

' x  T% E9 ]. E8 m! G1 Q8 Z* F数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.. m7 y2 ?. j; r6 u9 p: z
" G6 ?8 ^# {" z8 f6 s+ b
§3.6.3 数组乘方
3 D* a, ]; G- j5 r" n数组乘方用符号.^表示.
" o, p- n2 d4 O! k
( q9 j9 ~4 f% |/ M例如:键入:
3 n4 |% c/ m3 J0 X
) {( o: C; Q# K! U% C% x9 F- r* lx=[ 1  2  3]  ^+ l. {3 \7 S
- K! w3 ?5 ~0 Q" o# D8 [
y=[ 4  5  6]
: N9 R, @$ [. A  B  [; j- z
/ I; E; A1 s; u3 N& N# G+ Y则z=x.^y=[1^4  2^5  3^6]=[1  32  729]6 C' k& V/ @7 T
+ X/ H9 p* s& l5 u( v0 s5 q
(1) 如指数是个标量,例如x.^2,x同上,则:& @; L+ ?! P, j! K0 E6 b3 _9 i8 \
/ ^! J& `. B& j9 P# t
z=x.^2=[1^2  2^2  3^2]=[ 1  4  9]% e( q7 Y  {' y: t5 ?

9 S5 g+ b2 K/ E2 ?. ^8 N(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
, X3 W9 k& l% B- ^1 ^" E
: A! z1 Y# o. p$ y" Bz=2 .^[x y]=[2^1  2^2  2^3  2^4 2^5  2^6]=[2  4  8  16  32  64]3 e6 i. j: J& r$ S, F: ^$ L
6 J* @- E3 C; y0 S9 R* I
从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.8 i# ?& d: E+ s5 h* q
% @" x! a, z& B& |* T
§3.7 矩阵函数7 s: N9 B8 k3 s9 L" f5 c6 t
Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:' w! F. W6 f5 q0 h/ X* @, _% ]
: P/ _& b8 {& O7 t$ Z
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.( }' n/ a! M, ~, J2 ~" Z% [' I
3 L/ q- b/ S2 A; k0 Z7 `- a) V
§3.7.1三角分解4 l+ |5 c3 s. R
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.3 E8 v7 I& k, W7 ]

8 ?' V6 x! T: A: E7 b从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
" C3 u) ?. d# [8 |! Z9 Q2 i$ I# K7 K# x8 \$ T
例如:
/ F1 a+ C: J8 ?1 Z. S* R4 a5 A1 Q8 C7 t7 \: @
A=[ 1      2     3# m! p) Y  {& C: p3 d7 q
* U4 h$ C3 N) C9 B. Z  v  |$ P
4      5     6
6 m, V1 N( a# }; n* p
% I) M9 ?0 a9 e& I8 A; `; m7      8     0]
" L" s8 Z" l, A% g; h9 j, m( L  \5 D! A* ~$ {
LU分解,用Matlab的多重赋值语句
& d. f, h- p6 ~# p  N7 {: B7 \3 l: e9 D& T
5 ^9 W, f2 T; a( A/ C0 L[L,U]=lu(A)' b6 g1 f7 f: s3 [! S$ r4 H) x
1 l, }: f: U! `. x) B* ]
得出
9 r7 ~( W( L* P% Y) O3 z: y# a" B. W- @0 j3 m; n' t
L =, V8 O) t  e+ z* N4 J
* E( y6 v% C$ [# P

0.1429

1.0000

0

0.5714

0.5000

1.0000

1.0000

0

0


+ _$ d" d2 L% a0 _U =
7 i1 J/ Z6 x) G
- F' ~; `% V3 u  W5 R  T

7.0000

8.0000

0

0

0.8571

3.0000

0

0

4.5000


6 O( y! g7 I8 L, L% H5 w# T注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.! C* b8 x, b3 {; D  O, q) @

% T9 o3 p' Q' P9 |$ L+ j; p  x$ \求逆由下式给出: x=inv(A)
3 t: \4 w5 {; \0 @+ b
! }0 K& p: k; Y$ M% f2 hx =
" d5 d' m5 H; w1 H& v# q" l: T& B2 Q4 [6 N( b. O" E2 l% q$ v2 v, L: U

-1.7778

0.8889

-0.1111

1.5556

-0.7778

0.2222

-0.1111

0.2222

-0.1111


$ o& D3 x' k5 c+ L4 d( _从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:" p9 u. \8 K  o7 e- O. L2 x& H

! B9 K5 h0 v7 o- jd=det(A)
# z4 K6 |# Y  q2 ^1 w" w
  Z" t1 H2 l( ]) c( ]5 Rd =
. s2 n! G; w: O2 R2 Z. C' }# J4 M
2 j+ {8 {& w9 ^9 |7 [7 F( ]27
& U, t1 C8 V  S9 S! M7 m4 C- M  Z+ t" A
直接由三角分解计算行列式:d=det(L)*det(U)8 k$ B0 b# u" a& c* K$ Q

# W' ?1 ~7 L; I# R$ Ld =4 T+ a  [: _  A

/ _; A$ `  S& ~27.00008 J# B1 i1 `3 J
/ g6 V! Z; o; D5 h6 E; S# y
为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.9 Z: R: N# u/ d; F3 j9 a0 E+ c! r

  X* D  L0 D9 ^2 o. v8 g  w例如:线性联立方程取 b=[ 16 t/ J) l5 ^5 F
$ `2 m' z# h/ T
                                           3- u% S9 c  b! O2 P% z
$ h6 m" Z  a, k2 L8 V/ _' y  \
                                           5]* u" V2 W8 y- \/ U4 o5 A. x1 t

$ E+ i2 f6 X  Q8 ~4 O解Ax=b方程,用Matlab矩阵除得到
  `' N. T' s. T2 _- A9 Q. N6 w; U: V; B, n5 T  M7 m
x=A\b# z3 Y" h7 c5 b3 ?
4 X8 J  D' a$ W
结果x=
9 j0 m7 `, \. _+ o! Y2 ?. D
7 |; ^$ i3 R- {0.3333
. P, v% T+ R: j) N/ G3 t% A1 @: ?& x! @1 v$ G* G$ p
0.3333
" S+ x9 W! k4 J, q
: R& {. Y& x/ D  v8 |0.0000+ E5 d$ s0 }/ \! S7 s7 k

$ k9 j9 U' B# `由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:( z8 b  X* Y! R1 \$ W/ X# C

4 x" F; @: v" x% |1 g% uy =2 D* x* z" y. l, `
; I- M! a. U4 _8 B
5.00008 J9 n; Y2 G* O: D. Z

* h/ I4 O6 t- H1 {. O- O. T0.2857+ r/ L8 C  p/ E" q3 e
8 L6 ]/ R1 g, M, _( w" P6 t
0.0000
( ~4 U( C% `; x# k7 G: g9 h% A1 Z, F8 r
Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.! \$ \/ [& ]+ A9 i3 X
( k1 B3 ~3 s- x" M/ p. d
§3.7.2正交变换
  L$ x" Y. D8 t/ d- R“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
( B4 h2 \; p6 Q+ i7 m- \# c+ b! _# p- y; Z% {
例如A=[  1     2     3
7 v/ Q) V) v9 M" _8 `
8 X% D; U- t/ ~  Z4 w: V6 e4     5     6
! O! E4 S% X3 h' F- f; h; v8 v5 V% q  x, ]1 s& h; X9 o7 V
7     8     9
# i5 z$ {+ ]. z& a. q) y7 I' y6 _0 A+ b$ D
10    11    12]' K" ?4 p; Y, \& n" [. |9 L& S

/ g2 K" s+ L" @9 i是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:
9 T7 H, G  p2 q. @" y" N
: W: c( J. N4 B! m[Q,R]=qr(A)
, m7 {3 b5 g; o- _9 ~/ `5 X0 K. G8 A* C. s8 e7 G% E  a; D- G
Q =
5 ?* y: N/ a# d" C; O8 t" A% S) Q( O- d  b

-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


: w' b9 ~$ Z8 M3 rR =$ r, {+ ^- i& F5 g( F

; ]) [: D5 b7 ^9 h

-12.8841

-14.5916

-16.2992

0

-1.0413

-2.0826

0

0

0.0000

0

0

0


5 I/ O2 \3 v* p  h/ P3 e可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.
; M! Z( G- [  v- M/ C; P( o" d) Q. l/ Y  y9 o( w* |1 ]
下面尝试利用QR分解来求超定和降秩的线性方程组的解.
1 ?, |7 Z2 ?3 f) U( I
8 A  @8 E8 ]; ~: w8 ^0 w* i例如:: p1 j; k% O! L' ^* m; N& V9 g' y4 W
, [: q1 {* t3 p! n) y  D: s6 V
b=[ 1
5 ?* S0 u, `4 _3 @6 \0 f  P7 J+ r9 C5 E' `& v& b
3
, x: W; }% F% }5 S, |2 A* O+ |) `: M. U% b0 N1 J4 A
5
5 m! h0 o7 N1 q9 d* W, x
' l; E6 o" `2 U4 s7]
; W& g  L9 k, z" a
' g/ _7 d  D! S: E( O- u6 U' V讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b., _/ r" U* F, D' L

/ I$ Q" `1 O4 S5 U结果为:5 a/ Z; D, B+ x2 m

' w3 Q* Q0 u" e6 Z( nWarning: Rank deficient, rank = 2 tol =   1.4594e-014
2 j0 P7 W' C0 t+ r) W1 T! P( w+ N% h/ [: \- A! Y
x =
5 q, N2 l& k7 w
1 y# J+ v9 b2 D  O    0.5000
5 C. K" R* O! |( w# }% Y0 h; S) d  E1 }' R0 ~# \0 B: k. q
         0
/ ?  V0 F! p) x9 Q0 j! J  J0 K% [9 W! L, E$ g6 z8 Q$ A
    0.1667" B- C( G1 `5 z
, W1 \& h2 l8 S% z
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:
/ o0 E" B5 m6 `7 q) N( _& X/ k+ J. Z8 s3 O+ c% k' R
y=Q'*b
  z: [3 G3 ], O" g& P  O  _# K2 k6 w) d! [/ t
x=R\y$ r8 ~2 a/ o/ I" T
0 d1 G5 ^' n5 i4 O- }
求出的y值为* G, b$ K# U0 Z
% y, w* k" [5 f+ \# T* N
y =
- r% D" D# a5 |: Z% u" Y# K( i: A% s: W- u3 p( d

-9.1586

-0.3471

0.0000

0.0000


) R1 R% O* q7 h, i7 e8 \7 Lx的结果为
% L9 E8 P3 |3 c* i5 G, [/ i  R. ~' O7 w  M% {
Warning: Rank deficient, rank = 2 tol =   1.4594e-014+ `% K5 f! ^& g' ], j6 _6 C

# }* g* @4 r% w7 J/ d3 L4 Y. Lx =2 z0 r% N; E/ B( v. R5 U6 c

& B2 H6 H3 n2 b8 H: K# X    0.5000
0 W/ C0 ?  N) v  I0 {( Y# o5 W$ o0 K# A9 {( U; n
         0
) Z7 u6 n) q# |/ R. A- u. J3 L# z. s5 B, r
    0.16678 W: d  F3 T  [) o; O0 T
5 u; f  |1 D3 q" H' ~5 u
用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.  S2 f3 f2 ?3 s
( f. p+ ?3 q  K) ]
§3.7.3奇异值分解, K6 k9 H' a6 A4 f1 O( f3 x, D- d
在Matlab中三重赋值语句
  b3 Q% m( c- W# b/ I& G$ Z
! X" Z; i* [/ y/ u: O" Z' U" S[U,S,V]=svd(A)3 L# W) x, I5 r' k

+ d1 N0 t9 m- S9 h- r2 O7 C2 m) Y在奇异值分解中产生三个因数:
; l; `) u8 D  O$ l* f) ^! U7 x* b" j% p9 {- @5 C
A=U*S*V '6 p! X) ]- Z9 s! E! T( G; K

+ `5 [6 G4 d1 X0 q: r) L" [U矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
1 ?* i" Z; V" y4 z! T
+ ?1 }; N( c6 s" m奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).0 S8 L# c0 ^) ]& S8 h" U. M1 D0 ]7 [7 J

: _0 _4 Z: T" o/ \, A" S§3.7.4 特征值分解& l& w7 Z" ^! @) w
如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.
+ D4 Z9 c1 P7 k- k' a  ]" |
& M7 w4 }! G$ T1 X# u3 a) a9 j函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:7 j6 e2 f# e5 `' q8 C. w

  k. V" I, m; w; h, l) _% lA=[  0     1
6 Y) v, e6 ^& R7 e2 f* H7 q3 P: j- U* R" i( E5 n
-1     0]
) H: G  ^5 U3 R0 q
6 V  B1 b) Q: t. Weig(A)/ B4 l2 x! m, m: Y8 L

2 }  w3 e! v. l产生结果
% n! S7 S6 r& ^+ M' I) \% o* T' r- P, R1 H) `3 |
ans =/ x6 P& b. o& H5 M

& n' i: p& Z. }) q- b' k. K0 + 1.0000i
& R2 G" [5 n1 S; c$ X* v+ S: U+ B! O5 ?6 X3 k  C( D2 v, H
0 - 1.0000i
3 {5 c5 n$ R, }7 l" i% W
" {( h1 B% _9 N如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:5 p& E# K* `: q. h( n1 `% C" S( l3 _
9 M4 W* P, Y, R& c0 J+ m
[x,D]=eig(A)
( \0 F3 p3 Y6 J# q% l2 k. t4 G0 z+ W2 C" s
D的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.7 d( K' ]9 j  h. @9 ^
( {! h: D" a9 g* o/ W6 s! M8 u' F& p
计算特征值的中间结果有两种形式:
. Y/ D( K( W6 `! i0 U9 _
4 p& H' i# e- L1 b( aHessenberg形式为hess(A),Schur形式为schur(A).( ~$ G5 t6 [. e$ b6 q( L/ i: F

: c; O5 L! b% S4 d: X" W5 |schur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).& V1 }' j  ]4 {. e2 L3 F

" ^( j) f3 @$ A如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程
. M4 d+ U3 B% d3 ^2 m
" S8 w$ V9 [/ j5 e' GAx=lBx+ t" x+ o9 T5 S
% k6 B/ ]' Y8 e! w: ^0 \  m
双赋值获得特征向量
$ L8 l/ }4 o% w( }5 k9 P! F  c2 y+ [* ?: ?: R$ ~, b5 O- A
[X,D]=eig(A,B)
6 C2 @+ B+ B3 ^0 r% B1 ~# A7 |5 ~2 K4 I3 Z1 Q: v/ z! K
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.
8 X( s, X% M6 F( w& W+ R+ \
% O$ h% @2 u- c* m( a9 G§3.7.5秩
5 a9 I+ p; O( P( HMatlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.
% f2 V9 q7 Z; A/ p7 R+ f$ S% b, C% O
利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.
6 I9 |! T/ K0 U  X# A# l: u  M, q$ f) k3 Z

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 20:56 , Processed in 0.234375 second(s), 24 queries , Gzip On.

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

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

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