当前位置:文档之家› 矩阵分解的MATALAB实现

矩阵分解的MATALAB实现

5.3.3 矩阵分解的MATALAB实现矩阵分解(decomposition, factorization)是多半将矩阵拆解为数个三角形矩阵(triangular matrix),依使用目的的不同,可分为三种矩阵分解法:1)三角分解法(Triangular Factorization),2)QR分解法(QR Factorization),3)奇异值分解法(Singular Value Decompostion)。

(1) 三角分解法三角分解法是将原正方(square) 矩阵分解成一个上三角形矩阵或是排列(permuted) 的上三角形矩阵和一个下三角形矩阵,这样的分解法又称为LU 分解法。

它的用途主要在简化一个大矩阵的行列式值的计算过程,求反矩阵,和求解联立方程组。

不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。

我们举以下二个矩阵为例:利用三角分解法可将A和B二矩阵分别拆解为上下三角形矩阵注意B分解的矩阵得到的第一个矩阵[LB]是排列的下三角形矩阵,如果第二、三列互换,则此变成完全的下三角形矩阵。

以MATLAB函数计算上述的LU分解法,其语法为[L,U]=lu(A),其中L代表下三角形矩阵U代表上三角形矩阵。

我们来看一个例子。

>> A = [1 2 -1; -2 -5 3; -1 -3 0]; B=[1 3 2; -2 -6 1; 2 5 7];>> [L1,U1] = lu(A); [L2,U2] = lu(B);>> L1; U1L1 = % 注意这个矩阵L1和之前的[LA]不相同-0.5 1 01 0 00.5 1 1U1 = % 注意这个矩阵U1和之前的[UA]不相同-2 -5 30 -0.5 0.50 0 -2>> L2; U2L2 = % 注意这个矩阵L2和之前的[LB]不相同-0.5 0 11 0 0-1 1 0U2 = % 注意这个矩阵U2和之前的[UB]不相同-2 -6 10 -1 80 0 2.5(2) QR分解法QR分解法是将矩阵分解成一个正规正交矩阵与上三角形矩阵。

还记得先前我们介绍的正规正交矩阵Q满足的条件吗!所以称为QR分解法与此正规正交矩阵的通用符号Q有关。

MATLAB以qr函数来执行QR分解法,其语法为[Q,R]=qr(A),其中Q代表正规正交矩阵,而R代表上三角形矩阵。

此外,原矩阵A不必为正方矩阵;如果矩阵A大小为,则矩阵Q大小为,矩阵R大小为。

(3) 奇异值分解法奇异值分解(sigular value decomposition,SVD) 是另一种正交矩阵分解法;SVD 是最可靠的分解法,但是它比QR分解法要花上近十倍的计算时间。

[U,S,V]=svd(A),其中U和V代表二个相互正交矩阵,而S代表一对角矩阵。

和QR分解法相同者,原矩阵A不必为正方矩阵。

使用SVD分解法的用途是解最小平方误差法和数据压缩。

1.3 矩阵分解1.3.1 Cholesky分解函数chol格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。

[R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。

例1-66>> X=pascal(4) %产生4阶pascal矩阵X =1 1 1 11 2 3 41 3 6 101 4 10 20>> [R,p]=chol(X)R =1 1 1 10 1 2 30 0 1 30 0 0 1p =1.3.2 LU分解矩阵的三角分解又称LU分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。

函数lu格式[L,U] = lu(X) %U为上三角阵,L为下三角阵或其变换形式,满足LU=X。

[L,U,P] = lu(X) %U为上三角阵,L为下三角阵,P为单位矩阵的行变换矩阵,满足LU=PX。

例1-67>> A=[1 2 3;4 5 6;7 8 9];>> [L,U]=lu(A)L =0.1429 1.0000 00.5714 0.5000 1.00001.0000 0 0U =7.0000 8.0000 9.00000 0.8571 1.71430 0 0.0000>> [L,U,P]=lu(A)L =1.0000 0 00.1429 1.0000 00.5714 0.5000 1.0000U =7.0000 8.0000 9.00000 0.8571 1.71430 0 0.0000P =0 0 11 0 00 1 01.3.3 QR分解将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。

函数qr格式[Q,R] = qr(A) %求得正交矩阵Q和上三角阵R,Q和R满足A=QR。

[Q,R,E] = qr(A) %求得正交矩阵Q和上三角阵R,E为单位矩阵的变换形式,R的对角线元素按大小降序排列,满足AE=QR。

[Q,R] = qr(A,0) %产生矩阵A的“经济大小”分解[Q,R,E] = qr(A,0) %E的作用是使得R的对角线元素降序,且Q*R=A(:, E)。

R = qr(A) %稀疏矩阵A的分解,只产生一个上三角阵R,满足R'*R =A'*A,这种方法计算A'*A时减少了内在数字信息的损耗。

[C,R] = qr(A,b) %用于稀疏最小二乘问题:minimize||Ax-b||的两步解:[C,R] =qr(A,b),x = R\c。

R = qr(A,0) %针对稀疏矩阵A的经济型分解[C,R] = qr(A,b,0) %针对稀疏最小二乘问题的经济型分解例1-68>>A =[ 1 2 3;4 5 6; 7 8 9; 10 11 12];>>[Q,R] = qr(A)Q =-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.4461R =-12.8841 -14.5916 -16.29920 -1.0413 -2.08260 0 0.00000 0 0函数qrdelete格式[Q,R] = qrdelete(Q,R,j) %返回将矩阵A的第j列移去后的新矩阵的qr分解例1-69>> A=[-149 -50 -154;537 180 546;-27 -9 -25];>> [Q,R]=qr(A)Q =-0.2671 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R =557.9418 187.0321 567.84240 0.0741 3.45770 0 0.1451>> [Q,R]=qrdelete(Q,R,3) %将A的第3列去掉后进行qr分解。

Q =-0.2671 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R =557.9418 187.03210 0.07410 0函数qrinsert格式[Q,R] = qrinsert(Q,R,j,x) %在矩阵A中第j列插入向量x后的新矩阵进行qr分解。

若j大于A的列数,表示在A的最后插入列x。

例1-70>> A=[-149 -50 -154;537 180 546;-27 -9 -25];>> x=[35 10 7]';>> [Q,R]=qrinsert(Q,R,4,x)Q =-0.2671 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R =557.9418 187.0321 567.8424 -0.06090 0.0741 3.4577 -21.62290 0 0.1451 30.10731.3.4 Schur分解函数schur格式T = schur(A) %产生schur矩阵T,即T的主对角线元素为特征值的三角阵。

T = schur(A,flag) %若A有复特征根,则flag='complex',否则flag='real'。

[U,T] = schur(A,…) %返回正交矩阵U和schur矩阵T,满足A = U*T*U'。

例1-71>> H = [ -149 -50 -154; 537 180 546; -27 -9 -25 ];>> [U,T]=schur(H)U =0.3162 -0.6529 0.6882-0.9487 -0.2176 0.22940.0000 0.7255 0.6882T =1.0000 -7.1119 -815.87060 2.0000 -55.02360 0 3.00001.3.5 实Schur分解转化成复Schur分解函数rsf2csf格式[U,T] = rsf2csf (U,T) %将实舒尔形式转化成复舒尔形式例1-72>> A=[1 1 1 3;1 2 1 1;1 1 3 1;-2 1 1 4];>> [u,t]=schur (A)u =-0.4916 -0.4900 -0.6331 -0.3428-0.4980 0.2403 -0.2325 0.8001-0.6751 0.4288 0.4230 -0.4260-0.2337 -0.7200 0.6052 0.2466t =4.8121 1.1972 -2.2273 -1.00670 1.9202 -3.0485 -1.83810 0.7129 1.9202 0.25660 0 0 1.3474>> [U,T]=rsf2csf (u,t)U =-0.4916 -0.2756 - 0.4411i 0.2133 + 0.5699i -0.3428-0.4980 -0.1012 + 0.2163i -0.1046 + 0.2093i 0.8001-0.6751 0.1842 + 0.3860i -0.1867 - 0.3808i -0.4260-0.2337 0.2635 - 0.6481i 0.3134 - 0.5448i 0.2466T =4.8121 -0.9697 + 1.0778i -0.5212 + 2.0051i -1.00670 1.9202 + 1.4742i 2.3355 0.1117 + 1.6547i0 0 1.9202 - 1.4742i 0.8002 + 0.2310i0 0 0 1.34741.3.6 特征值分解函数 eig格式 d = eig(A) %求矩阵A 的特征值d ,以向量形式存放d 。

相关主题