Anda di halaman 1dari 13

Rajib Rafsanjani

140310220010

Laporan Akhir Praktikum


Komputasi dan Numerik

KN-9

PERSAMAAN
DIFERENSIAL BIASA
Nama : Rajib Rafsanjani

NPM : 140310220010

Hari/Tanggal :, Jumat/25 Mei 2023

Waktu : 15.00-16.00

Asisten Laboratorium : Tio Fahrizqi

LABORATORIUM KOMPUTASI
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PADJADJARAN
2023

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

LABORATORIUM KOMPUTASI
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN
ALAM
UNIVERSITAS PADJADJARAN

2023
LEMBAR PENGESAHAN
KN–9
PERSAMAAN DIFERENSIAL BIASA

Nama : Rajib Rafsanjani

NPM : 140310220010

Hari/Tanggal : Jumat/25 Mei 2023

Waktu : 15.00 – 16.00

Asisten Laboratorium : Tio Fahrizqi

Laporan Awal Presentasi Praktikum Laporan Akhir

Jatinangor, Mei 2023

Asisten

(………………………………)

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

I.Tujuan
Mampu memecahkan masalah persamaan diferensial biasa menggunakan metode Euler dan Runge-
Kutta.

II.Tugas Percobaan

1. Diketahui PDB sebagai berikut:


a. 𝑑𝑦/𝑑𝑡 = 5 exp(−0.2𝑡^2 ) – 𝑦^2 dengan 𝑦(0) = 0
b. 𝑑𝑦/𝑑𝑡 + 𝑡𝑦^2 = 1 dengan 𝑦(0) = 1
c. 𝑑𝑦/𝑑𝑡 + 10𝑦 = exp(−𝑡) dengan 𝑦(0) = 5
Tentukan 𝑦(0.1) menggunakan metode Forward Euler! Gunakan variasi ℎ ∈ {0.01 ; 0.001 ; 0.0001}

Listing Program :
#EULER MAJU
#a
print("a")
import numpy as np
t0 = 0
y0 = input("Masukkan nilai y0 :")
xn = 0.1
h1 = 0.01
h2 = 0.001
h3 = 0.0001
n1 = int((xn - t0)/h1)
n2 = int((xn - t0)/h2)
n3 = int((xn - t0)/h3)
def f(y,t) :
return 5*np.exp(-0.2*t**2) - y**2

t1 = np.zeros(n1+1)
y1 = np.zeros(n1+1)

t2 = np.zeros(n2+1)
y2 = np.zeros(n2+1)

t3 = np.zeros(n3+1)
y3 = np.zeros(n3+1)

t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0

for i in range (0, n1) :

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

y1 [i + 1] = y1[i] + h1 * f(y1[i],t1[i])
t1 [i + 1] = t1[i] + h1
for i in range (0, n2) :
y2 [i + 1] = y2[i] + h2 * f(y2[i],t2[i])
t2 [i + 1] = t2[i] + h2
for i in range (0, n3) :
y3 [i + 1] = y3[i] + h3 * f(y3[i],t3[i])
t3 [i + 1] = t3[i] + h3

print("Nilai y(0.1) dengan h = 0.01 :")


print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])
print("==============================================================
===========")
#b
print("b")
y0 = input("Masukkan nilai y0 :")
t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0
def f(y,t) :
return 1 - t * y**2
for i in range (0, n1) :
y1 [i + 1] = y1[i] + h1 * f(y1[i],t1[i])
t1 [i + 1] = t1[i] + h1
for i in range (0, n2) :
y2 [i + 1] = y2[i] + h2 * f(y2[i],t2[i])
t2 [i + 1] = t2[i] + h2
for i in range (0, n3) :
y3 [i + 1] = y3[i] + h3 * f(y3[i],t3[i])
t3 [i + 1] = t3[i] + h3
print("Nilai y(0.1) dengan h = 0.01 :")
print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

print("==============================================================
===========")
#c
print("c")
t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0
y0 = input("Masukkan nilai y0 :")
def f(y,t) :
return np.exp(-t) - 10*y
for i in range (0, n1) :
y1 [i + 1] = y1[i] + h1 * f(y1[i],t1[i])
t1 [i + 1] = t1[i] + h1
for i in range (0, n2) :
y2 [i + 1] = y2[i] + h2 * f(y2[i],t2[i])
t2 [i + 1] = t2[i] + h2
for i in range (0, n3) :
y3 [i + 1] = y3[i] + h3 * f(y3[i],t3[i])
t3 [i + 1] = t3[i] + h3
print("Nilai y(0.1) dengan h = 0.01 :")
print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

Tampilan Program :

Analisa Program :
Program di atas menggunakan metode Euler untuk menyelesaikan persamaan diferensial
biasa (ODE) dengan membagi interval [t0, xn] menjadi langkah-langkah yang lebih kecil
dengan menggunakan tiga nilai h yang berbeda (h1, h2, h3).
Analisisnya dapat diuraikan sebagai berikut:
a. Persamaan diferensial yang diselesaikan adalah: dy/dt = 5 * exp(-0.2 * t^2) - y^2
Langkah-langkah yang diambil:
 Menginisialisasi variabel t0, y0, xn sebagai nilai awal, nilai y0 diambil berdasarkan
angka yang diinput .
 Menghitung jumlah langkah n1, n2, dan n3 berdasarkan nilai h1, h2, dan h3.
 Membuat array t1, y1, t2, y2, t3, y3 untuk menyimpan nilai-nilai t dan y pada setiap
langkah.
 Melakukan iterasi menggunakan metode Euler untuk menghitung nilai y pada setiap
langkah.
 Menampilkan nilai y(0.1) yang dihitung menggunakan h1, h2, dan h3.
b. Persamaan diferensial yang diselesaikan adalah: dy/dt = 1 - t * y^2
Langkah-langkah yang diambil:
 Menginisialisasi kembali variabel y0 sebagai nilai yang diinput
 Mengulangi proses yang sama seperti pada bagian a untuk menghitung dan
menampilkan nilai y(0.1) menggunakan h1, h2, dan h3.
c. Persamaan diferensial yang diselesaikan adalah: dy/dt = exp(-t) - 10 * y
Langkah-langkah yang diambil:
 Menginisialisasi kembali variabel y0 sebagai nilai yang diinput .

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

 Mengulangi proses yang sama seperti pada bagian a untuk menghitung dan
menampilkan nilai y(0.1) menggunakan h1, h2, dan h3.
Analisis program ini menunjukkan penggunaan metode Euler untuk menyelesaikan
persamaan diferensial biasa dengan langkah-langkah yang lebih kecil. Semakin kecil nilai h,
semakin akurat hasil yang diperoleh. Nilai h berpengaruh terhadap hasil dan keakuratannya.

2. Selesaikan persoalan no. 1 untuk menentukan 𝑦(0.1) menggunakan metode RK-4! Kemudian
bandingkan hasilnya dengan metode Forward Euler.

Listing Program :

#RUNGE-KUTTA 4
#a
print("a")
import numpy as np
t0 = 0
y0 = input("Masukkan nilai y0 :")
xn = 0.1
h1 = 0.01
h2 = 0.001
h3 = 0.0001
n1 = int((xn - t0)/h1)
n2 = int((xn - t0)/h2)
n3 = int((xn - t0)/h3)
def f(y,t) :
return 5*np.exp(-0.2*t**2) - y**2

t1 = np.zeros(n1+1)
y1 = np.zeros(n1+1)

t2 = np.zeros(n2+1)
y2 = np.zeros(n2+1)

t3 = np.zeros(n3+1)
y3 = np.zeros(n3+1)

t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0

for i in range (0, n1) :


k1 = h1 * f(y1[i], t1[i])
k2 = h1 * f(y1[i] + h1/2, t1[i] + k1/2)
k3 = h1 * f(y1[i] + h1/2, t1[i] + k2/2)
k4 = h1 * f(y1[i] + h1, t1[i] + k3)
y1[i+1] = y1[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t1[i+1] = t1[i] + h1
for i in range (0, n2) :
k1 = h2 * f(y2[i], t2[i])
k2 = h2 * f(y2[i] + h2/2, t2[i] + k1/2)
k3 = h2 * f(y2[i] + h2/2, t2[i] + k2/2)
k4 = h2 * f(y2[i] + h2, t2[i] + k3)
y2[i+1] = y2[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

t2[i+1] = t2[i] + h2
for i in range (0, n3) :
k1 = h3 * f(y3[i], t3[i])
k2 = h3 * f(y3[i] + h3/2, t3[i] + k1/2)
k3 = h3 * f(y3[i] + h3/2, t3[i] + k2/2)
k4 = h3 * f(y3[i] + h3, t3[i] + k3)
y3[i+1] = y3[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t3[i+1] = t3[i] + h3

print("Nilai y(0.1) dengan h = 0.01 :")


print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])
print("==================================================================
=======")
#b
print("b")
y0 = input("Masukkan nilai y0 :")
t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0
def f(y,t) :
return 1 - t * y**2
for i in range (0, n1) :
k1 = h1 * f(y1[i], t1[i])
k2 = h1 * f(y1[i] + h1/2, t1[i] + k1/2)
k3 = h1 * f(y1[i] + h1/2, t1[i] + k2/2)
k4 = h1 * f(y1[i] + h1, t1[i] + k3)
y1[i+1] = y1[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t1[i+1] = t1[i] + h1
for i in range (0, n2) :
k1 = h2 * f(y2[i], t2[i])
k2 = h2 * f(y2[i] + h2/2, t2[i] + k1/2)
k3 = h2 * f(y2[i] + h2/2, t2[i] + k2/2)
k4 = h2 * f(y2[i] + h2, t2[i] + k3)
y2[i+1] = y2[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t2[i+1] = t2[i] + h2
for i in range (0, n3) :
k1 = h3 * f(y3[i], t3[i])
k2 = h3 * f(y3[i] + h3/2, t3[i] + k1/2)
k3 = h3 * f(y3[i] + h3/2, t3[i] + k2/2)
k4 = h3 * f(y3[i] + h3, t3[i] + k3)
y3[i+1] = y3[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t3[i+1] = t3[i] + h3
print("Nilai y(0.1) dengan h = 0.01 :")
print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])
print("==================================================================
=======")

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

#c
print("c")
t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

t3[0] = t0
y3[0] = y0
y0 = input("Masukkan nilai y0 :")
def f(y,t) :
return np.exp(-t) - 10*y
for i in range (0, n1) :
k1 = h1 * f(y1[i], t1[i])
k2 = h1 * f(y1[i] + h1/2, t1[i] + k1/2)
k3 = h1 * f(y1[i] + h1/2, t1[i] + k2/2)
k4 = h1 * f(y1[i] + h1, t1[i] + k3)
y1[i+1] = y1[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t1[i+1] = t1[i] + h1
for i in range (0, n2) :
k1 = h2 * f(y2[i], t2[i])
k2 = h2 * f(y2[i] + h2/2, t2[i] + k1/2)
k3 = h2 * f(y2[i] + h2/2, t2[i] + k2/2)
k4 = h2 * f(y2[i] + h2, t2[i] + k3)
y2[i+1] = y2[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t2[i+1] = t2[i] + h2
for i in range (0, n3) :
k1 = h3 * f(y3[i], t3[i])
k2 = h3 * f(y3[i] + h3/2, t3[i] + k1/2)
k3 = h3 * f(y3[i] + h3/2, t3[i] + k2/2)
k4 = h3 * f(y3[i] + h3, t3[i] + k3)
y3[i+1] = y3[i] + 1/6*(k1 + 2*k2 + 2*k3 + k4)
t3[i+1] = t3[i] + h3
print("Nilai y(0.1) dengan h = 0.01 :")
print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])
print("Nilai y(0.1) dengan h = 0.0001 : ")
print(y3[-1])

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

Tampilan Program :

Analisa Program :
Program di atas mengimplementasikan metode Runge-Kutta orde 4 (RK4) untuk
menyelesaikan persamaan diferensial biasa (ODE) dalam tiga kasus yang berbeda. Program
ini menggunakan beberapa h dan menghitung nilai y pada titik t = 0.1.
Kasus a:
 Persamaan diferensial: y' = 5e^(-0.2t^2) - y^2
 Metode RK4 digunakan untuk mencari solusi numerik dari ODE ini.
 Program ini menghitung nilai y(0.1) dengan tiga nilai h yang berbeda (0.01, 0.001,
0.0001).
 Hasilnya dicetak dan ditampilkan.
Kasus b:
 Persamaan diferensial: y' = 1 - ty^2
 Metode RK4 digunakan untuk mencari solusi numerik dari ODE ini.
 Program ini juga menghitung nilai y(0.1) dengan tiga nilai h yang berbeda (0.01,
0.001, 0.0001).
 Hasilnya dicetak dan ditampilkan.
Kasus c:
 Persamaan diferensial: y' = e^(-t) - 10y
 Metode RK4 digunakan untuk mencari solusi numerik dari ODE ini.
 Program ini juga menghitung nilai y(0.1) dengan tiga nilai h yang berbeda (0.01,
0.001, 0.0001).
 Hasilnya dicetak dan ditampilkan.

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

Perbandingan dengan metode Euler Maju (Forward Euler): Metode RK4 memberikan hasil
yang lebih akurat dibandingkan dengan metode Euler Maju (Forward Euler) dalam
menyelesaikan ODE. RK4 menggunakan pendekatan yang lebih rumit dengan menggunakan
empat langkah iterasi (k1, k2, k3, k4) untuk menghitung nilai y pada setiap langkah. Hal ini
menghasilkan estimasi yang lebih baik untuk solusi numerik ODE.

Dalam kasus-kasus di atas, dengan menggunakan nilai h yang sama (0.01, 0.001, 0.0001),
metode RK4 memberikan hasil yang lebih akurat dibandingkan dengan metode Euler Maju. Ini
terlihat dari perbedaan nilai y(0.1) yang dihasilkan oleh kedua metode pada setiap kasus.

Jadi, dalam analisis perbandingan dengan metode Euler Maju, metode RK4 memberikan solusi
numerik yang lebih akurat dan dapat diandalkan untuk ODE.

3. Apabila diketahui suatu fungsi diferensial dengan nilai awal 𝑦0 pada titik 𝑡0, bagaimana cara
menentukan nilai 𝑦 pada suatu titik 𝑡 yang terletak sebelum 𝑡0 (𝑡 < 𝑡0)? Metode apa yang digunakan
dan turunkan rumusnya!

Jawab :

Untuk menentukan nilai 𝑦 pada suatu titik 𝑡 yang terletak sebelum 𝑡0 (𝑡 < 𝑡0), yaitu dengan
menggunakan metode Euler Mundur (Backward Euler method). Metode ini adalah metode numerik
yang dapat digunakan untuk menyelesaikan persamaan diferensial biasa (ODE) dengan kondisi awal.
Dalam metode Euler Mundur, kita menggunakan pendekatan ke belakang untuk mencari nilai 𝑦 pada
titik 𝑡. Rumusnya adalah sebagai berikut:

𝑦𝑛 = 𝑦𝑛₋₁ + ℎ * 𝑓(𝑡ₙ, 𝑦ₙ)

di mana:
 𝑦𝑛 adalah nilai 𝑦 pada titik 𝑡ₙ
 𝑦𝑛₋₁ adalah nilai 𝑦 pada titik sebelumnya, 𝑡ₙ₋₁
 ℎ adalah langkah waktu (interval waktu antara 𝑡ₙ dan 𝑡ₙ₋₁)
 𝑓(𝑡ₙ, 𝑦ₙ) adalah fungsi diferensial yang ingin diselesaikan pada titik 𝑡ₙ

II.Tugas Akhir
1. Jelaskan mengapa nilai ℎ sangat berpengaruh terhadap error yang dihasilkan!

𝑑𝑦/𝑑𝑡 = 4𝑡^3 + 𝑡^2 + 10𝑡 + 7

Selesaikan persamaan diferensial biasa di atas secara analitik!


Jawab :

Dalam metode numerik seperti metode Euler atau metode Runge-Kutta, kita mengaproksimasi
turunan sebuah fungsi dengan membagi rentang interval kecil ℎ. Semakin kecil nilai ℎ, semakin
halus aproksimasi turunan yang kita peroleh. Dalam hal ini, jika kita menggunakan nilai ℎ yang
terlalu besar, kita dapat kehilangan perubahan signifikan dalam fungsi dan akurasi aproksimasi
turunan akan menurun. Sebaliknya, jika kita menggunakan nilai ℎ yang terlalu kecil, maka itu
akan meningkatkan akurasi

Langkah 1: Integrasikan Persamaan


∫ 𝑑𝑦/𝑑𝑡 dt = ∫ (4𝑡^3 + 𝑡^2 + 10𝑡 + 7) dt
∫ 𝑑𝑦/𝑑𝑡 dt = ∫ 4𝑡^3 dt + ∫ 𝑡^2 dt + ∫ 10𝑡 dt + ∫ 7 dt

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

Langkah 2: Integrasikan setiap suku


∫ 𝑑𝑦/𝑑𝑡 dt = 𝑡^4 + (1/3)𝑡^3 + 5𝑡^2 + 7𝑡 + 𝐶

Langkah 3: Menyederhanakan hasil


𝑦 = 𝑡^4 + (1/3)𝑡^3 + 5𝑡^2 + 7𝑡 + 𝐶

2. kiPergerakan suatu sistem massa, pegas dan damper mengalami pergerakan setelah gaya aktuasi
F(t) diberikan seperti gambar dibawah ini.

Jika persamaan pergerakan oleh massa ini diberikan oleh hukum Newton berupa persamaan:
𝑚𝑥̈ = −𝑘𝑥 − 𝑐𝑥̇ + 𝐹(𝑡) Jika 𝑥(0) = 𝑥̇(0) = 0 , 𝑚 = 5000 𝑘𝑔, 𝑐 = 5000𝑁𝑠/𝑚 , 𝑘 = 50000𝑁/𝑚 dan
gaya aktuasi sebesar 5000 𝑁 untuk 0 ≤ 𝑡 ≤ 1 detik dan 0 𝑁untuk𝑡 > 1 detik. Maka hitunglah
pergerakan dari massa benda selama 10 detik !

3. 𝑑𝑦/𝑑𝑡 = 1 + 𝑦 exp(−𝑡) dengan 𝑦(1) = 10 dan ℎ ∈ {0.1 ; 0.01} . Tentukan nilai 𝑦(0)

Jawab :

Listing Program :

#EULER MUNDUR
#a
print("a")
import numpy as np
t0 = 1
y0 = 10
xn = 0
h1 = 0.1
h2 = 0.01
n1 = int((t0 - xn)/h1)
n2 = int((t0 - xn)/h2)
def f(y,t) :
return 1 + y * np.exp(-t)

t1 = np.zeros(n1+1)
y1 = np.zeros(n1+1)

t2 = np.zeros(n2+1)
y2 = np.zeros(n2+1)

t1[0] = t0
y1[0] = y0

t2[0] = t0
y2[0] = y0

for i in range (0, n1) :

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python


Rajib Rafsanjani
140310220010

y1 [i + 1] = y1[i] - h1 * f(y1[i],t1[i])
t1 [i + 1] = t1[i] - h1
for i in range (0, n2) :
y2 [i + 1] = y2[i] - h2 * f(y2[i],t2[i])
t2 [i + 1] = t2[i] - h2

print("Nilai y(0.1) dengan h = 0.01 :")


print(y1[-1])
print("Nilai y(0.1) dengan h = 0.001 :")
print(y2[-1])

Tampilan Program :

KESIMPULAN

Metode Euler Maju: Metode Euler Maju adalah salah satu metode numerik yang paling sederhana
untuk memecahkan persamaan diferensial biasa. Ini menggunakan pendekatan garis lurus untuk
mengaproksimasi solusi dengan memperhitungkan turunan fungsi pada suatu titik. Kelebihan dari
metode ini adalah kemudahan implementasi dan komputasi yang cepat. Namun, metode ini cenderung
menghasilkan kesalahan yang lebih besar dibandingkan dengan metode yang lebih canggih.

Metode Euler Mundur: Metode Euler Mundur juga menggunakan pendekatan garis lurus, tetapi
dengan menggunakan turunan fungsi pada titik yang akan diestimasi. Metode ini lebih stabil daripada
metode Euler Maju dan lebih cocok untuk persamaan diferensial yang memiliki solusi yang tidak
stabil atau berubah tiba-tiba. Namun, metode Euler Mundur mungkin memerlukan iterasi untuk
menemukan nilai solusi yang akurat karena, seperti metode Euler Maju, nilai solusi seringkali tidak
stabil

Metode Runge-Kutta: Metode ini adalah metode numerik yang lebih canggih dan akurat untuk
memecahkan persamaan diferensial biasa, yang menghitung rata-rata tertimbang dari beberapa
pendekatan garis lurus untuk mengaproksimasi solusi. Metode ini lebih sering digunakan dalam
simulasi numerik dan komputasi ilmiah karena memberikan hasil yang lebih akurat daripada metode
Euler Maju atau Euler Mundur.

Diktat Praktikum Algoritma dan Pemrograman menggunakan bahasa Python

Anda mungkin juga menyukai