第1章 矩阵及其基本运算
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.4461 R =
-12.8841 -14.5916 -16.2992 0 -1.0413 -2.0826 0 0 0.0000 0 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.6529 0.9625 -0.1621 0.2176 -0.0484 0.6865 0.7255 R =
557.9418 187.0321 567.8424 0 0.0741 3.4577 0 0 0.1451
>> [Q,R]=qrdelete(Q,R,3) %将A的第3列去掉后进行qr分解。
Q =
-0.2671 -0.7088 0.6529 0.9625 -0.1621 0.2176 -0.0484 0.6865 0.7255 R =
557.9418 187.0321 0 0.0741 0 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.6529
31 MATLAB6.0数学手册 0.9625 -0.1621 0.2176 -0.0484 0.6865 0.7255 R =
557.9418 187.0321 567.8424 -0.0609 0 0.0741 3.4577 -21.6229 0 0 0.1451 30.1073
1.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.2294 0.0000 0.7255 0.6882 T =
1.0000 -7.1119 -815.8706 0 2.0000 -55.0236 0 0 3.0000
1.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.2466 t =
4.8121 1.1972 -2.2273 -1.0067 0 1.9202 -3.0485 -1.8381 0 0.7129 1.9202 0.2566 0 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.2466 T =
4.8121 -0.9697 + 1.0778i -0.5212 + 2.0051i -1.0067 0 1.9202 + 1.4742i 2.3355 0.1117 + 1.6547i 0 0 1.9202 - 1.4742i 0.8002 + 0.2310i
0 0 0 1.3474
32 第1章 矩阵及其基本运算
1.3.6 特征值分解
函数 eig
格式 d = eig(A) %求矩阵A的特征值d,以向量形式存放d。
d = eig(A,B) %A、B为方阵,求广义特征值d,以向量形式存放d。 [V,D] = eig(A) %计算A的特征值对角阵D和特征向量V,使AV=VD成立。 [V,D] = eig(A,'nobalance') %当矩阵A中有与截断误差数量级相差不远的值时,
该指令可能更精确。'nobalance'起误差调节作用。 [V,D] = eig(A,B) %计算广义特征值向量阵V和广义特征值阵D,满足
AV=BVD。
[V,D] = eig(A,B,flag) % 由flag指定算法计算特征值D和特征向量V,flag的
可能值为:'chol' 表示对B使用Cholesky分解算法,这里A为对称Hermitian矩阵,B为正定阵。'qz' 表示使用QZ
算法,这里A、B为非对称或非Hermitian矩阵。
说明 一般特征值问题是求解方程:Ax??x解的问题。广义特征值问题是求方程:
Ax??Bx解的问题。
1.3.7 奇异值分解
函数 svd
格式 s = svd (X) %返回矩阵X的奇异值向量
[U,S,V] = svd (X) %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,
且满足= U*S*V'。若A为m3n阵,则U为m3m阵,V
为n3n阵。奇异值在S的对角线上,非负且按降序排列。
[U,S,V] = svd (X,0) %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n3n。
例1-73
>> A=[1 2;3 4;5 6;7 8]; >> [U,S,V]=svd(A)
U =
-0.1525 -0.8226 -0.3945 -0.3800 -0.3499 -0.4214 0.2428 0.8007 -0.5474 -0.0201 0.6979 -0.4614 -0.7448 0.3812 -0.5462 0.0407 S =
14.2691 0 0 0.6268 0 0 0 0 V =
-0.6414 0.7672 -0.7672 -0.6414 >> [U,S,V]=svd(A,0)
U =
-0.1525 -0.8226 -0.3499 -0.4214
33 MATLAB6.0数学手册 -0.5474 -0.0201 -0.7448 0.3812 S =
14.2691 0 0 0.6268 V =
-0.6414 0.7672 -0.7672 -0.6414
1.3.8 广义奇异值分解
函数 gsvd 格式 [U,V,X,C,S] = gsvd(A,B) %返回酉矩阵U和V、一个普通方阵X、非负对角矩
阵C和S,满足A = U*C*X',B = V*S*X',C'*C + S'*S
= I (I为单位矩阵);A和B的列数必须相同,行数可
以不同。
[U,V,X,C,S] = gsvd(A,B,0) %含义与前面相似
sigma = gsvd (A,B) %返回广义奇异值sigma
例1-74
>> A=reshape(1:12,3,4) %产生3行4列矩阵,元素由1,2,?,12构成。
A =
1 4 7 10 2 5 8 11 3 6 9 12
>> B=magic(4) %产生4阶魔方阵
B =
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> [U,V,X,C,S]=gsvd(A,B)
U =
0.4082 0.7071 0.5774 -0.8165 0.0000 0.5774 0.4082 -0.7071 0.5774 V =
0.2607 -0.7950 -0.5000 0.2236 -0.4029 0.3710 -0.5000 0.6708 -0.5452 -0.0530 -0.5000 -0.6708 0.6874 0.4770 -0.5000 -0.2236 X =
0 -9.4340 -17.0587 3.4641 1.8962 8.7980 -17.0587 8.6603 3.7924 8.1620 -17.0587 13.8564 -5.6885 -7.5260 -17.0587 19.0526 C =
0 0.0000 0 0 0 0 0.0829 0 0 0 0 1.0000 S =
1.0000 0 0 0 0 1.0000 0 0
34 第1章 矩阵及其基本运算
0 0 0.9966 0 0 0 0 0.0000
1.3.9 特征值问题的QZ分解
函数 qz
格式 [AA,BB,Q,Z,V] = qz(A,B) %A、B为方阵,产生上三角阵AA和BB,正
交矩阵Q、Z或其列变换形式,V为特征向量
阵。且满足:Q*A*Z= AA 和Q*B*Z = BB。
[AA,BB,Q,Z,V] = qz(A,B,flag) %产生由flag决定的分解结果,flag取值为:
'complex':表示复数分解(默认),取值为'real':表示实数分解。
1.3.10 海森伯格形式的分解
如果矩阵H的第一子对角线下元素都是0,则H为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵,则它的海森伯格形式是对角三角阵。MATLAB可以通过相似变换将矩阵变换成这种形式。
函数 hess
格式 H = hess(A) %返回矩阵A的海森伯格形式
[P,H] = hess(A) %P为酉矩阵,满足:A = PHP' 且P'P = eye(size(A))。
例1-75
>> A=[-149 -50 -154;537 180 546;-27 -9 -25]; >> [P,H]=hess(A)
P =
1.0000 0 0 0 -0.9987 0.0502 0 0.0502 0.9987 H =
-149.0000 42.2037 -156.3165 -537.6783 152.5511 -554.9272 0 0.0728 2.4489
H的第一子对角元素是H(3,1)=0。
1.4 线性方程的组的求解
我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:
若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解;
若系数矩阵的秩r 线性方程组的无穷解 = 对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。 1.4.1 求线性方程组的唯一解或特解(第一类问题) 这类问题的求法分为两类:一类主要用于解低阶稠密矩阵 —— 直接法;另一类是解大 35