Skip to content

Commit 26b2402

Browse files
menambahkan algoritma terbaru (#345)
* menambahkan algoritma terbaru * fix : memperbaiki sytax \ * feat: menambahkan faktorisasi LU * fix: memperbaiki test * fix: memperbaiki test * fix: memperbaiki test
1 parent ae9c367 commit 26b2402

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# https://en.wikipedia.org/wiki/LU_decomposition#Algorithms
2+
3+
from typing import Union
4+
5+
6+
def LU(A: list[list[Union[int, float]]]) -> list[list[Union[int, float]]]:
7+
"""
8+
>>> A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]]
9+
>>> L, U = LU(A)
10+
>>> L
11+
[[1, 0, 0], [2.0, 1, 0], [-1.0, 7.0, 1]]
12+
>>> U
13+
[[2, 3, 1], [0.0, 1.0, 5.0], [0.0, 0.0, -29.0]]
14+
"""
15+
n = len(A)
16+
L = [[1 if i == j else 0 for j in range(n)] for i in range(n)]
17+
U = [[A[i][j] for j in range(n)] for i in range(n)]
18+
19+
for k in range(n - 1):
20+
if U[k][k] == 0:
21+
22+
raise ValueError("Faktorisasi LU tidak ada")
23+
for i in range(k + 1, n):
24+
L[i][k] = U[i][k] / U[k][k]
25+
for j in range(k, n):
26+
U[i][j] -= L[i][k] * U[k][j]
27+
return L, U
28+
29+
30+
def main(args=None):
31+
import doctest
32+
33+
doctest.testmod()
34+
A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]]
35+
L, U = LU(A)
36+
print(L)
37+
print(U)
38+
39+
40+
if __name__ == "__main__":
41+
main()
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# https://en.wikipedia.org/wiki/LU_decomposition#Algorithms
2+
from typing import Union
3+
4+
5+
def LU(A: list[list[Union[int, float]]]) -> list[list[Union[int, float]]]:
6+
"""
7+
>>> A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]]
8+
>>> L, U = LU(A)
9+
>>> L
10+
[[1, 0, 0], [2.0, 1, 0], [-1.0, 7.0, 1]]
11+
>>> U
12+
[[2, 3, 1], [0.0, 1.0, 5.0], [0.0, 0.0, -29.0]]
13+
"""
14+
n = len(A)
15+
L = [[1 if i == j else 0 for j in range(n)] for i in range(n)]
16+
U = [[A[i][j] for j in range(n)] for i in range(n)]
17+
18+
for k in range(n - 1):
19+
if U[k][k] == 0:
20+
raise ValueError("Faktorisasi LU tidak ada")
21+
for i in range(k + 1, n):
22+
L[i][k] = U[i][k] / U[k][k]
23+
for j in range(k, n):
24+
U[i][j] -= L[i][k] * U[k][j]
25+
return L, U
26+
27+
28+
def main(args=None):
29+
import doctest
30+
31+
doctest.testmod()
32+
A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]]
33+
L, U = LU(A)
34+
for row in L:
35+
print(row)
36+
print("\n")
37+
for row in U:
38+
print(row)
39+
40+
41+
if __name__ == "__main__":
42+
main()

0 commit comments

Comments
 (0)