- 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)