mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-30 16:31:08 +00:00
1495382367
* Fixed Bug #2257 * = Co-authored-by: Svn-Sp <svn-sp@email> Co-authored-by: Christian Clauss <cclauss@me.com>
35 lines
969 B
Python
35 lines
969 B
Python
"""Lower-Upper (LU) Decomposition."""
|
||
|
||
# lower–upper (LU) decomposition - https://en.wikipedia.org/wiki/LU_decomposition
|
||
import numpy
|
||
|
||
|
||
def LUDecompose(table):
|
||
# Table that contains our data
|
||
# Table has to be a square array so we need to check first
|
||
rows, columns = numpy.shape(table)
|
||
L = numpy.zeros((rows, columns))
|
||
U = numpy.zeros((rows, columns))
|
||
if rows != columns:
|
||
return []
|
||
for i in range(columns):
|
||
for j in range(i):
|
||
sum = 0
|
||
for k in range(j):
|
||
sum += L[i][k] * U[k][j]
|
||
L[i][j] = (table[i][j] - sum) / U[j][j]
|
||
L[i][i] = 1
|
||
for j in range(i, columns):
|
||
sum1 = 0
|
||
for k in range(i):
|
||
sum1 += L[i][k] * U[k][j]
|
||
U[i][j] = table[i][j] - sum1
|
||
return L, U
|
||
|
||
|
||
if __name__ == "__main__":
|
||
matrix = numpy.array([[2, -2, 1], [0, 1, 2], [5, 3, 1]])
|
||
L, U = LUDecompose(matrix)
|
||
print(L)
|
||
print(U)
|