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

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
/ o9 I  z# z# \8 P  X" F# g: Y# a2 p" b7 V6 A- s3 V/ H
§3.1 加和减
! e0 O/ |( @! X8 i/ v如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:
% _6 Q4 W& K' Y5 G) Z& F# }
" {. ^, q' |' J' c1 }4 O$ p. uA=                                B=* ~& y6 g# F- D. y

0 j* P" A, |+ M1 g) p3 B1     2     3                   1     4     7% w0 \0 v9 x' j6 |5 D
, v: T- f, G( z; {5 T, \
4     5     6                   2     5     8
& N9 P: P. N2 Q' B! t# T7 l
( o( ]" n+ j: L* c3 ]7     8     0                   3     6     0
1 y8 U% J/ R" R# J: W9 z1 g/ _+ e
C =A+B返回:6 c; c9 c! W" f  d" J7 `% G

" {: i2 t# W! H- \6 S8 \8 H1 eC =: H! `% z/ T. n+ o7 i4 R
3 j- H  a3 ^% n. U
    2     6    104 X7 n; N# n. K  |" b
% I4 d5 ?5 @  c( P
    6    10    14
0 q/ f. g# p2 B. a, R5 k" |
0 X/ T3 U9 _$ m" J- K   10    14     0, ]+ o+ C# p/ l6 B' Y4 o

& J( A! a  a" @. ]$ u如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:
+ m- M) `3 x: {
. z7 q; H7 S2 O* _. C% jx=    -1                  y=x-1=    -2/ x) S, u9 v* u1 u) C

' {) C# Q" [& H  M# {! F- Y0                                 -17 Y" }7 {1 b: s" B. D
- s/ V8 M$ p/ E' c6 }% E  ]: \
2                                 1
, `$ x% ^7 E6 T% d+ G3 M/ A
! Y7 D) E. H( M3 I§3.2矩阵乘法
$ d: f* L! @0 ]# bMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.
4 D6 P: ^+ O, F" a5 b( @( Z# o: C# ~- U6 F9 Y' q7 o7 H
§3.2.1 矩阵的普通乘法" ~' l3 g6 f' _- g5 ?" j& W6 `. U
矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.! b5 L/ K9 M6 R
9 ]: r2 M' ]8 k) M* l
如:A=[1  2 ; 3  4]; B=[5  6 ; 7  8];  C=A*B,
/ Z. Z- K; _- `9 A) T
. Y/ ^! C2 n6 F6 \7 F3 [! e% O结果为
7 }2 p$ {' j1 U& t. V/ s1 D$ i% F3 M" C6 \
C= × = =
+ l; @; U8 k+ o7 ~4 W4 t9 D' X1 c" t$ ^- i. _, U7 y! F' {
即Matlab返回:0 z) |# `. |0 q2 L6 z% M4 R8 [
2 n9 S- p; r, Z  _6 X
C =9 V' r8 d" S5 \  E# P2 A  Q
- i- ~% x! a* V1 D/ u0 l
    19   22
# {  _8 c& R( A( `* ^( y( }0 v( x' T* q5 D3 K
    43   50
' U6 ~9 g0 o9 [" c/ u
% H9 D2 ?0 x9 @0 J如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.
( x5 Z: S$ k7 ~. Z
! q- S" _$ Z7 V, G6 q, ]§3.3 矩阵除法7 y: ?: d4 @( e- g
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
3 w( l  t, F0 Y9 {' U* ~0 K6 F/ {2 J- ^3 |0 J3 d. ^) O8 M
通常:
, V8 |& g6 u, O& @! p1 ?+ X' q8 D4 b; n+ h  m
x=A\B就是A*x=B的解;
3 |6 q$ C  L' K  A2 R5 |( A$ [1 r! v; U" I2 G0 ]+ ~  y7 ?0 z: v
x=B/A就是x*A=B的解.; ]) t: Q! Z3 L& e6 f; P/ t

* s5 u( l1 U' j3 U- _( j3 H当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息.& c4 t$ p1 h( v3 b  ^0 C

' s5 M, d) [2 p4 g( N& y. Z如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
0 c! X' D0 w* z& U: u% U9 m
5 v: O+ F# v' B# \# m$ q右除B/A可由B/A=(A'\B')'左除来实现.
% d0 N0 k: U- `/ X& ]8 B2 [7 L3 J
8 [2 {! T  v% [3 v, l1 f) T8 l§3.4矩阵乘方4 t" e) |/ [/ ^) B4 Y& y- P1 m9 `
A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:
$ o& {7 K6 U' ]* s6 t2 a  q$ i! D* J- _% {
A^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)& l: u* J6 N  E

! z  ?; B3 Z( D; t) a8 {, p, y如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.6 v* S0 K6 J. d

; Y# T6 z! Z" ^- [" \. R§3.5 矩阵的超越函数# V- O, D& F& I! c; s3 r
在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.
2 H* U6 m2 n) A  D! Y7 E  b& q* @2 O/ L, v' B
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:& }4 P% h2 v9 u  {5 g

- Y& H$ _: k% T" i7 K8 |expm           矩阵指数- ~! @( u2 c" g+ z) i
) G3 r  ]0 ~1 ?
logm        矩阵对数
6 P) \0 d5 j7 z/ c
$ ?% W1 l$ l6 T, [' N( l, Isqrtm           矩阵开方
, e) s5 k- @. G* ~( S. S1 e2 U; l4 J/ L1 @  r( f& B, n
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册.1 B% f$ m: K9 Q+ U

% n7 A( E, H6 w. B9 h" ~§3.6数组运算8 B% t' |5 v' F. \1 D9 N
数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.7 H$ m9 v. `9 K1 m# T

& |$ V. v8 R* |2 d. w. i§3.6.1数组的加和减3 @( b: l3 s7 @
对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.; K$ ~* g" I1 z/ F& ?

# I- |# F; P5 A9 v6 }9 Y- k' Z& W§3.6.2数组的乘和除
6 T2 f6 j3 G. u! |" A" u数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1  2  3]; y=[ 4  5  6];
- [' x4 I$ Q2 D( ^3 |( y' J# v
) r$ A- J. w8 m% L- e2 G9 |计算z=x.*y, x% ~# T3 }! Y

% C, Z% n: \: D" u, z4 E; @/ R8 ^结果z=4  10  18
4 @8 W1 V  a; a" F5 I# g& M! ]( [' `& ?. E* e
数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.4 _6 m, d0 r( m+ z( X9 i  A
6 M: x( y. x% ?! ]% T& c
§3.6.3 数组乘方7 P" _5 \/ b- v
数组乘方用符号.^表示.
: j) \4 Z; H; s. J7 j
9 A1 g3 D/ t6 J, O; B1 Q) m例如:键入:5 S% M7 T9 S3 R% }1 P

/ x6 N; s9 ^/ jx=[ 1  2  3]3 U2 G) ?2 d# C4 \
  I7 k+ y5 Z5 ?; q; c6 l; t1 _4 e# Q4 O, s
y=[ 4  5  6]
$ V6 s2 H( U! r) T, v
* A9 V+ y# w0 U1 W- ?( I7 t+ z则z=x.^y=[1^4  2^5  3^6]=[1  32  729]+ u2 X) H, K9 `

/ q" ~8 v) }# {# ]6 s/ T(1) 如指数是个标量,例如x.^2,x同上,则:! c4 u0 s7 R9 p4 m
+ [. C9 Q- V. g9 f. u. H7 j7 k! b
z=x.^2=[1^2  2^2  3^2]=[ 1  4  9]: [- W1 a3 n/ y. T* h

% f5 p& ^+ F, L1 q(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:' }: A+ k9 D$ O- H. n
) Z6 O# H! H3 s8 t. M' H
z=2 .^[x y]=[2^1  2^2  2^3  2^4 2^5  2^6]=[2  4  8  16  32  64]% I& }; _( [% g% i6 R

7 r6 g) X" y% S* s从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.
  R9 U! _+ N8 K. c: b- R) s! q' u& [( R+ Q, _2 f# T
§3.7 矩阵函数
8 H- I* _$ g5 [. c; yMatlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:
1 ~$ h; X9 ?2 A  \# @0 N+ v( h0 E6 y0 p& Q
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.
4 c+ {) _$ j8 p$ W
8 X# v1 O: Z! Z; a6 I0 _§3.7.1三角分解; l! D; C( o  j+ ?6 Q0 }
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.
! Z3 ^3 k$ ?7 E) B
, J  p2 q! _1 @- B1 Z& q: w1 U* T3 Y从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到./ V/ {1 \. G& e4 e2 Z
9 S$ s2 v9 |: r1 X' ~. m' B1 v
例如:  ~- r2 L/ B7 k, W& j

& k! u9 ?. ^4 W7 [% DA=[ 1      2     3
" p2 C. Z9 z, K, b  @
; ~. R2 b! V% |, q$ d4      5     6  x7 c# c8 j) P6 K& Q4 }0 h, S8 H
; |) X% g7 D& @$ l; N& ?
7      8     0]
' A& H6 K* F$ _; ]- F
8 u% R4 ?/ O& [: NLU分解,用Matlab的多重赋值语句
) I; ^& h6 T. s. B8 O" h" D- A& k0 d1 P3 R5 d! ]/ p8 r  _- S- N
[L,U]=lu(A)3 V7 a  v! i4 q

" [% s1 d# o* f& z得出
; i3 W+ h: S# f. x" \/ e6 g/ ]; U/ ?' U; k% X$ j  X$ z
L =
9 y9 g$ u% l- w% @. M' h7 i! H/ J& r5 W! b

0.1429

1.0000

0

0.5714

0.5000

1.0000

1.0000

0

0


9 r# m% w* T0 C$ NU =
1 l" ?/ }" a, p6 `! n7 Y" S! d' g9 J% f. }

7.0000

8.0000

0

0

0.8571

3.0000

0

0

4.5000


" |8 N/ D# O3 @% q" L5 T注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.
; h" N. V/ T/ k7 E$ Y/ U( b8 A. _# E2 M
求逆由下式给出: x=inv(A)4 f5 f1 T4 O# @

2 @7 f& f# I: c' `/ I: T; ex =
" }* v# ]6 x% S! y0 T" X( t
/ `4 H# n5 H% m! f% r

-1.7778

0.8889

-0.1111

1.5556

-0.7778

0.2222

-0.1111

0.2222

-0.1111


; h# u( f) A! t9 V# m5 V" R从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:1 B/ Q% H$ T( t8 Y& n! V0 ^

% H# G2 d5 N# j8 _5 Jd=det(A)* W4 Y5 K7 t0 S; M, ~1 M1 Q
# E% B3 k1 R! G- r9 h4 r
d =1 U2 I$ _: E7 d; @! Z

+ U  P& i, \( @) ?1 t27; B; j- b9 e+ o9 `3 c

# N5 d' T2 f2 @  }+ c直接由三角分解计算行列式:d=det(L)*det(U)
$ w: m# u7 J2 W  b( @" P/ g, `% `; r, i% B7 M
d =. C4 [* D, l5 ]
, k1 i% u, M" q& t
27.00006 W# I( F' q5 L7 R

2 z7 V3 v+ m8 E. x/ _: a为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.5 D6 y# s# I' s4 H4 ?

: ?: q4 |9 D6 k  ?$ J2 j0 {例如:线性联立方程取 b=[ 1
6 e+ C( U) b# V% H
3 z5 I. y- P, d6 p$ X                                           3& A; w* v! Q& q, @4 }
* g0 k4 ?2 f) ^* O  F4 \
                                           5]
) Q5 K2 T( T' u5 v& O; z
2 K7 ]# n  @+ ]" O  l解Ax=b方程,用Matlab矩阵除得到9 w0 Q: \8 Q  P5 }) g$ q

) Y/ J0 Q! c2 v+ R$ f) ^/ k2 kx=A\b
; `3 o# ^' X$ n* z
1 e) A2 s  D" A2 @6 W. W) c4 I结果x=; k! Q' y$ ^# I. ?& b# G$ }1 y
, p" M) s. x' f5 A1 q
0.3333& z7 M4 L9 _% }  {- O  x, [
% Z3 P5 k, [, X
0.3333
/ \& l/ Y2 c' v! v
; G. U( j) {! a8 \0 u! ~0.0000
0 a  W( C* I2 A
: e# V$ G& h7 y由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:
% v% E- k) v( x1 {, k& D
( O" o5 x! G, ry =( J) X" |) G0 c1 ?7 u" Q; K

6 @: X! [2 s, Y8 L8 M. J5.0000( K& u! q4 {8 s' v  p; P# e/ k

" z0 }: Z; f, `( k9 E1 M0 |0.2857
9 ~" K7 K1 z6 R! B* C
* N1 U. M0 o+ Z0 A5 Z4 p0.0000) l( g  y( N! |% @" c
" d& L; o* `, F& R1 t. u* A
Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.+ g6 d- P; s" b/ `4 D; V
8 D, I; z# P5 c0 N4 ~8 B7 M
§3.7.2正交变换2 r# a7 s, S1 b# t
“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.  J) x- x/ v& O) N2 E

" h' B  D$ g6 }例如A=[  1     2     3  h& l4 @( ?7 I/ k
6 |. E" o$ K& S0 b
4     5     6$ o3 S1 b7 ?( P* {( [  [
" P& o0 ]9 S3 Z  I
7     8     9( w; q5 A7 |' S% C* B

8 c/ N$ \9 O4 `1 A3 m5 I10    11    12]" W' \5 ~, d2 s" s! Q, @( y
! \& `* ~# W) H  Z9 Z! w
是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:- u, v; c$ }4 d
0 p( \- Z* X9 X  v) K1 V
[Q,R]=qr(A)
) b' O; N! c6 {- }! s( J
- Y+ k' G5 @0 p( Q; ]- `Q =
$ U) U6 Z8 a! a" J# I2 D# k6 G  N
5 v5 x/ L8 w2 l) R

-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


) ]; Q' Y) ~6 GR =
2 L# h+ Z4 K; N/ v$ b: d( V  v( P# b, K9 `

-12.8841

-14.5916

-16.2992

0

-1.0413

-2.0826

0

0

0.0000

0

0

0

9 D7 w( b3 }% c2 v" F9 z
可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的.
2 W2 u  V* x( Z) U4 r! O6 j, j+ G' s; q
下面尝试利用QR分解来求超定和降秩的线性方程组的解.' q! n( n- c5 w+ S7 D8 m. ^
8 U4 X$ _+ `3 b) g% H4 z& E
例如:
( m6 s7 Z( i( K! @  |9 Z. m# R1 q5 G7 |
b=[ 1" V. I# @8 d* y* @' U( h

! t4 J/ B! O* I: V3
  e) d7 _8 o0 @& Z8 y( i" A! ?1 g7 R' E1 \7 y+ B
5
+ E- Q6 `4 h0 r  K8 T0 P
* N$ Y4 N# O5 h; n/ r7]" R/ i8 ~" R* ^# U2 L2 P4 y- z
. l+ i! P$ G) y% h4 H* j
讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.* i; P( m8 i( U( d$ ]# `. G7 N( V, }

: z& M3 Z3 O7 ?& M; K结果为:# r5 d' d/ s5 \" x% @& `- i
1 M) k* A7 U& b. @7 p/ X  Q
Warning: Rank deficient, rank = 2 tol =   1.4594e-014
3 ?9 P  B8 V0 N* l3 I: d' M* Y( _6 s* y1 Z# Q0 n8 L& s
x =
2 K$ m& r( {" n- b9 ]& V$ w0 Y1 Z; C( k( B9 N2 B' N- H  [, Y
    0.5000
' R$ _" H& F0 z4 c- E$ u0 O9 C2 ^* Y0 c( y- }  n/ l; E
         01 p; f. s/ f3 G& J8 ~7 }

4 i3 w, k) d: D6 H    0.1667* |) D4 L4 F; v' s8 G% W2 ^  v0 c

" i6 S3 L. R6 d/ t我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:: f6 b( J6 S8 i' g8 P
" e( @) z7 r' Y
y=Q'*b# b5 m# O# O8 N3 o

4 C9 _2 y0 p  E; m# Ix=R\y
  ^3 A( Z- Y( ~- _5 c3 j! z( b0 S& e  V
求出的y值为
" Y/ Z2 p0 X: h- {. O- j8 R- u. M- p; e/ O8 m+ G* Z: P
y =, n2 B  L- Z  _, L  i

  o4 p: N% ]* @

-9.1586

-0.3471

0.0000

0.0000


: j, Q3 S( b4 x/ Ox的结果为
' [) f) P! s5 A# N) k! {" [" X4 y
Warning: Rank deficient, rank = 2 tol =   1.4594e-014
  k1 p5 E# q+ L( d& z( a$ S0 m8 f: L7 i
x =8 A) ], K2 m' C6 ^7 Y  s( F
6 h# C- J& M. q6 |) b+ L) G
    0.5000
2 ]. J. k  ?8 S* x; i2 U! b( ?% j0 H0 O/ |
         0. x3 ^1 }9 @, i- \

+ t, u' P1 G$ C! g+ F/ ^" y/ n    0.1667
3 k& x# |; w1 E% M1 L1 g2 ^2 f# a
6 r' o- Y3 l5 N8 F用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.6 l; L: Z3 E- }. k7 y) n
" H7 b  Y0 J8 f( }, M: [$ i
§3.7.3奇异值分解! a2 f7 L0 |' a) A( B
在Matlab中三重赋值语句+ f3 [1 a; |: w. R

; ^, L* A* u" ~3 L4 q7 E  }[U,S,V]=svd(A)
5 G5 w, a/ V2 ^  p1 Q/ Q! h4 ~! r1 k
在奇异值分解中产生三个因数:
/ m# h( O* ?/ ~" {) w# U. y: F* v2 t  L* @4 J  [7 l' Z; w. n7 m4 u
A=U*S*V '
1 m- T" [. F( m! x
# s; Y, C  D' p# N$ S" {U矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.8 x* `$ b5 w: n) m# F( d4 q8 }

+ p  F+ p/ l' T+ ^奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
3 x. J6 e6 K: h7 r6 v( D
' q( ?" ~% i' u1 U: w2 m§3.7.4 特征值分解
; C! L! ?( r# f( N# P如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.9 w7 P! n! |. O- e

2 S; B& v; ^/ g* M2 H- f8 d% o, n9 k函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:8 e- D4 B: |8 D; l8 @) Q2 f

+ A: o' \' ]! o+ O& O( C+ JA=[  0     1' q) S  r  U6 u9 C7 r

( C) h; K& a' y7 M% v-1     0]
" x- {# k' \3 H& |; R( k$ O5 Y' R) d" x) a2 U# |2 ]1 S6 u
eig(A)
' y+ S5 Z: a' t+ G$ E5 J9 E( s" d  {% m( ^1 P/ w; D
产生结果% J, b# w% w$ t' s3 p% l; G
4 t0 w& v- v& k! O. P+ D9 }
ans =" M  T8 Q) ~4 l# B

- n; W& N& m- k2 Y+ a$ b0 + 1.0000i
- _+ H0 ]$ x$ c) Q' F& U. s, n& Y7 E8 f8 y2 [
0 - 1.0000i
" w! Y; z) b$ r1 D6 a6 i
# Q) \0 m* q3 U/ E: Z' @; \# z如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:
2 t, Z: i4 F) D6 p$ N5 I/ W4 m
! \2 k. m- o: ~7 B5 `[x,D]=eig(A)# }& f: B, C; |
5 l; I9 s/ K& M
D的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D.
2 U: v" k  x! j9 d; t1 R0 F- E7 G8 |; i% O& B) M1 \
计算特征值的中间结果有两种形式:- p' P: N! K+ `- j+ N" H+ d
, K  W4 F. l! p
Hessenberg形式为hess(A),Schur形式为schur(A).& k+ p# Y# J! }9 H6 r8 U4 H

; i5 H( w! C" \. lschur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).
; I! @8 ?9 G% \( F8 \- ^  v! B
, y5 e' O: @- b, b& }2 K! c# {如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程' T8 a0 z  o+ u. `" a4 V. L! P( I8 i

3 s% J0 F6 C8 b$ l  n9 O9 \Ax=lBx. ^7 R: r3 G) Q! J2 h9 `
3 w1 L2 r# y3 k( z. [" I
双赋值获得特征向量
, ?: l/ C  w- z1 l/ D. [# K/ H2 C5 Z. H" g
[X,D]=eig(A,B)* U, H- U5 O4 U: X' X

" |( x* o3 A! m" Y& ^* e产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.
% a( H  D) I- \1 i. R8 G
1 H& l6 \, z; G2 V& V0 X0 l, B§3.7.5秩
! S5 I* a0 V6 z' a; l+ Y5 [Matlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.
; p+ e1 Q! g# q9 S3 e$ i" R/ j0 U/ [; u, M6 B
利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助.5 `1 a& Z- d! Q$ z# K3 P
- q2 m9 J( H( `2 T( l

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 13:59 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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