矩阵的条件数
1.矩阵A的条件数等于A的范数和A的逆的范数的乘积,即cond(A)=||A||*||A6^(-1)||。对应矩阵的3种范数,相应地可以定义3种条件数。其中对于2范数的条件数,可以从矩阵的最大奇异值和最小奇异值之比来求取。
条件数是判断矩阵是否病态的一种度量,条件数越大矩阵就越病态。
条件数事实上表示了矩阵计算对于误差的敏感性。对于线性方程组Ax=b,如果A的条件数大,则b的微小变化改变就能引起解x较大的变化,数值稳定性差。
>> A=[1 3 4 5;1 1 3 4;1 1 1 3;1 1 1 1]
A =
1 3 4 5
1 1 3 4
1 1 1 3
1 1 1 1
>> inv(A)
ans =
-0.5000 0.2500 0.1250 1.1250
0.5000 -0.7500 0.1250 0.1250
0 0.5000 -0.7500 0.2500
0 0 0.5000 -0.5000
>> C1=norm(A)*norm(ans)
C1 =
13.9424
>> s=svd(A)
s =
9.5410
1.2253
1.0000
0.6843
>> C2=max(s)/min(s)
C2 =
13.9424
>>
矩阵的奇异值和奇异值分解
关于矩阵奇异值
正交矩阵是在欧几里得空间里的叫法,在酋空间里叫酋矩阵。本身的转置等于本身的逆。
矩阵A的奇异值返回一个奇异值列向量s,
矩阵A的奇异值分解,A返回一个与矩阵A大小相同的对角矩阵s和二个正交矩阵u,v
A=usv
若A是mn阵,则u为mm阵,v为n*n阵。
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> s=svd(A)
s =
16.8481
1.0684
0.0000
>> [u,s,v]=svd(A)
u =
-0.2148 0.8872 0.4082
-0.5206 0.2496 -0.8165
-0.8263 -0.3879 0.4082
s =
16.8481 0 0
0 1.0684 0
0 0 0.0000
v =
-0.4797 -0.7767 0.4082
-0.5724 -0.0757 -0.8165
-0.6651 0.6253 0.4082
>> inv(u)
ans =
-0.2148 -0.5206 -0.8263
0.8872 0.2496 -0.3879
0.4082 -0.8165 0.4082
>> u'
ans =
-0.2148 -0.5206 -0.8263
0.8872 0.2496 -0.3879
0.4082 -0.8165 0.4082
>> v'
ans =
-0.4797 -0.5724 -0.6651
-0.7767 -0.0757 0.6253
0.4082 -0.8165 0.4082
>> inv(v)
ans =
-0.4797 -0.5724 -0.6651
-0.7767 -0.0757 0.6253
0.4082 -0.8165 0.4082
>>
矩阵的特征值和特征向量
1.n阶方阵A,所组成的特征方程f(λ)=det|A-λI|=0的全部根,就是方程A的特征值,用向量d=eig(A)表示
2.对于n阶方程A,如果存在一个以特征值组成的对角矩阵d和n阶矩阵v,使Av=vd,矩阵v的每一个列向量对应于特征值的特征向量,用[v,d]=eig(A)来表示
>> A=[-6 -11 -6;1 0 0 ;0 1 0]
A =
-6 -11 -6
1 0 0
0 1 0
>> eig(A)
ans =
-3.0000
-2.0000
-1.0000
>> d=ans
d =
-3.0000
-2.0000
-1.0000
>> [v,d]=eig(A)
v = %特征向量
-0.9435 0.8729 0.5774
0.3145 -0.4364 -0.5774
-0.1048 0.2182 0.5774
d = %特征值组成的对角矩阵
-3.0000 0 0
0 -2.0000 0
0 0 -1.0000
>> syms lambda
>> det(A-lambda*eye(3))
ans =
- lambda^3 - 6*lambda^2 - 11*lambda - 6
>> P=sym2poly(ans)
P =
-1 -6 -11 -6
>> roots(P)
ans =
-3.0000
-2.0000
-1.0000
>>
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> d=eig(A)
d =
34.0000
8.9443
-8.9443
-0.0000
>> [V,d]=eig(A)
V =
-0.5000 -0.8236 0.3764 -0.2236
-0.5000 0.4236 0.0236 -0.6708
-0.5000 0.0236 0.4236 0.6708
-0.5000 0.3764 -0.8236 0.2236
d =
34.0000 0 0 0
0 8.9443 0 0
0 0 -8.9443 0
0 0 0 -0.0000
矩阵的左右翻转、上下翻转和矩阵的逆时针90°的操作
1.fliplr
2.flipud
3.rot90 逆时针旋转90°
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B=rot90(A)
B =
6 7 2
1 5 9
8 3 4
>> C=fliplr(A)
C =
6 1 8
7 5 3
2 9 4
>> D=flipud(A)
D =
4 9 2
3 5 7
8 1 6
对角矩阵
1.X=diag(v,k)将向量v写入矩阵的主对角线上,而矩阵的其他元素为0,k表示上移或下移行数。
2.v=diag(X,k)
从矩阵X中提取主对角线元素到向量v上,提取上移或者下移的主对角线元素。
>> v=[1 2 3 4]
v =
1 2 3 4
>> diag(v)
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> diag(v,1) %上移,但是是5阶
ans =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0
>> diag(v,-1)
ans =
0 0 0 0 0
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
>> A=diag(v)
A =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> a=diag(A)
a =
1
2
3
4
>> b=diag(A)' %行向量转置
b =
1 2 3 4