矩阵分解(一)——三角分解
目录矩阵一些术语奇异矩阵(降秩矩阵)非奇异矩阵(满秩矩阵)矩阵的顺序主子式高斯消去法矩阵描述代码展示矩阵一些术语奇异矩阵(降秩矩阵)矩阵A是方阵,且该矩阵的秩不是满秩。性质1、矩阵A的行列式等于02、如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解非奇异矩阵(满秩矩阵)矩阵A是方阵,且该矩阵的秩是满秩。性质1、矩阵A的行列式不等于02、由|A|≠0可知矩阵A可逆3、AX=0有且只有唯
矩阵一些术语
奇异矩阵(降秩矩阵)
矩阵A是方阵,且该矩阵的秩不是满秩。
- 性质
1、矩阵A的行列式等于0
2、如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解
非奇异矩阵(满秩矩阵)
矩阵A是方阵,且该矩阵的秩是满秩。
- 性质
1、矩阵A的行列式不等于0
2、由|A|≠0可知矩阵A可逆
3、AX=0有且只有唯一零解,AX=b有唯一解
矩阵的顺序主子式
设A为 阶矩阵,矩阵A的n阶顺序主子式为:
对角矩阵、上三角矩阵、下三角矩阵
- 对角矩阵
主队角元素非零,其他元素都是0.
- 数量矩阵
主队角元素相同的对角矩阵
- 单位矩阵
主队角元素都为1的对角矩阵
- 上三角矩阵
主对角线以下都是零的方阵称为上三角矩阵。
性质:
1、具有行列式为对角线元素相乘
2、上三角矩阵间的加减法和乘法运算的结果仍是上三角矩阵
3、上三角矩阵的逆矩阵也仍然是上三角矩阵
4、其逆矩阵对角线上的元素恰好是对应的原矩阵对角线上元素的倒数
5、与对角矩阵相乘结果还是上三角矩阵
- 下三角矩阵
主对角线以上都是零的方阵称为上三角矩阵。
高斯消去法矩阵描述(LU分解)
局限:仅能解决各主元素不为0的情况
设有n元线性方程组:
它写成矩阵形式为:Ax=b
如果A是非奇异矩阵,自然有解的紧凑形式x=A-1b。但当n很大时,用公式来计算A-1的元素是非常困难的。这也就是解线性方程组的Gauss消去法的产生原因,便于求解。
- 步骤
- 设A(0)=A ,b(0)=b
- 将矩阵的第 i 行分别减去矩阵第一行的倍数C = ai1(0)/a11(0),(i = 1、2……、n)即构造消元矩阵L,其中ci1 = ai1(0)/a11(0)。
于是可得到:
- 接着将步骤2得到的A(1),将矩阵的第 i 行分别减去矩阵第一行的倍数C= ai2(0)/a22(0),即构造第二个消元矩阵L2,其中ci2 = ai2(0)/a22(0)。
于是可得到:
- 重复下去,只要主对角线没有出现零值,一直到n-1步后,可得到
可得:Ln-1…L2L1A(0)=A(n-1)
所以: A = A(0) = L1-1 L2-1 …Ln-1-1A(n-1) = LA(n-1),其中L = L1-1 L2-1 …Ln-1-1
L是一个主对角元都是1的下三角矩阵,称为单位下三角矩阵。我们记U=A(n-1),则U是一个上三角矩阵,并且这时得到A的分解为:
A = LU (L是单位下三角矩阵,U是上三角矩阵) - 因为Ax = b,且A = LU ,设y = L-1b,则可得到下面两个方程:
y = L-1b (下三角方程组) 、Ux = y (上三角方程组) - 向前消去法:对于y = L-1b,其第1个方程只含y1,第2个方程只含y1和y2……也可以一个个地逐次求出y1,y2,…,yn。
- 向后回代法:对于Ux = y,其第n个方程只含xn,第n-1个方程只含xn和xn-1……因而可以一个个地依次求出xn,xn-1,…,x1,从而解出式中的解。
代码展示
matrix_a = np.mat([[1,4,7],[2,5,8],[3,6,11]],dtype=float) #系数矩阵A(3, 3)
matrix_b = np.mat([1,1,1]).T #常数向量b(3,1)
new_mat = np.hstack((matrix_a, matrix_b)) #增广矩阵
for i in range(0,new_mat.shape[0]-1):
if matrix_a[i,i] == 0: #如果主对角线值为0,终止
print("error:主对角线值为0")
break
else:
for j in range(i+1,new_mat.shape[0]):
new_mat[j:j+1,:] = new_mat[j:j+1,:] - new_mat[i,:]*(new_mat[j,i]/new_mat[i,i]) #将矩阵的第 i 行分别减去矩阵第一行的倍数C = ai1(0)/a11(0)
new_mat #得到A(n-1)和b(n-1)的增广矩阵
len_x = matrix_a.shape[0] #3
x = np.mat(np.zeros(len_x),np.float) #(1,3),存放解
x[0,len_x-1] = new_mat[len_x-1,len_x] / new_mat[len_x-1,len_x-1] #上三角矩阵,先求出xn的值
for i in range(len_x-2,-1,-1): #会带过程
try:
x[0,i] = (new_mat[i,len_x] - np.sum(np.multiply(new_mat[i,i+1:len_x],x[0,i+1:len_x]))) / new_mat[i,i]
except:
print("error")
x = matrix([[-0.33333333, 0.33333333, 0. ]])
new_mat = matrix([[ 1., 4., 7., 1.],
[ 0., -3., -6., -1.],
[ 0., 0., 2., 0.]])
矩阵的三角分解 (LU、LDU)
定义: 设矩阵A∈Cn×n,如果方阵A可分解成一个下三角矩阵K和一个上三角矩阵U的乘积,即A=KU,则称A可做三角分解。如果A可分解成一个单位下三角(即主角线上元素皆为1)矩阵L和一个上三角矩阵U的乘积,即A=LU,则称A可做LU分解。如果A可分解成A=LDU,其中L是单位下三角矩阵,D是对角矩阵,U是单位上三角矩阵,则称A可做LDU分解。
由定义,我们首先指出:一个方阵的三角分解并不唯一。因为若A=KU是一个三角分解,那么取D是同阶的非奇异对角矩阵,则有下三角矩阵 K ~ \widetilde{K} K =KD,上三角矩阵 U ~ \widetilde{U} U = D-1U,则:
因此也是A = K ~ \widetilde{K} K U ~ \widetilde{U} U 也是 一个三角分解。
更多推荐
所有评论(0)