计算方法(三)矩阵分解2-LU分解

原创
2020/09/17 13:20
阅读数 201
  1. LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,作为解线性方程以及优化高斯消去法的一个分解方法,在后续文章中会使用到。

如下列方程组Ax=b


系数矩阵A为

则矩阵可以被分解为LUx=b的形式系数矩阵分解为
其中对于矩阵L有

对于矩阵U有

Python实现

def LU_decomposition(A):
    n=len(A[0])
    L = np.zeros([n,n])
    U = np.zeros([n, n])
    for i in range(n):
        L[i][i]=1
        if i==0:
            U[0][0] = A[0][0]
            for j in range(1,n):
                U[0][j]=A[0][j]
                L[j][0]=A[j][0]/U[0][0]
        else:
                for j in range(i, n):#U
                    temp=0
                    for k in range(0, i):
                        temp = temp+L[i][k] * U[k][j]
                    U[i][j]=A[i][j]-temp
                for j in range(i+1, n):#L
                    temp = 0
                    for k in range(0, i ):
                        temp = temp + L[j][k] * U[k][i]
                    L[j][i] = (A[j][i] - temp)/U[i][i]
    return L,U

Matlab实现

function LU(a,n)
m = zeros(n,n);
for i = 1:n
  m(i,i) = 1;
end
for j = 1 : n-1
    if abs(a(j,j))<eps; 
        error('zero pivot encountered');    
    end
    for i = j+1 : n
        mult = a(i,j)/a(j,j);
        m(i,j) = mult;  
        for k = j:n
            a(i,k) = a(i,k) - mult*a(j,k);
        end
    end
end

注:Matlab其实自带了LU分解 lu(A)

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部