From 5cde83f23b361d45251c3ca5091b504815853669 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Tue, 30 Dec 2025 07:03:56 +0700 Subject: [PATCH 1/2] menambahkan algoritma terbaru --- .../linear_algebra/LU_decomposition.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 implementation/linear_algebra/LU_decomposition.py diff --git a/implementation/linear_algebra/LU_decomposition.py b/implementation/linear_algebra/LU_decomposition.py new file mode 100644 index 00000000..24156e29 --- /dev/null +++ b/implementation/linear_algebra/LU_decomposition.py @@ -0,0 +1,41 @@ +# https://en.wikipedia.org/wiki/LU_decomposition#Algorithms + + +def LU(A) -> tuple: + """ + >>> A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]] + >>> L, U = LU(A) + >>> L + [[1, 0, 0], [2.0, 1, 0], [-1.0, 7.0, 1]] + >>> U + [[2, 3, 1], [0.0, 1.0, 5.0], [0.0, 0.0, -29.0]] + """ + n = len(A) + L = [[1 if i == j else 0 for j in range(n)] for i in range(n)] + U = [[A[i][j] for j in range(n)] for i in range(n)] + + for k in range(n - 1): + if U[k][k] == 0: + raise ValueError("Faktorisasi LU tidak ada") + for i in range(k + 1, n): + L[i][k] = U[i][k] / U[k][k] + for j in range(k, n): + U[i][j] -= L[i][k] * U[k][j] + return L, U + + +def main(args=None): + import doctest + + doctest.testmod() + A = [[2, 3, 1], [4, 7, 7], [-2, 4, 5]] + L, U = LU(A) + for row in L: + print(row) + print("\n") + for row in U: + print(row) + + +if __name__ == "__main__": + main() From b8627c1b91006d0887ca621cd007e415f764bf64 Mon Sep 17 00:00:00 2001 From: Arlan Tengga Date: Sat, 3 Jan 2026 15:52:00 +0700 Subject: [PATCH 2/2] feat: menambahkan algoritma taylor --- math/deret_taylor.py | 129 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 math/deret_taylor.py diff --git a/math/deret_taylor.py b/math/deret_taylor.py new file mode 100644 index 00000000..8eb1c3a1 --- /dev/null +++ b/math/deret_taylor.py @@ -0,0 +1,129 @@ +# macam macam deret taylor +# https://en.wikipedia.org/wiki/Taylor_series +import math + + +def faktorial(n : int = 2) -> int: + """ + Fungsi untuk kalkulasi faktorial + + parameter : + n = bilangan bulat + + return : + hasil = hasil dari operasi faktorial + """ + if n == 1 or n == 0: + return 1 + if n > 1: + return n * faktorial(n - 1) + + +def sin(x : float) -> float: + """ + Fungsi untuk kalkulasi dari deret sin. + Input dari fungsi ini dikonvergensi menjadi + radian. + + >>> sin(0) + 0.0 + >>> sin(45) + 0.7071067811865475 + """ + result = 0.0 + interable = 10 + radian = x * math.pi / 180 + for i in range(interable + 1): + numerator = math.pow(radian, (1 + i * 2)) * math.pow(-1, i) + detector = faktorial((1 + 2 * i)) + result = result + (numerator / detector) + return float(result) + + +def cos(x : float) -> float: + """ + Fungsi untuk kalkulasi dari deret cosinus. + Input dari fungsi ini dikonvergensi menjadi + radian. + + >>> cos(0) + 1.0 + >>> cos(45) + 0.7071067811865475 + """ + result = 0.0 + interable = 10 + radian = x * math.pi / 180 + for i in range(interable): + numerator = math.pow(radian, 2 * i) * math.pow(-1, i) + detector = faktorial(2 * i) + result = result + (numerator / detector) + return float(result) + + +def euler(x: int = 1) -> float: + """ + Fungsi untuk kalkulasi dari deret + taylor euler e^x + + >>> euler(1) + 2.7182815255731922 + >>> euler(2) + 7.3887125220458545 + """ + result = 0.0 + interable = 10 + for i in range(interable): + numerator = math.pow(x, (i)) + detector = faktorial(i) + result = result + (numerator / detector) + return float(result) + + +def ln(x : float) -> float: + """ + Fungsi untuk melakukan kalkulasi deret taylor + ln(x + 1).Dengan batas -1 < x <= 1. + + + >>> ln(0.5) + 0.4054346478174603 + >>> ln(1) + 0.6456349206349207 + """ + if x > -1 and x <= 1: + result = 0.0 + interable = 10 + for i in range(1, interable + 1): + numerator = math.pow(x, i) * math.pow(-1, i + 1) + detector = i + result = result + (numerator / detector) + return float(result) + else : + return ValueError("Angka tidak valid") + + +def main(args=None): + import doctest + + doctest.testmod() + + # test untuk fungsi cos + print(cos(0)) + print(cos(45)) + + # test untuk fungsi sin + print(sin(0)) + print(sin(45)) + + # test untuk fungsi euler + print(euler(1)) + print(euler(2)) + + # test untuk fungsi ln(1 + x) + print(ln(0.5)) + print(ln(1)) + + +if __name__ == "__main__": + main()