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

Matlab矩阵的基本运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2019-12-16 11:33 编辑
/ [: a; U2 Y+ R- s$ y' J
( s- {; s: ^( @, d: @§3.1 加和减
% n6 Q* V" \# P6 S( k如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如:
. e  W2 d( C" I5 ?, _/ A0 c/ ~5 k+ h) H7 j  z9 y* t  f
A=                                B=
( f- `8 ^* n, w& p$ i5 d3 k( e6 c
$ _$ {) }6 I( E& Y) _" e" H- [1     2     3                   1     4     7; ]. M! f) w" O9 q
6 J  r: I7 s9 N
4     5     6                   2     5     8$ g) Y5 Z/ `5 |5 v! l4 A$ K& J  {

" L6 ~2 c! u) C- h3 N% F; N7     8     0                   3     6     0
* ^3 Z, W* S0 y1 e& x3 ~! [0 o
" G4 ]% n: E5 Q% b/ s; ^0 XC =A+B返回:8 O' g+ x' y+ N" e

0 K; k5 j1 d7 Y+ RC =
# Q( O# J$ z: U, @
3 L! n" a" w0 e: K7 N- i7 e    2     6    100 |: ^; b; `3 O+ d
! B3 Y6 T. K0 N0 E" Z
    6    10    14
# |  m/ d) ~* Y( m3 `4 P
+ j2 p& u) s0 B! U* ]5 t   10    14     0
1 d. z$ v( f! d) O+ S3 q  p8 Y  c/ L  w
如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如:' `2 s' e. b- r* V  z

( z0 b) z/ L6 zx=    -1                  y=x-1=    -2: P# _  Q( W+ a! W* [8 a
, J& B8 }3 `* E6 d4 u# M* N
0                                 -1& _' W  ^+ P; \% v: W: @

4 f8 q$ z5 X6 `! u( w+ r2                                 13 d. S3 e0 k- C, c

$ V0 z1 \0 A$ f4 }0 A4 I§3.2矩阵乘法
7 K* o8 Z% z7 X4 F/ W, H/ f1 rMatlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍.4 r8 v3 t' N! Y" u5 t6 w) T

% j* s2 c' t- V6 L! g§3.2.1 矩阵的普通乘法
# L! F4 t! Z  M/ |矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同.
( E$ k% ?! A1 n: ]8 o; t. C( ~( |6 K" }/ B
如:A=[1  2 ; 3  4]; B=[5  6 ; 7  8];  C=A*B,+ _4 s3 t, W2 d
$ K1 Z7 `& Q" c6 u4 e, d8 O
结果为- H0 I0 t. x# `1 o; Z) @

/ R3 \9 d' A" ?* |: tC= × = =
5 m- w' V* M" |8 a2 a+ Y( T
  p7 h' i" O; h. _即Matlab返回:
6 Z; [% e# u& C. [
1 r* J( [2 Z9 j8 ]) ?C =
8 u4 \3 U8 E% |3 m9 t3 x
: A! m" [; s+ O, d7 H    19   22, r. ^" T& s2 V4 J, |. ^( K

1 ?  l: h  }- D$ ~    43   50
7 u) D  V+ H4 L3 E6 m% x5 \3 Z3 T$ r- I
如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵.
9 i/ {8 i3 F3 V% t9 J7 _; G/ c& N
0 [% m( g# o; K5 e§3.3 矩阵除法
$ n' Q( g3 ^; ]: w3 v; ^在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.
( H2 d3 |1 U0 e9 E6 M. \
0 Z/ `- Z( M; p4 k4 @* N+ V4 h' f# a通常:
- g7 `- }7 p% I! W& {7 T8 ~* U. i* _4 J
x=A\B就是A*x=B的解;$ ^5 _6 R4 e0 |# p1 d' [+ r- r5 O

# U3 p5 y+ V. V* _; x7 k' K2 `x=B/A就是x*A=B的解.
8 a: r* b( }  ?& c/ ~* |2 a: F5 n" W5 z6 @% \. ]/ [
当B与A矩阵行数相等可进行左除.如果A是方阵,用高斯消元法分解因数.解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息./ a" K' Y1 r1 |) n1 E0 A
* X' i* q4 {5 ~# D( [$ B
如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可以解决在最小二乘法中的欠定方程或超定方程,结果是m×n的x矩阵.m是A矩阵的列数,n是B矩阵的列数.每个矩阵的列向量最多有k个非零元素,k 是A的有效秩.
& [1 {# X% T. v! E& o+ H0 a% A/ u; z0 z! Q
右除B/A可由B/A=(A'\B')'左除来实现.
  p" v- T  s6 l3 H3 s. T/ w1 H7 S" u5 S( ]* g
§3.4矩阵乘方# k/ p4 t9 c; q8 H
A^P意思是A的P次方.如果A是一个方阵,P是一个大于1的整数,则A^P表示A的P次幂,即A自乘P次.如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:[V,D]=eig(A),则:
! w* S9 e! Y/ C' j7 D+ D' q( T' y" `' h5 I1 l8 k, ^
A^P=V*D.^P/V(注:这里的.^表示数组乘方,或点乘方,参见后面的有关介绍)
6 b. k' l; k" e5 @' r( ?, ?* f  [
+ P4 l8 [! \; q如果B是方阵, a是标量,a^B就是一个按特征值与特征向量的升幂排列的B次方程阵. 如果a和B都是矩阵,则a^B是错误的.. L; h0 p- w. Z9 g1 G3 \
; a2 H' L: N( I& i$ ?0 g* W
§3.5 矩阵的超越函数+ |( [& H& `! t5 ~6 K( G5 W0 m4 q
在Matlab中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上. Matlab可以计算矩阵的超越函数,如矩阵指数、矩阵对数等.
# |' a& u+ n3 t9 w8 Y+ Z% l; |" Y1 m! Y- G+ X+ k  Q$ R+ J; z
一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义:9 I5 k8 G# \; J0 z0 w

/ D8 z* {6 w8 Oexpm           矩阵指数5 Z' X5 N* F7 Z& x& ~- u5 O+ n  h

1 u+ Q6 ]3 |9 Y4 R  M+ Q7 Flogm        矩阵对数% S3 i; X6 @5 o- F8 D

0 |' N: b3 s. k" Vsqrtm           矩阵开方
9 ~- Y0 N# c3 g& T; j: z( j% {: \
所列各项可以加在多种m文件中或使用funm.请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册./ o3 p  h- A5 g* P1 J7 l5 g1 d6 U
0 ^$ U0 _: o* f
§3.6数组运算
  v4 a6 A# e5 E9 w( {# h数组运算由线性代数的矩阵运算符“*”、“/”、“\”、“^”前加一点来表示,即为“.*”、“./”、“.\”、“.^”.注意没有“.+”、“.-”运算.  b3 c4 Y; ?  O8 S2 r4 e  x5 H
  W$ Y- H1 w$ W2 m% o+ z
§3.6.1数组的加和减
- {* L0 ?5 H9 j) u+ Q对于数组的加和减运算与矩阵运算相同,所以“+”、“-”既可被矩阵接受又可被数组接受.1 h8 G4 d* R, u( O; N$ S

* k: ]9 D/ r! a( d§3.6.2数组的乘和除
: g2 I9 S! Q, ~0 T: A数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘.例如x=[1  2  3]; y=[ 4  5  6];7 s6 S# ?0 O' Y! [6 D  t
7 r8 c1 ?- I- b
计算z=x.*y
$ T4 |) d0 f/ d; x0 D% a/ z6 Y8 d* |4 F5 z/ [# N9 Y4 F% s- D
结果z=4  10  182 V+ a: v% L  t, K7 l+ N" N
9 h1 B  c: D: H  \  Q# K8 \
数组的左除(.\)与数组的右除(./),由读者自行举例加以体会.2 Z9 q3 Z5 p5 ^8 N* K# Z% u+ ]
  a7 }8 B+ H" ^
§3.6.3 数组乘方# e+ [* [" t1 ^; |$ J# M
数组乘方用符号.^表示.& q- v9 D" X% h& ^+ R  Z6 r; p

5 z8 t2 L4 }/ T. X% y) x' c! `  P例如:键入:
0 U! k4 ~0 @( v, Y0 S" S* l( }
. ?1 V6 U/ R3 t  d1 lx=[ 1  2  3]( c9 m1 e* t) \$ S% \+ o* P/ D4 X

4 S7 s$ x0 J* K& `0 B# [y=[ 4  5  6]
) r* a4 z( C! _1 c% d" Y  {; g! i7 [
则z=x.^y=[1^4  2^5  3^6]=[1  32  729]4 v( s& z/ |+ P/ Q7 c! T* h
. m% l# Q( B, N: V: N
(1) 如指数是个标量,例如x.^2,x同上,则:
# M4 G# d/ H/ ?2 b5 S
6 U: R& ~  ^" Pz=x.^2=[1^2  2^2  3^2]=[ 1  4  9]
! {' q- H2 x2 X. l! d  @3 n  a$ [
+ o2 j4 e# p4 R(2) 如底是标量,例如2 .^[x y] ,x、y同上,则:
( w8 [, j4 S. L- u# R0 n; o0 S8 B3 c- T) O5 y9 E( j
z=2 .^[x y]=[2^1  2^2  2^3  2^4 2^5  2^6]=[2  4  8  16  32  64]' M. j7 F  @5 |. e
, G) |* l5 k, ^+ }1 x
从此例可以看出Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“.”之间的空格很重要,如果不这样做,解释程序会把“.”看成是2的小数点. Matlab看到符号“^”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵.& |5 R, N1 r1 @# Z: E
0 ~* P" S3 Z. b
§3.7 矩阵函数6 h2 {4 [3 C9 T  ?6 K, o- {
Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的.其它功能函数在求助程序或命令手册中都可找到.手册中备有为Matlab提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数:9 ?. |3 G5 B3 Q8 ]; F" e
# \! ]4 W  L, x: D
(1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解.$ m7 s) n- J8 N4 S

# F8 a8 F7 ~2 ?' g/ f1 f* H§3.7.1三角分解- p) ^3 M5 D, H' a
最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵.计算算法用高斯变量消去法.
. U9 M' T, X' K
7 h3 ]; z, w6 T4 W( ~. B7 C从lu函数中可以得到分解出的上三角与下三角矩阵,函数inv得到矩阵的逆矩阵,det得到矩阵的行列式.解线性方程组的结果由方阵的“\”和“/”矩阵除法来得到.
0 {0 J: d* \/ m% l6 @3 \% M( P  V0 k1 j
例如:6 Q1 n: u8 n7 V% Z" C
7 i) k% O" u3 @, J+ r' t
A=[ 1      2     3/ Q* h# E" @7 C  V  {# v/ H

& r1 Y) |+ e. C' s4      5     68 ~5 o/ L; y7 d5 n* Q
5 p/ E3 ~6 |$ I: ~( f+ ?
7      8     0]
' s0 C+ b1 d* O# v1 Z5 ~# B3 \( @5 `3 S6 }7 f  ?/ A
LU分解,用Matlab的多重赋值语句0 }3 V! w9 ]+ p* X8 C8 v# w' f2 A

$ |. n+ i+ p- X& L! O! j. x[L,U]=lu(A)0 e6 \1 T. p0 D* c& D
3 X: n' h! D5 J3 v! H) [
得出
5 X- Z/ K* m/ \/ ^7 b$ a# Y4 G. J" l) _" ?2 s# p$ m; l' X3 `
L =, h3 F, z+ d; u, b
( c' L  p/ P2 K! f( g% Q

0.1429

1.0000

0

0.5714

0.5000

1.0000

1.0000

0

0

1 p" B1 v' d1 m+ [
U =" P* n5 M. F2 H% J

- E9 z* C& f% z) m& n3 w( y

7.0000

8.0000

0

0

0.8571

3.0000

0

0

4.5000

' _; n8 R; _  G4 o* J$ O2 n
注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可.% ~, n6 a4 F, M; y# o  t7 W1 W* q
5 F+ ~- F0 U2 B2 _
求逆由下式给出: x=inv(A)
2 W5 N7 ~4 L0 R& C1 o
$ v; K: h/ D! \# X6 x1 w1 ?4 \0 Ix =  i. G8 T' P& u1 u$ H1 |2 U
/ R, X. A7 [- [

-1.7778

0.8889

-0.1111

1.5556

-0.7778

0.2222

-0.1111

0.2222

-0.1111


7 H) U: n1 b, X7 ^- J从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出:6 A" ~9 s" @( M$ g+ v" F' B. Z
! Z: o  P3 N) _3 z
d=det(A)
9 D: V" x+ l; P8 Y0 @$ K
" A7 B) D$ o5 i1 r7 v# Ed =, q3 P' Q. _/ [

5 @7 N. V+ P( s+ g$ ~; \: R278 q' c  i& g% ?! V2 O3 P

2 }  O) f/ ?+ u% m直接由三角分解计算行列式:d=det(L)*det(U)
8 G" V5 D3 l, F  ?# h' T% v  t3 L& [: Z2 Y5 A* A+ U: N
d =1 y' D. q& |7 z
2 I4 l5 G* M* c4 y7 m: t" w3 P
27.00001 a5 s( G. G* g* o: R1 }. h1 j. @
' m# W! M! w% c( ^
为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数.但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数.4 T# A# R: b' k

* |- F$ }6 n1 C* W. R2 u8 e1 u2 Y例如:线性联立方程取 b=[ 1- q2 q3 R. I- s8 w, \

# f0 ]. c9 g8 x: [% d* z                                           31 ^8 B# r% D' a& P
% Z: w0 J" o3 v8 O  J7 h0 a/ _
                                           5]  F0 G% B/ ?1 v0 E
3 C3 E( c9 N4 e$ O1 e. Q' L) e& c
解Ax=b方程,用Matlab矩阵除得到; n" X( e+ \" X0 ~2 E- Z
4 I9 o( n/ a0 g; h
x=A\b
% z6 Q. D0 ^/ N' b/ G# u9 [2 p
5 C7 |. T4 b$ B; T8 M! Y. g结果x=
% _1 i2 \2 Z1 @( d8 k" }
/ i# c8 n8 a: \; b$ i0.3333
, }3 c: I+ J+ `0 F
3 V: E0 R5 Q1 X+ c$ R0.33333 k7 {' w9 k) F) l! [6 L( u
/ G) F) d7 o6 W& Q
0.0000
) F; \6 [# E# v3 S
0 J) \$ }1 w$ ?8 g2 s: z由于A=L*U,所以x也可以有以下两个式子计算:y=L\b,x=U\y.得到相同的x值,中间值y为:9 N- G2 [  D: A% Y: a6 Y0 g

- p% t. P& `; y& ky =; e- Z8 e# M# I  u" ?
0 i& |4 p7 ]2 Y3 @/ l2 R. N
5.0000! w; G6 P1 x8 ~

% i1 z! d: W, v) U& r" e0 D0.2857( Y" V$ u# T( u
+ [0 P' o0 v" g7 H2 i+ ~" a) ~3 N/ v
0.0000' V$ o; ]1 P! X* }9 w  T) {: |
9 I/ G# X7 q" C6 e
Matlab中与此相关的函数还有rcond、chol和rref.其基本算法与LU分解密切相关.chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R'*R=X.rref用具有部分主元的高斯-约当消去法产生矩阵A的化简梯形形式.虽然计算量很少,但它是很有趣的理论线性代数.为了教学的要求,也包括在Matlab中.
* m5 G! X4 e0 Y& F4 J& z0 d
8 w; o5 [2 V" f§3.7.2正交变换
: m% {: y2 q+ |3 q. c. _$ D4 Q! n“QR”分解用于矩阵的正交-三角分解.它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用.
: }! x5 R( v3 O/ [
4 l0 w$ I& b2 j例如A=[  1     2     3
* p- a0 D* l2 ^; X* i: t( A( V# ^0 n. D. m& b1 t# g
4     5     65 I/ s2 O. C6 w
( k/ o2 }7 u8 D* Q3 }1 p4 ^
7     8     9
; o1 ?2 e0 i+ O0 x) s0 n0 t/ m4 M+ u3 B7 U" f: N
10    11    12]* y% L# V4 z9 ^
3 R& w+ E' p& i' @, k& G" V1 j
是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解:3 V2 H$ M5 A6 e! k+ R6 Y
0 S' g! _$ @: M7 x" j. M
[Q,R]=qr(A)
* m) w4 W0 _( R4 [! x& h
" T* X' P0 o4 e* \, b( cQ =0 M1 U  Z% P: v7 `% l! x

! S  g/ I9 ~  Q# O

-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

# u0 S* P4 Z5 O1 W, N! ?( q
R =
0 _) ?1 W9 b7 a/ p" D* W3 s
7 X' Y: x  z" i  b+ e/ @

-12.8841

-14.5916

-16.2992

0

-1.0413

-2.0826

0

0

0.0000

0

0

0

4 ]6 V. l9 Y& {; o' T1 L
可以验证Q*R就是原来的A矩阵.由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的." z5 M( e$ m0 v4 H% ~( Y; Q$ n  }- D

$ q  U  Q8 \2 j- n" P: N$ s下面尝试利用QR分解来求超定和降秩的线性方程组的解.) K( f3 c7 [/ K! ~

  d7 }3 T* d) l  s# O' s例如:
% L5 ?) n/ j3 z3 A! m" I
" g1 D" x1 y9 H5 y" D4 Mb=[ 1
4 f, ?  z1 I6 j7 U: Q* @4 |* j6 @" H# g( |6 E: @: r* B" N
3
5 D  W% t! @1 W) a( ~5 d( n4 h1 F% `& \7 k7 D
5
! E4 ~' ~: q; a' O/ k
" l- y) w- _6 [# s# j7]
0 ?2 E1 @3 c; O# E$ ?) s4 x5 h6 [+ |8 j) V/ m
讨论线性方程组Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A\b.
+ y! j. e8 }& G9 e; L% F! W+ @. o
* P, l& a2 {- H结果为:
$ Y0 G4 H% e. K; h, d
# v& r" ?* n- ~8 K& q8 `) I2 WWarning: Rank deficient, rank = 2 tol =   1.4594e-014
3 n1 R( A! {1 v9 w6 g) P7 ?
5 p5 n6 L1 Q  B1 ?: L/ W4 nx =
1 d, V4 J  T4 I2 h% _5 F5 z+ L/ e/ u. R
    0.5000
( b- `( X9 y( ^0 X2 B$ F# \$ q" O4 y4 ~; u. O& E/ t
         0
; i0 r0 E) V3 I8 z
0 b' }6 n; ]  h4 ?1 J    0.16676 Y+ o) g. \1 p& U: Z( z7 @+ V8 Z

6 q8 f: e$ D2 S- H3 v; t( P: i# z我们得到了缺秩的警告.用QR分解法计算此方程组分二个步骤:
( q" W1 O$ P" r  B+ |; m% ]* Z. w& G5 A3 I+ c9 Z) a; |9 ]1 n0 {* ~6 k' i
y=Q'*b
$ s2 w8 P2 h) I, e4 G1 \
/ ~8 w" }, d: M+ G- vx=R\y
0 \$ g+ X, l( ]9 V# l3 A% z
: v% h# o* m. E. E6 |+ g+ C求出的y值为
5 ?7 }6 O7 |% H" G
4 }, E0 a8 b0 |# K7 h; Ey =
  @9 A. B* `& [2 g( B5 R  P/ ?3 j8 ^

-9.1586

-0.3471

0.0000

0.0000

& U$ Q/ j7 k0 v  L7 Q
x的结果为
9 C8 x9 j+ N% Y. `. c
0 R% G; V1 u; `( D$ S' NWarning: Rank deficient, rank = 2 tol =   1.4594e-014
& J- l+ f) Z* ?3 @  n/ S% {9 m$ n# F( _3 P6 ]
x =
3 y( y9 H, P  S7 e/ A8 ]- Q; c+ F" z/ E3 f1 h& O$ z
    0.5000: Y! w6 `6 D/ W. f0 x- T
' [" M" D0 Y$ ~4 o
         0
7 ]1 i# `8 Y) b3 i- F
+ Z4 z% u, ?3 K% _. O8 {    0.1667
) z  R, s+ A6 X$ m
% C, p( ^- q5 d" j( z. G用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b.这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的.显然x向量的解有无穷多个,而“QR”分解仅仅找出了其中之一.
: R0 S* S7 j/ Z4 }$ x4 {# j
& O. ^2 o" H* n) @, D1 J: R5 B§3.7.3奇异值分解: N6 N$ u0 a9 X- s4 @
在Matlab中三重赋值语句
$ W( C- c$ h) Z7 n3 C6 b4 d" y& v2 h
[U,S,V]=svd(A): a! M4 D: l5 G. e8 S

1 U* X( d9 R& i" z/ f在奇异值分解中产生三个因数:+ `2 Q. G) J, R! O5 ^- T

7 p: y+ j( E' oA=U*S*V '
1 v! a+ X  n' m! U8 r  `7 y( W
3 Q3 `7 J# ^3 K9 D7 `- @1 HU矩阵和V矩阵是正交矩阵,S矩阵是对角矩阵,svd(A)函数恰好返回S的对角元素,而且就是A的奇异值(其定义为:矩阵A'*A的特征值的算术平方根).注意到A矩阵可以不是方的矩阵.2 K8 r2 e& @7 U# w8 Z3 F2 E4 g

  \# N1 _% }2 w5 ?奇异值分解可被其它几种函数使用,包括广义逆矩阵pinv(A)、秩rank(A)、欧几里德矩阵范数norm(A,2)和条件数cond(A).
1 X0 N1 j' ^5 F2 O
# ]$ u' L' e; f1 f3 C! x, [. e§3.7.4 特征值分解# k! G* I" q  d
如果A是n×n矩阵,若l满足Ax=lx,则称l为A的特征值,x为相应的特征向量.% \; L) H% q- J& a: b$ j

) e+ h. J5 l$ ?1 v函数eig(A)返回特征值列向量,如果A是实对称的,特征值为实数.特征值也可能为复数,例如:1 ]3 P9 S+ I7 r6 B/ T  J# C
8 e* T3 \1 v( E1 P
A=[  0     1
: E; P- f* ?4 Y3 u) B5 `9 ]) b9 j2 L) N. q7 q, W: t. g' |
-1     0]- u- X/ M  B" E# r& J% f
8 }& F0 m, j# W6 u: r
eig(A)9 P9 }. d- y$ ?3 E
( ?( }- a5 e  b. Y! b
产生结果* @6 R5 l0 p% D" s4 I- ^1 A2 O2 U* Q

6 Q+ e4 J9 x, @  u8 O7 Vans =( D  c3 P* O1 S6 |3 N+ `

4 Z/ l4 O$ l! {3 ~0 + 1.0000i& g' ]2 V2 c8 F  c7 m  h3 u! @) s

  \& u4 s% b8 d% M& t; h1 O: Y0 - 1.0000i
+ y4 |5 L  C: `: @
% a" X' I, t+ t6 ?如果还要求求出特征向量,则可以用eig(A)函数的第二个返回值得到:
* ?4 K3 W% ?8 g' @1 J# H
( q6 H# i  B; M4 Z[x,D]=eig(A)
. ]0 D3 \" L6 @  b  H* H$ p* u/ v
D的对角元素是特征值.x的列是相应的特征向量,以使A*x=x*D./ P* i! w2 j7 q3 T8 ~

" n5 ~1 y# L; V, e9 ?  K计算特征值的中间结果有两种形式:& U! O/ e2 e' H; O7 M

  g$ O- _- Z/ t/ Y/ yHessenberg形式为hess(A),Schur形式为schur(A).( ?- Z! t2 Z# ~$ |, G
6 {. d2 O/ Z$ }9 s5 j# I
schur形式用来计算矩阵的超越函数,诸如sqrtm(A)和logm(A).2 Y1 X9 ?/ ^! S. \4 h- @

) Z9 Q0 G4 n( I$ o+ ^! \6 x如果A和B是方阵,函数eig(A,B)返回一个包含一般特征值的向量来解方程
: J# S0 _+ H9 _- h
8 p4 X0 v# i: P, MAx=lBx
  @) ^# K* j5 s  f6 @0 }/ u0 t7 X0 n! }3 j5 T. l- {9 I9 G) z
双赋值获得特征向量, p4 p  m4 s' c8 q
* `( f" I2 d/ e  z" I% I
[X,D]=eig(A,B)/ W1 V9 j& d  X' D

; W! E: r8 e& F; R. e产生特征值为对角矩阵D.满秩矩阵X的列相应于特征向量,使A*X=B*X*D,中间结果由qz(A,B)提供.& }/ q2 \, s% }( e
' z# z. s$ b! C+ ?
§3.7.5秩4 _3 H; U0 u9 r! ?+ I% E
Matlab计算矩阵A的秩的函数为rank(A),与秩的计算相关的函数还有:rref(A)、orth(A)、null(A)和广义逆矩阵pinv(A)等.
* c3 Z$ J) s, V2 F& m
8 Z* u7 h5 M9 [: n* a, N; P利用rref(A),A的秩为非0行的个数.rref方法是几个定秩算法中最快的一个,但结果上并不可靠和完善.pinv(A)是基于奇异值的算法.该算法消耗时间多,但比较可靠.其它函数的详细用法可利用Help求助., K6 V$ l, L' P5 U
; ?2 f. E4 h( Q- b8 Q

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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