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

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
4 t1 r9 k$ J8 o* |* i* m$ e- s+ S
§3.1 加和减2 I" g3 G: {% @9 p% ?
如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:. m$ l8 y9 u: M- t+ X% p" V7 o4 }
) e: \! H7 J2 x' Y  B
A=                                B=- k" w- u, A9 m1 Y. I6 X

0 U" y  Q9 W8 h1     2     3                   1     4     7
1 R9 f3 o0 F: q
6 }! Z1 G7 \8 \. O9 n- a4     5     6                   2     5     86 e& E  M9 p3 |) T) R/ X

* J2 m3 Q9 r% V' K6 v7     8     0                   3     6     0
) Q: P$ |5 d* Z, D" y7 {9 H8 X. n% P( @5 N5 N! |" L$ U/ {
C =A+B返回:6 Y0 w- z5 C: x+ j+ ?  V* B& t$ y5 [! \+ ^
- l' N9 I* G$ x" G% }4 l
C =
  m. h; z! u$ x  C' U
6 ^% j1 z2 b9 G7 T; y0 L7 H1 m# {    2     6    10% Y$ ~# y5 O3 u" Z: o. E

0 a  H1 k6 W, e    6    10    14. ]- G! ~! A$ ]9 T7 h; ^5 Y

9 z! O: e" t" B/ c9 k; O: u: X   10    14     0! m  y# G( x- E* |* z* w% [$ f' q
, o- Z/ H( t$ a$ I5 ~  C
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:
- v7 s1 M5 `$ k& |' C8 G
7 _7 Y0 B5 s& Tx=    -1                  y=x-1=    -2
. n! a0 q1 r4 c) ^4 L" p3 ?) U$ P$ m% v. f7 c: \" P7 J4 Q
0                                 -1
$ l! j7 y/ t- o2 G  u% n
( j3 c' O6 h0 k2                                 1: V! d$ Y; f* I) }2 s

/ d# p  Q; Q0 \3 v§3.2矩阵乘法
9 e0 {) j( O  C# B& l# k" ?# EMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
6 |( M' D% t. q
& Y' H  j& D- g: x§3.2.1 矩阵的普通乘法
6 F4 d' M4 Z5 \4 S3 @% c矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.7 f8 V2 G4 `+ `4 x6 M
" D* V  W$ l. ]  ]# K3 a) @6 x
如:A=[1  2 ; 3  4]; B=[5  6 ; 7  8];  C=A*B,
9 t1 S. p$ M/ n& |% Z( ~# _9 k2 o: M0 i
结果为6 S; j+ J9 v0 w
( C: a* E- U5 U" p, c* F
C= × = =, Q; v& P7 c; l+ Q$ _+ M3 l/ D

' I* g  x( H8 ^! S2 b7 l& \即Matlab返回:
$ K; a* A! |+ u9 b5 k  C" u1 U2 E* C3 {% ?. x3 i  z- j/ }0 ]5 C
C =
2 A6 o$ z- j1 w3 m; p! o" h
/ M' i( F* j! l( X    19   22- x, Z+ u3 T& u: Z! n  h! L
0 P( M  f' s! E# ^$ W" d
    43   50# D+ b$ `/ H0 O) N( [3 n
: K9 r. _+ ?& l0 I8 _3 Z% j4 u
如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.3 i) J7 I" r" z* Q! t# @

( x& |# Y3 p( v  Y: [: E# c3 v; ]§3.3 矩阵除法- j5 ^$ K- m$ b9 n; ^
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
4 ^% h/ o% g4 w8 z6 h* ~9 }. p" h, W5 S' K/ A" Y; i
通常:! j- {- o$ m/ C6 p6 Z+ T' c
6 p1 D! i# @1 Y
x=A\B就是A*x=B的解;
8 B) R% c' t9 \4 O: @$ |' N; T& y3 m
x=B/A就是x*A=B的解.
9 I' t" N: k6 U* }- v$ q! R0 V5 ?" N. W% o7 t  h7 t6 _
当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.6 N: Y. F$ P. x, i6 P
& c! n( s6 Y, S+ X9 @+ p! J
如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩./ b$ j0 }5 _6 }' _8 m
! P' ~- b9 p# b! b9 m
右除B/A可由B/A=(A'\B')'左除来实现.
6 D2 A) D# l+ F  v" S- x  f) }, P0 i( \
§3.4矩阵乘方
! i: |3 Q! h1 P8 I8 A  _A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:  v% I6 U9 P" `/ `+ {' v

% F5 X1 q8 T9 Z. q/ R1 JA^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)
" G8 r3 f3 N6 R1 J6 N  |( @- h) _5 H" J% Q
如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.: m3 Y4 Q$ [, }; K
; |" A# p, s7 [2 P
§3.5 矩阵的超越函数6 }4 B9 z, K& c+ _' S
在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.7 e' k* H/ v6 N" c- X7 I
# i; s' _1 v. O, w9 z# ]
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:5 u, B! e; V& c

# f1 H1 i' T( h# y: n6 {% Xexpm           矩阵指数5 L4 W, |  F) H# [& j0 }

5 Z6 n( i0 \: c8 S- r& c' t1 [& i2 Nlogm        矩阵对数# M5 k2 g/ r4 k( E

' Q  @% t& ]( @/ Q$ E; }sqrtm           矩阵开方
+ O9 r/ X3 y9 M. r
- b$ v5 t) e6 Z7 P3 ^, `4 K3 D" C所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.- N. z! f% L" ]' [
2 G7 X9 w; L; e2 s4 W% B9 L
§3.6数组运算1 V2 V, v" _* y1 q5 u
数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.5 u8 k8 t3 A- p6 D

0 W; k8 V6 \. L: y# Y( R§3.6.1数组的加和减
" T, L$ G# W+ f1 Y  _+ i! I对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.; z) X8 Y2 S3 g  U: ~5 S6 u
0 I1 V% W& N+ U# A( O' C* c$ S% P
§3.6.2数组的乘和除* a: L3 t' \! _5 y  Q" m- R; {
数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1  2  3]; y=[ 4  5  6];
, ]# ^9 n1 t9 e4 y9 p
3 r- y( p3 g. ?, k& F0 P3 `计算z=x.*y
6 y/ h1 R/ C  F0 Q9 A9 |4 n& o/ D$ M) B' p
结果z=4  10  18
! `3 Z4 U# o, M6 q2 N9 \8 u+ t# W4 `, |, T9 N, V1 a- F1 O3 ~5 a# a
数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.# T- i, J- s+ K) S( d4 |. u
+ q$ {' _9 J' h) R9 O
§3.6.3 数组乘方
$ R; R: F  h+ ^! q数组乘方用符号.^表示.* j5 D, Q5 v8 W5 e

1 I4 Z6 H3 Z, r例如:键入:* P* O) j2 L5 ?( A. X
4 N$ h& z/ E# P$ P  ]
x=[ 1  2  3]* C2 @1 x3 D  x; u1 g. V# f

9 g  Y& S# Q- J- b) S$ K  ?y=[ 4  5  6]
0 [* O9 j1 H4 }' V
6 n. I0 \3 \! {: X3 a则z=x.^y=[1^4  2^5  3^6]=[1  32  729]
. s, u$ F. r/ Y( v
! g) e: D9 w- V2 v: n) ~# w) m. P, D) I! Q(1) 如指数是个标量,例如x.^2,x同上,则:  M7 ?6 f% @  L" Q; s

4 _/ N5 m: |* V' H( z. m4 xz=x.^2=[1^2  2^2  3^2]=[ 1  4  9]+ D# J: Z7 h% r

8 V. {/ o; j& s5 x(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
+ L$ f  F  D9 ~" Q$ z* ^
+ Q: g, |8 Y, Y& ~+ X2 iz=2 .^[x y]=[2^1  2^2  2^3  2^4 2^5  2^6]=[2  4  8  16  32  64]0 A4 Z7 n" Y( T$ B- ]$ m4 {

& @5 N. i! b' Y6 o4 @; Q* ]- j) {从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.6 J8 d3 F: g; s9 f. H

% U; _# |6 m6 ^8 r) D§3.7 矩阵函数
& d6 S4 a( A* R$ HMatlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:3 V5 b3 ~8 ]: H) T4 `1 X

# C! c1 b% b0 X: @9 l$ T( \7 W' H. R(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.
. e& Q" w# s. k
2 `1 I- S' Q) O§3.7.1三角分解' N; f6 A$ C8 y
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法." l' r7 \: }6 U$ C! \: T# p

( p; v$ _- I( @+ A从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.4 N9 L( p3 u$ Z: t( b: a2 ?
4 i4 y1 x0 K( q  g; R: ?  D
例如:
8 \: @9 ~0 @: R' n7 a4 x
# g' A7 x3 [: ]A=[ 1      2     3- O2 b, ^: _7 ^: l8 K# o- \

1 V/ Q1 y# \. e1 S' a7 u9 G4      5     6
/ B& \( ?+ k) x5 [3 J# d
) f; _3 |9 u1 e% Y. k; B7      8     0]. g# |* Q  w3 k, n

3 [$ H7 Z2 }; O  L4 v) W% t& oLU分解,用Matlab的多重赋值语句
0 f1 o; d4 w8 p; ?: L4 }6 |
$ H: a' c* v) P' G0 v[L,U]=lu(A)
# I1 |) P+ u3 s1 \% e2 y7 ~1 @, S  N9 E" e2 p& m% U
得出
' g  h& f2 U& z7 C% t* i( i" @2 X3 T2 b! t4 f
L =
% O) I7 q/ x% R  ^; G! B" o1 Q" ^& ^1 G" X3 f1 f5 i- R

0.1429

1.0000

0

0.5714

0.5000

1.0000

1.0000

0

0


. b% |- b/ ]  P; o! j( CU =! G- c+ b4 z6 n, o# o
/ ?+ p7 L! e4 _! a6 v8 B0 N

7.0000

8.0000

0

0

0.8571

3.0000

0

0

4.5000

( B# [# J8 Z* a# ~0 S# ?) a
注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.
5 |  l2 Y' p6 n; d# K
8 F9 I% p* Y$ L0 V7 y# ^求逆由下式给出: x=inv(A)
# X  {2 ]. ~$ D' J  V: p, q( ^/ P9 N: a* a
x =7 ?3 z/ O2 b0 `; }% T" ]

2 m7 `* {) M: j

-1.7778

0.8889

-0.1111

1.5556

-0.7778

0.2222

-0.1111

0.2222

-0.1111


. i) z# L! E3 F9 S6 a从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:( Z' f) C- J2 v* R! v( k
8 L  O! C$ N9 ^6 f1 p* V. g
d=det(A)
8 ^( q0 B$ S/ r& e+ i
7 n7 X2 p- R' k4 c7 C& Yd =4 @* F+ P$ c  i9 ^
7 H3 ~5 x6 b1 U& q
27& [# f# B/ i0 ~" S4 d# z' y4 h
  `- k- B6 I. [* B  n% t! ^
直接由三角分解计算行列式:d=det(L)*det(U)
8 E* O. B' s$ m# m' P/ Z) |, T- N( ^5 d1 C' d3 A
d =+ b1 [% L$ C) c, q5 W! i

7 s2 ~+ y# E* k% q, U27.0000. P' }- K# o4 A5 O+ n- q$ L
, b: s! |  Q$ Y0 u, H9 }; F
为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数." \/ E9 a! I2 F
$ c+ b' t/ u4 V. s
例如:线性联立方程取 b=[ 1% x$ v7 k# C  V+ z

; M7 _' f. w7 d( k' y% ~                                           3; {5 \: V5 B( k0 b& t7 R

1 U- W- U* @( @4 v                                           5]
* b" C; Q" G% f& b* J* E# T$ x' f5 a+ M5 i; s. D2 {
解Ax=b方程,用Matlab矩阵除得到
1 a" [: K" T  \: M/ U, i5 R- A; a! s1 P
x=A\b
3 i' r& ~2 S4 |
6 s2 X) T. b8 j/ v3 J- Z3 T. H结果x=
$ z) J3 b: W1 [# S' ]
7 C, F6 ~( l  Y4 V: o, f1 a. M0.33338 V4 H- \5 _+ i7 u6 R& ?0 v% c

* s. ~3 u  b4 z" j0.33338 F& g( e. d0 \6 y2 Q7 G4 c' F

& F: G3 c( p$ s: g6 h- T+ R. Y0.0000! Y3 y* q5 R( F  e- V

) G- N% N7 P5 Z* J3 F  Z9 a由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:/ D5 w! S  {& T% q! m
8 k2 L9 _5 |* J+ z+ ^6 H+ W9 W9 {
y =$ z7 U7 U6 @0 i2 k& w6 `8 [1 l

' u7 N5 Y3 H% h0 v1 y; @, y5 E5.00001 `& k! y+ T$ y% H; t3 U9 J

- }' S- e- a" ^5 ]* {0.28575 m2 l( q9 B7 ?" p, T3 J* G) g( B
9 c, Q0 P! \/ p. I' `1 w
0.0000
; d) b7 {0 N% `* a$ ?
$ q' a7 G* n6 w+ Z* ^! L" u! A2 {7 S7 bMatlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.
" G( K5 T' {2 L
' ^3 I$ N* R! i  O§3.7.2正交变换
' b! U; r% w/ J% P: j& t“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
4 ?6 o6 A: g+ u/ G. Z2 t& x3 s! U% Q. |
例如A=[  1     2     3$ \3 O* d0 J  b& {
- }( k$ e- Q. {8 h) Z, j
4     5     6
" b( q& }; g9 ~0 Q
6 a2 o! Z; E; t8 w. D7     8     9
2 e  b, E2 h) ]9 f+ b" G* N% d9 n* D) F+ S# e/ w% [2 C
10    11    12]
( r9 b% d5 l! @  j; U+ T8 x" q$ e3 e2 V. p8 N1 d
是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:
9 t) U1 s+ l6 h. ^7 q7 X' `6 d8 ]8 L* m
[Q,R]=qr(A)
, X( P6 K) Y' S" q+ H4 h2 Q1 t; |# m- p
Q =
4 |9 [1 H  o0 L5 o' W9 p2 L
# F1 B$ A7 [% o4 ]* q+ x( q1 R  I+ i

-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


% h- X2 ^2 B$ u+ k: Q* F8 F* HR =- z% h0 t2 b6 |6 B5 o' f

! @3 j- u* Z+ N" s

-12.8841

-14.5916

-16.2992

0

-1.0413

-2.0826

0

0

0.0000

0

0

0


  a9 c# z8 N3 c1 R; P" w, B- h- }可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.! o5 W9 c. f. P4 \+ C0 U, W

1 y: y) }; l4 p) U, \" G下面尝试利用QR分解来求超定和降秩的线性方程组的解.0 O4 E1 T1 ~) r/ s

9 K& q% F* A. u例如:
6 h/ F' G; b1 t: X
# m7 V# f7 U5 Q0 e- Eb=[ 1
# g+ p% h' y' I& r- B' s% v$ \% f7 i+ l  N0 k  H& R8 }" u( p
32 [- _  c" o( c/ B

# K1 d1 z- z0 Q5 C+ w* K. b! n56 B, d9 q' m: K* x) r% c7 Z- i& @
* s, `- |. P2 F$ v7 t
7]
$ X4 D' T2 H) ?  [" ^5 ?9 z
4 f7 _) R, O" e6 Y8 x1 A+ S讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.
' v' x, j4 y8 b9 O3 M# _3 i) c' @4 _+ h5 z: F6 N9 n9 I& V
结果为:7 i( V$ k7 m  e" o& z" a, C; N! ^

% U8 F' u* S# [Warning: Rank deficient, rank = 2 tol =   1.4594e-0143 P  n* w+ r& v6 c
; w" _6 m+ N3 x- @0 T" S
x =
) C0 C7 n7 c1 ?5 t% F, c7 \
/ V/ u4 ^2 I9 I) F% t$ y! b    0.50002 h8 c& a6 U% X! I8 R" z

' J' R$ k% j* F3 N# }* t* i         0
6 k' P; q7 `9 u. B: o+ ?3 {3 \* F9 j: n& d: S
    0.1667
0 Z( P4 ]9 |% R3 U" h* Y; a. U; v5 U: N6 I) R8 n3 j" u
我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:1 r  G+ k8 u* U

, W# T, u% U+ B2 oy=Q'*b
0 Q6 F, R6 ~* q7 t3 b* L* B5 B, r+ D
x=R\y
& v' n& a2 W0 ?& o' A* L3 b2 b% O- p) @$ ~8 m/ U' T) I. m8 y7 J
求出的y值为1 z  ^1 \1 d* M1 {

0 q3 j5 q$ H! Q3 O! V' q6 ly =! Z& T. u+ h- r  h
! c7 R3 s! C1 W- d* r' f

-9.1586

-0.3471

0.0000

0.0000

! \6 t9 `9 A! z  B. a0 u
x的结果为
/ u, N& T+ t) u1 o7 w3 a  q* j9 n7 u: F- k; t8 x! _
Warning: Rank deficient, rank = 2 tol =   1.4594e-014; y! S, a6 K7 b4 C; n! O, o1 a

& Y. T# k8 b" p# x) w& A6 N. G. ex =
1 N7 ^( H# ]) A
; _8 e0 h, `" H3 C    0.5000  h, I8 J# `% ~

. L: n6 k& s# K0 g  `; z         0
% }# ^( f( r9 I: P
9 z/ Q' g9 d" M$ R6 m. {! P! `8 `    0.1667
0 M9 s* q" W/ s1 w
$ ^) z2 P* F+ a# {9 `% `6 P用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.
) S/ l! D% t8 n  o+ _! S: g! }- F6 i9 t0 p% A: y7 M/ U6 C
§3.7.3奇异值分解" G& R/ W! b4 T8 N2 v
在Matlab中三重赋值语句! F" |1 }6 [2 g1 y$ s1 x+ w

+ c( ]4 M$ h% c" N) m; _[U,S,V]=svd(A)
8 O3 M# G' }+ F! v
+ H% _# k0 o9 k2 L: O在奇异值分解中产生三个因数:1 G! D6 y* n/ ~2 W- G+ o- a$ _9 l; a
+ R! {. `0 H; s: n
A=U*S*V '
1 k6 v  U7 D3 B( ?# H
( g9 J) f& z: t% }- I' y0 fU矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.
8 n6 `# J6 K- a7 k9 D1 q) N. o) P. P! n: `( O% y
奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
7 R4 f+ U4 Q( {) p) L
) e9 U6 L! T- U3 U. f. x/ [§3.7.4 特征值分解
! O8 f6 W1 A5 i如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.9 P% [" p' z: g  r0 F# A

2 T$ R# v3 r% c' G# X函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:- I5 s4 r' x: }" A

% H: l2 ]. W* k# h) T/ B' x. nA=[  0     10 y6 k* C) B; u, l! ~5 G

: n4 T+ s0 f& S8 v-1     0]2 J- o0 l6 f# X6 U* X$ C

8 v) ?6 ]& J( a+ Leig(A)
1 {6 Y2 ^& @' |( _6 [7 s( p$ {8 Q+ P& G) V" A
产生结果
1 A8 f/ M1 M" G6 g
& m0 G4 [! c+ q7 Eans =' k1 G$ Z$ @* \! w( B

- D: ~  o( B: ]3 t  _/ }+ t& Q0 + 1.0000i
2 x  [, O' h- R5 n, b# [( D. c
* a9 b- \% d: T) |+ l0 - 1.0000i  T; K- ~. b$ ^
; E5 R1 b6 y/ p+ ~
如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:
; z  r$ H( z: `
( v$ L1 v6 }, a. e( c1 k* G[x,D]=eig(A)
3 |: E  \6 g; @" Y# G2 v
& J5 X( {" k# g* RD的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.
4 H, ^3 ~3 ?4 ^+ R$ f- A5 C1 Q3 s  n$ `7 b7 p! l# s7 k- ~
计算特征值的中间结果有两种形式:( R$ E  ^6 ?# B# k/ l3 I% J
+ l& z/ ~5 X9 X8 L1 F, g' \( R$ a
Hessenberg形式为hess(A),Schur形式为schur(A).9 ^9 n' @7 R  @

( k4 W6 Z7 q8 G5 M1 y5 H8 y4 yschur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).
9 M% d3 r& v7 g; S( M" c3 n( g: Q/ Q7 T# Q
如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程
0 U; b" C! ?; ~) b2 @' p' U0 m* |
. `4 @( R4 }/ ?Ax=lBx0 p1 Q8 Q3 [2 V* v+ W8 y
3 C7 B- \+ |: R  G; Z
双赋值获得特征向量& r- ?" t/ ?, F
; U: G: r& Y: Z
[X,D]=eig(A,B)2 O- X6 S/ p5 Y* ~) w: h

% T0 n6 `% `5 @  j1 Q2 V+ d产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供." F$ }) ~6 \6 Y

  X# h8 c# G' o% j' t$ ?6 b§3.7.5秩
7 p6 _. M; J) F1 i2 FMatlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.
5 b; n/ Z+ P: M1 ]! W0 }: ^% j
1 |: B. _( a0 _利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.
+ m( P: D$ T6 a$ r1 J: f1 V# f* s4 t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 06:46 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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