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

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
4 E9 ?8 R4 ^) V9 y
$ n" w4 h- l( N0 h+ ^/ i§3.1 加和减6 ]' i+ `$ Y/ D' ]
如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:+ M8 |2 q. {4 Q6 `
+ `, C( k' Z2 r& i/ x' P* ]
A=                                B=# c1 b+ D/ P5 m. _  c' {" K
, z' l7 q- V! ^; Z3 R) P
1     2     3                   1     4     7: a/ l/ H. e- p6 e+ L0 R6 F
& W( L9 g6 q; j" L5 y& A
4     5     6                   2     5     8
. X- Q( F4 y" R7 A( M7 K8 R# E! I! b& j4 q% M1 d
7     8     0                   3     6     0+ {) d* P/ v  t4 K0 g* ~

0 M) Z# N7 l- z! HC =A+B返回:
6 Y$ L" O: m3 L. w
+ d2 i' r; g8 y7 FC =
, e" P( B9 h8 Z. {7 u( [+ V* `. i6 I5 T  z/ e# d
    2     6    10: L+ d" \2 Y1 S) ]2 s& W4 \9 b8 I
7 |( J3 J8 L4 N& k1 m
    6    10    14
) S0 \& }- S% O) Y, f7 j7 w6 U7 u
$ H, h" w4 S: t3 L9 Z- B+ Y. M   10    14     06 {# i1 B" w; V: F- b+ g1 q" o
  f! m0 ^  y4 |4 h! _! E
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:4 I. x. N; `6 @" [  \/ V% ]
6 Q( f% ^0 x/ O- Q" u3 Q
x=    -1                  y=x-1=    -2. q: j5 a: N- \2 T# V3 i* f7 n9 R
; }* c/ ]2 Q+ b- N
0                                 -1
* G: N: l; a! n& ^: G- S6 I5 g) A7 [( Q" w; b
2                                 15 o+ k4 I4 S; `+ g. Y% t) _
% L, i6 p: u* X- G1 ~; H
§3.2矩阵乘法* }$ a; c1 g, O  l1 S+ q
Matlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.) L/ s9 T( C, q1 U* A( P
* f# T' {' {  ?
§3.2.1 矩阵的普通乘法( C2 ?) V5 c8 Z( Z2 P2 J/ H1 i
矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.# e0 [  A9 J9 y* x. S+ N5 ?. w

) b" }( ~- h! E; i/ u如:A=[1  2 ; 3  4]; B=[5  6 ; 7  8];  C=A*B,( \* p5 @  s. m0 q1 t
* y2 w1 N9 W4 n8 |. d6 p+ P
结果为9 I2 L7 y! @& n1 M/ \4 L/ P7 _
  W' X; I7 I7 {9 {( z, l; @4 e  R9 r: L
C= × = =
! C* U  x7 N9 W/ S4 }- s  {. k( E+ H% ~- {
即Matlab返回:* M5 w2 M0 Y" z$ x/ d0 ]( Y% r

: ^7 |8 L7 g0 }C =
( r7 g2 Z$ q- {1 `( S' f( i* ?
% @5 K8 n0 p4 A2 r) S    19   22' w* X1 Z: x1 E- m
+ S9 F, J. \3 i/ B! }
    43   50/ E, @4 S0 j0 `8 Y" w3 o% [2 d+ [, n) r8 T$ o

1 L/ a/ O) x: Y. v如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.
/ r+ R& }2 W) u" G& V  m. N1 v- c5 F; Z( N- i
§3.3 矩阵除法
# \# ^7 g0 _/ Z2 b4 H在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
9 K; `' M: L. n
. h+ t% I) x( C通常:
& t. \* v0 C; k% Q: f1 M% X$ q1 D$ a& R0 R
x=A\B就是A*x=B的解;
' [; ~! v9 |* r0 P! _- Q+ `' [% M
, I! S5 z' J, `! yx=B/A就是x*A=B的解.
6 w' ?5 I) Q0 w! @7 M' w" l& e* @0 N; ~
当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.
' t; c; t' o6 `+ q; A4 S
% P: G. c1 n- n( H如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
' D, t1 e4 `/ d0 E' J: d, j. p: ?/ D& _4 y. J
右除B/A可由B/A=(A'\B')'左除来实现.2 k; |5 g  b8 X- c3 w1 u; A: {

3 a$ s1 c# ^6 S§3.4矩阵乘方
$ |% B! t6 Z' h; {" v/ E. }. fA^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:
" q: S( x  h2 V$ z8 o
9 d; u, j. ?; X8 j6 C2 g+ yA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)5 K% N) }# V% \* s+ v
, @' a2 a" x4 w( ?: x& w
如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.+ g' G" i% d6 }

/ O7 ?/ w% O2 A9 h7 ]  Y& X% \§3.5 矩阵的超越函数
# D% X0 r4 b! G# w  b3 C在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.
! P# @$ ?2 M" C( {# e! B, q8 c3 |( s3 i: p5 Y' A  P# O4 R% r& ^
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:  b/ U% \! h; _& C
2 I$ Y0 C" Y, ]. M) ]
expm           矩阵指数
! \7 |9 R% n5 I4 Q) l/ ~, |
3 |# }: t& o* M' ^7 Klogm        矩阵对数
3 A! X4 E  j: K5 B( d! v8 A1 B* g
3 \3 z/ j& ]% g, v8 U5 ^3 V8 K* Hsqrtm           矩阵开方
  Y0 s3 I  d" t# ?/ u8 M& F1 j1 W" A( A$ y$ Y3 i3 k
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.
* w! \+ L& A+ [8 O' y: r6 |; K7 w# E. m5 \7 b
§3.6数组运算
9 Z0 n! g: i8 s数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.
" d: b1 S* g3 N. G7 c2 H
; M0 w% M+ Q! g; [: V1 M0 G§3.6.1数组的加和减
0 h+ l  F8 v& g对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.9 w7 Z8 O- F3 j% m6 ?& c1 H: i( v
' q# v& T) K3 O3 l! c3 u- E1 [0 k
§3.6.2数组的乘和除* l7 Y6 h4 M9 i  E3 P2 _6 ^
数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1  2  3]; y=[ 4  5  6];
; X6 T5 v9 t5 B# [: B: [: s
4 C& F6 p' L) D4 m/ Q计算z=x.*y2 z1 ~! J1 Y- Z/ B8 u
& [0 v( g$ z: c2 a
结果z=4  10  189 C5 |$ p6 `' R" N3 D) M

1 w) |4 ]8 {: ?1 p2 \) G0 x" f) f数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.
. g+ R: @7 C( ~  \! q" H) G
3 i: L9 T# Z" i§3.6.3 数组乘方0 m$ X: E4 k6 {( e
数组乘方用符号.^表示.
: c' n/ M' W  v) k: b
' n- k/ K( {7 f5 d4 B5 O例如:键入:/ o$ w* {4 K! [' {! ?

+ w  g* m: ?. q) zx=[ 1  2  3]
. ~* S1 ~3 A9 c- T- F7 R! V- R) \- Y$ v. R/ C$ K: |
y=[ 4  5  6]
2 x. I5 w) G% l9 r; z+ f* f$ |+ O- M( ^" t( v) s7 B
则z=x.^y=[1^4  2^5  3^6]=[1  32  729]* t8 e. B: U+ g

$ Y' \9 n* r; w( K- k* F(1) 如指数是个标量,例如x.^2,x同上,则:: c$ b6 F; N% i+ T& X' L7 E
* e1 }" s( G( P% g, y; q" N/ W. d
z=x.^2=[1^2  2^2  3^2]=[ 1  4  9]
8 r  v1 f9 `* F2 B& R
/ g8 ^$ p! U, ^0 U0 b8 e(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:4 T3 O! D- M6 w0 l

. X' ~2 F+ V& ]8 c% e8 U/ Xz=2 .^[x y]=[2^1  2^2  2^3  2^4 2^5  2^6]=[2  4  8  16  32  64]& q# y, N7 a" K" W3 t" t- \. T
; ~, f% t. ~- q# a$ r8 E
从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.* a, g: T6 p) L
9 E5 m( s6 s3 H
§3.7 矩阵函数+ ]+ V9 t. I% n. K! j
Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:  x6 T- f0 @. D4 s  |4 H& S" C
, C. A6 I6 A0 k$ g' V* P
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.0 u0 R: w! J' p, W  V3 e& _
" x6 b- c  p# ~1 v, P5 c, k4 ^
§3.7.1三角分解5 F1 y* @5 g8 I8 [/ S- |
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.5 h; z; S& h: e2 k
! r, y/ w- o: v& c$ ^* W) x( M
从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
' ~2 E2 h" H8 p$ v1 _" D4 v  n
6 O4 L9 M3 W* o8 T例如:
% ?. h* k  Y* b8 t% [6 Q0 X
" Z! H" x( Z! ~( T' K" s  |' hA=[ 1      2     3
0 F. Y& ]- N: N4 H3 j
  k4 j& `' ^% w. Y) Z4      5     6
  Y' T! U7 |, D
  C- {8 Y# Q' D7      8     0]
; ~; L# j" ~/ L; n+ f7 @* g
' }8 C( U& n4 n& }& XLU分解,用Matlab的多重赋值语句
* I: i% J/ T, G  E, X
3 N* E0 P, _8 ~& P& Y: k$ i[L,U]=lu(A)
$ {, e, s% |* Q7 ?* ?! e. C0 s
4 q7 N+ l4 Q8 Z- u9 u得出
' y# G# P& Q2 J+ q4 f. |" [
7 d6 ^$ I! D1 y/ o5 ]9 V7 eL =
( D/ h& V5 @+ K+ K" P9 D- @" K$ K; F9 Y: A7 J$ V) e+ j

0.1429

1.0000

0

0.5714

0.5000

1.0000

1.0000

0

0


" D% L- Y, M1 u3 dU =" x0 m9 c: `7 h" l) Z
: p! H6 Y- {5 z2 `; k5 Q: N! N

7.0000

8.0000

0

0

0.8571

3.0000

0

0

4.5000


7 B3 U& ~) |. R注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.* i' v3 C6 _- }, B+ c* @
. N2 M# K' K/ z2 q
求逆由下式给出: x=inv(A)
. P# V! Z( Z; S8 K. w2 [! j
! f; X6 w) B' r: W; H: }" Z" lx =! s$ f# M0 h" }

+ B5 _6 U% i" H* s7 F

-1.7778

0.8889

-0.1111

1.5556

-0.7778

0.2222

-0.1111

0.2222

-0.1111


2 F& ~1 _: @5 `) c从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:
4 Y. {, V2 A" w) u$ m3 \  Q
& v# m/ u3 w5 r! t, Id=det(A)
6 \' V* A/ H' _. h3 A/ I; o5 r
8 M/ f  Q3 q9 R3 u7 e- @9 c. {d =6 A3 J! J0 b) W& n. Q! N+ A1 v

9 h/ U) v  ^7 ]27
' t  l% U8 [0 Z/ L1 b+ g
! B0 S3 p7 N8 ]# C直接由三角分解计算行列式:d=det(L)*det(U). D( g, Q/ ^0 q: b, {
, O2 q( R' S# F8 ?
d =
' m4 G# {% n& D: f7 G3 c! i
5 i5 t" j7 U0 ?# V27.0000, I+ }! E/ N8 d4 \5 c: L

* k! b1 P) q* V# J3 h4 x% S9 e- q2 r2 I" u为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.
6 _- D& C( B+ Q4 a, ]- c5 A. F2 P2 P+ \  z: X
例如:线性联立方程取 b=[ 1+ }* K2 V6 l; |( t1 k2 m
: p& C2 E8 h; ^4 g; r  `
                                           3
; k8 d5 a. H! m! p% ^# h! S6 j
- J" s! v( }2 t" u: e. b                                           5]
* x( \8 i2 r( Y; W  Y5 f
; t5 x+ e. y/ ^, I# R( q2 x8 Q解Ax=b方程,用Matlab矩阵除得到
! @: w, b8 G: r. ^! e
$ x* `3 ]1 Z; q+ B3 n6 Kx=A\b7 U+ t6 o; x* u- b2 |" y
, [: s2 i1 f5 w& l. o& ?. I
结果x=
2 u  n- ]6 j; |/ j: N& T% ^8 w. }5 {
0.3333
5 j' q4 E# W8 ~' ?( S% r: I2 E" j
( a' y" Q8 N1 v8 F3 P  P4 ?$ L9 N# x6 C0.3333  J* v  Q; m! |; o  e: I" }+ Y! Q, x

+ }* G4 B! r9 Z& s0.0000
# N: x5 S# i( F# I+ D" x' ~5 E5 Q9 i1 E6 `, ?, z5 A' k0 e
由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:
- t9 D# I4 a+ u  m6 Q4 c+ w+ L: z- c, Y0 p2 ?7 C' Z; a6 Z! _2 b6 H- J3 N
y =
( ^9 e3 p& m/ E3 R5 v* v5 S/ h6 }2 f& R' y+ {$ x- O
5.0000! _9 F6 K5 Z1 W$ A# E8 T
5 U1 G7 M9 `  |9 c/ @- Z, e
0.2857" T3 F# h5 o/ y& J7 B' x

+ b: }  B. r" n; e3 X# G+ P0.00009 t' L+ q2 }+ j5 B$ B1 z
$ d7 n* k$ C) k% n
Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.% ?6 j' S& g  m* W

3 r- m7 m! F- @, N! H" u. D6 t/ B/ c§3.7.2正交变换
; T7 F8 C1 {3 F4 F) b, }“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
' A9 S4 W! S5 e2 I
, h6 G6 O8 Y2 L- D5 b. d4 L; R例如A=[  1     2     3
/ T9 z: G# R. c9 j
! c3 f+ n$ z$ H1 a, i4     5     6
: o9 t* a: t7 W
: P$ H% @- b9 |  I% a2 H$ }! L# N7     8     9
7 [8 ~; H2 K2 L) x! E0 n0 E2 w/ k) R0 z3 B5 v" z0 P- N
10    11    12]# W; q* l' f5 k3 O& V

' U" R7 d% g  H6 K; w, h是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:  `  E' Q$ M* k3 P" Q# h

. f4 {2 l9 J3 _8 P/ D" j7 ?[Q,R]=qr(A)
$ z; l& l& W0 q# g/ c5 ]6 `/ x* `. V5 m2 n: r& S' s! K
Q =' N: r7 x, K9 w
8 ^( K! G: ~& J7 M7 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

1 L- q, E. \) k& R$ z2 w
R =
8 l7 Y5 P5 k9 D" t9 \& N$ ]6 k/ W, @8 x( [+ ~/ `4 j) q

-12.8841

-14.5916

-16.2992

0

-1.0413

-2.0826

0

0

0.0000

0

0

0

2 }+ l$ N- C1 q% O0 @9 X6 b
可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.5 B/ C2 h! |5 Z  {" M) M- c- ~$ _
8 }% k1 B8 \# e5 l7 E% c: N
下面尝试利用QR分解来求超定和降秩的线性方程组的解.
+ u0 A0 i9 {0 k0 n* C1 R; C, F/ ?2 w: [) ]- u2 \, P2 h. E6 y
例如:
- o) W! G3 Y4 x4 ?6 ]0 Q
: o# H1 l6 b; Hb=[ 1
# _3 H! D  R- D* T' v1 S* \& K5 J* O5 u% K7 r/ j
3
7 {' A( F. T, r+ D* y& c1 {4 \5 Q" B; G$ r. W, _+ K0 q. E
5
3 I* Z0 v& P$ D) f* |
- t6 W5 k& D3 L) D* b5 n% ]& T7]2 h. L' y# [% P% X- v

2 E) I3 m# @% Q+ ~" g& V" X6 _讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.
$ R% Z2 F5 f. p! B5 O6 G$ [1 V% }
结果为:) b+ ?3 l5 ^' w4 I6 `

# U' }2 v" k7 c* _1 [# E; PWarning: Rank deficient, rank = 2 tol =   1.4594e-014
% k4 ?% ^9 {) v" D/ V5 j/ L. g9 N. p# e# h0 v4 {- R2 {
x =' f4 s! F/ U- H

: d# `; x% c; P! b! b( Z; p0 c    0.5000
9 \9 p0 A% x6 f5 r6 B$ @& U6 U( d# r/ }& E
         05 n: l  d" e; o- F) Y8 r" j
; h4 S! ]# ?* ]
    0.1667
7 v" |$ B: ]/ n  e7 C7 e5 d1 ^# T9 c, O9 a( W: q4 p3 k, j5 I
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:$ m3 s: ~5 B/ `
  k$ A0 Q, v: a! I% Y; R1 G% c' c( I2 y
y=Q'*b
0 O3 H8 R- ?; t% z$ u
4 m6 \9 q5 y; D  Kx=R\y
9 `* `9 q* m9 S7 y; U' ~* \; x3 }" a( L7 s3 }8 e" Q3 k% A
求出的y值为. |7 Z9 @& \/ M8 O; y
+ ~4 v# ~8 m  O  ]9 w; t& R
y =
* W% ]+ ^/ O9 g4 S) h- u9 f& A9 T( d, Q5 b0 `

-9.1586

-0.3471

0.0000

0.0000


: [7 }. {8 W. p' C. o2 S. |& Lx的结果为/ g" m" a* f9 y7 a# V* i

1 a  P  x3 \4 `6 A# @Warning: Rank deficient, rank = 2 tol =   1.4594e-014- T( a% @/ j$ f) L+ e
" F. n+ ^. |. [% @" v/ e5 v
x =6 `0 V2 U+ }4 ~

# Q7 k( K9 X  p9 D6 S' M0 M: }+ w    0.5000& s( ^' b# o( R# n, u& A
1 N7 z1 {( R# F4 B
         0
; B4 f' \* e' \- ?5 ~/ s6 ~  S* f
, K: C0 o( k  }) H; r& D    0.1667  z* |! Y  A3 S3 i" _) M' L
1 f- p8 p3 W6 A
用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.) U' n( B; r% g7 }1 |8 f& G

+ r6 G8 P: \& @7 Z" V: C§3.7.3奇异值分解# x4 p1 v! a% l) g" \) ]
在Matlab中三重赋值语句
# X* Q% [2 P+ t! K
; Y/ W0 B" r4 y/ q8 @3 t, K$ K[U,S,V]=svd(A)4 I- [* U) l% E0 d' \" O5 B0 \
' j4 c4 S- h8 X% V+ U! b* U
在奇异值分解中产生三个因数:
4 _5 u2 `3 W8 a3 d- R+ }
6 M4 ~* C0 g% [1 ~# eA=U*S*V '* W3 n/ k5 q: ^: j7 w1 T

( P" X; d. x( P8 IU矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.9 P5 _: M; _3 x8 \. |/ R3 m
6 d4 F+ }0 p/ R5 `0 H
奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
2 f- t$ p; ?; N7 ]
! x9 s" X/ A6 F* Y& s$ h& ~; d§3.7.4 特征值分解3 D0 {, a. [+ E8 l5 `8 G/ E
如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.) t9 n2 ?" d* ^4 |  D+ H0 a
& z' A4 o) h2 C" E
函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:) W4 n2 Z0 U1 \7 u
/ p) O7 B# r. n1 L3 U
A=[  0     1
( I; G" H" h- L9 i/ s( w6 x% u! m8 f7 y" J! N
-1     0]# b! I' Q; F# J

0 `1 Z- p! R, v2 feig(A)/ x" s2 G6 d% D5 H" Y7 l. X* g

6 U: \4 {+ T: O! j& X" Z产生结果  ?% w. h8 K4 `  b
/ ?" b, ]5 A2 ]% X: Q
ans =' u, z4 Q7 d+ t4 p
5 W" q1 A: l$ z- f9 a% p
0 + 1.0000i
6 \0 `% e, o/ n* ?3 b5 Y$ N) d# n' g
0 - 1.0000i
. [+ \. T& z9 `
3 C9 D; F+ X  v  o如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:. [* P% l% j% c
& h4 A; F/ P) T+ n" g8 ?
[x,D]=eig(A)
9 S1 y7 m7 D$ ^$ D; ^1 v  n% f
$ T) E) h+ ^6 hD的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.
9 ]1 ^& U! b5 A: B% z8 o0 w8 q. l9 d( W$ s+ l
计算特征值的中间结果有两种形式:
$ t) L0 A& L- D5 P4 @- G$ o8 Y3 x3 i: z* x$ u- y+ Y- _
Hessenberg形式为hess(A),Schur形式为schur(A).
( F/ ]  Y9 H% e( y- i+ B3 b  U$ i# t
schur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).
4 z  L' M5 F) s5 T/ o# d* h# W% j! P& l2 u
如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程
. m$ B& t; a7 s" ]
2 |: _6 {! V5 a! k8 Y" L2 d* e. FAx=lBx- O: ~. r# z' p1 X- V6 D
. V* p$ }, l! V3 G" y
双赋值获得特征向量
2 R0 F/ h: |! I- D) |; p' ~
5 R5 {& H( e- D1 y8 s8 r: a[X,D]=eig(A,B)
! j- i( T. F! B, [) u( e6 W, t5 {& m& m6 ^% @0 C$ m( H: M3 p4 N
产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供., _0 w) h: y* [

' c3 {3 B0 k5 ]. z, _* u§3.7.5秩
' Y. [2 Y8 N* Q0 f0 MMatlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.9 d9 a, {; l7 _- _4 i5 D5 k* h
' C, G8 y' C8 q, ]9 o) s
利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.
& d& O; \( Y( d' I5 `# t  j, |: N6 D, r

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:44 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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