I'm trying to implement, using python, a primitive (without import a library, such scipy or numpy) Doolittle LU decomposition for square matrices. Until now, here's my code.
def luDecomposition(mat, n):
lower = [[0 for x in range(n)]
for y in range(n)]
upper = [[0 for x in range(n)]
for y in range(n)]
# Decomposing matrix into Upper
# and Lower triangular matrix
for i in range(n):
# Upper Triangular
for k in range(i, n):
# Summation of L(i, j) * U(j, k)
soma = 0
for j in range(i):
soma += (lower[i][j] * upper[j][k])
# Evaluating U(i, k)
upper[i][k] = mat[i][k] - soma
# Lower Triangular
for k in range(i, n):
if (i == k):
lower[i][i] = 1 # Diagonal as 1
else:
# Summation of L(k, j) * U(j, i)
soma = 0
for j in range(i):
soma += (lower[k][j] * upper[j][i])
# Evaluating L(k, i)
lower[k][i] = int((mat[k][i] - soma) /
upper[i][i])
# setw is for displaying nicely
print(" L \t\t U ")
# Displaying the result :
for i in range(n):
# Lower
for j in range(n):
print(lower[i][j], end="\t")
print("", end="\t")
# Upper
for j in range(n):
print(upper[i][j], end="\t")
print("")
# Driver code
mat = [[4, 2, -1, 1],
[8, 4, 2, -2],
[1, 4, 2, -2],
[2, 1, -2, 6]]
luDecomposition(mat, 4)
However, I'm getting the following error:
lower[k][i] = int((mat[k][i] - soma) / ZeroDivisionError : division by zero.
I couldn't solve this problem until now. There is any theoretical error on my code?
if (upper[i][i]!=0): lower[k][i] = (mat[k][i] - soma) \/(upper[i][i])
"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.