矩阵分解(一)——三角分解

目录

  • 矩阵一些术语
    • 奇异矩阵(降秩矩阵)
    • 非奇异矩阵(满秩矩阵)
    • 矩阵的顺序主子式
    • 对角矩阵、上三角矩阵、下三角矩阵
  • 高斯消去法矩阵描述(LU分解)
    • 代码展示
  • 矩阵的三角分解 (LU、LDU)

矩阵一些术语

奇异矩阵(降秩矩阵)

矩阵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阶顺序主子式为:矩阵分解(一)——三角分解_第1张图片

对角矩阵、上三角矩阵、下三角矩阵

  • 对角矩阵

主队角元素非零,其他元素都是0.
矩阵分解(一)——三角分解_第2张图片

  • 数量矩阵

主队角元素相同的对角矩阵
矩阵分解(一)——三角分解_第3张图片

  • 单位矩阵

主队角元素都为1的对角矩阵
矩阵分解(一)——三角分解_第4张图片

  • 上三角矩阵

主对角线以下都是零的方阵称为上三角矩阵。
性质:
1、具有行列式为对角线元素相乘
2、上三角矩阵间的加减法和乘法运算的结果仍是上三角矩阵
3、上三角矩阵的逆矩阵也仍然是上三角矩阵
4、其逆矩阵对角线上的元素恰好是对应的原矩阵对角线上元素的倒数
5、与对角矩阵相乘结果还是上三角矩阵

  • 下三角矩阵

主对角线以上都是零的方阵称为上三角矩阵。

高斯消去法矩阵描述(LU分解)

局限:仅能解决各主元素不为0的情况

设有n元线性方程组:
矩阵分解(一)——三角分解_第5张图片
它写成矩阵形式为:Ax=b

如果A是非奇异矩阵,自然有解的紧凑形式x=A-1b。但当n很大时,用公式来计算A-1的元素是非常困难的。这也就是解线性方程组的Gauss消去法的产生原因,便于求解。

  • 步骤
  1. 设A(0)=A ,b(0)=b
  2. 将矩阵的第 i 行分别减去矩阵第一行的倍数C = ai1(0)/a11(0),(i = 1、2……、n)即构造消元矩阵L,其中ci1 = ai1(0)/a11(0)
    矩阵分解(一)——三角分解_第6张图片
    于是可得到:
    矩阵分解(一)——三角分解_第7张图片
  3. 接着将步骤2得到的A(1),将矩阵的第 i 行分别减去矩阵第一行的倍数C= ai2(0)/a22(0),即构造第二个消元矩阵L2,其中ci2 = ai2(0)/a22(0)
    矩阵分解(一)——三角分解_第8张图片
    于是可得到:
    矩阵分解(一)——三角分解_第9张图片
  4. 重复下去,只要主对角线没有出现零值,一直到n-1步后,可得到
    矩阵分解(一)——三角分解_第10张图片
    可得: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
    矩阵分解(一)——三角分解_第11张图片
    L是一个主对角元都是1的下三角矩阵,称为单位下三角矩阵。我们记U=A(n-1),则U是一个上三角矩阵,并且这时得到A的分解为:
    A = LU (L是单位下三角矩阵,U是上三角矩阵)
  5. 因为Ax = b,且A = LU ,设y = L-1b,则可得到下面两个方程:
    y = L-1b (下三角方程组) 、Ux = y (上三角方程组)
  6. 向前消去法:对于y = L-1b,其第1个方程只含y1,第2个方程只含y1和y2……也可以一个个地逐次求出y1,y2,…,yn
  7. 向后回代法:对于Ux = y,其第n个方程只含xn,第n-1个方程只含xn和xn-1……因而可以一个个地依次求出xn,xn-1,…,x1,从而解出式中的解。

代码展示

矩阵分解(一)——三角分解_第12张图片

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 也是 一个三角分解。

你可能感兴趣的:(math)