Sesi 5: Struktur Kontrol Perulangan
Dasar dari Simulasi dan Metode Numerik: Menjalankan instruksi berulang kali dengan for dan while.
I. Ulasan: Iterasi Definit dan Indefinit
Perulangan (Loop) adalah tulang punggung dari semua komputasi saintifik dan algoritma AI. Ini memungkinkan kita melakukan kalkulasi berulang-ulang tanpa menulis kode yang sama. Kita mengenal dua jenis utama:
Jenis Perulangan:
| Jenis | Sintaks Kunci | Kapan Digunakan | Contoh Aplikasi Saintifik |
|---|---|---|---|
| for (Definit) | for i in range(N): | Ketika jumlah iterasi sudah diketahui (N kali). | Menghitung total deret (misalnya, Deret Fourier), Integrasi Numerik. |
| while (Indefinit) | while kondisi_true: | Ketika perulangan harus berhenti berdasarkan kondisi (konvergensi). | Mencari akar persamaan (Metode Newton), Kriteria Konvergensi AI. |
Kontrol Aliran Loop: break dan continue
break: Menghentikan perulangan secara paksa, bahkan jika batasnya belum tercapai. Digunakan saat kriteria tertentu sudah terpenuhi (misalnya, menemukan solusi akar).
continue: Melompati sisa blok kode dalam iterasi saat ini dan melanjutkan ke iterasi berikutnya. Digunakan untuk melewati kasus-kasus data yang tidak valid.
II. Contoh Manual: Kalkulasi Integral Numerik Sederhana
Kita ingin menghitung perkiraan area di bawah kurva $f(x) = x^{2}$ dari $x=0$ sampai $x=4$ menggunakan 4 segmen (n=4). Lebar setiap segmen (h) adalah $4/4 = 1$. Metode Kotak.
2.1. Alur Logika Perulangan (for)
Area_Total = 0.0
h = 1.0
Batas_atas = 4
ITERASI (i=0 hingga i=3):
1. i=0: x = 0. Area = 0 + h * f(0) = 0 + 1 * 02 = 0. Area_Total = 0
2. i=1: x = 1. Area = 0 + h * f(1) = 0 + 1 * 12 = 1. Area_Total = 1
3. i=2: x = 2. Area = 0 + h * f(2) = 0 + 1 * 22 = 4. Area_Total = 5
4. i=3: x = 3. Area = 0 + h * f(3) = 0 + 1 * 32 = 9. Area_Total = 14
Hasil Akhir: 14 (Perkiraan)
Pola ini menunjukkan betapa pentingnya for loop untuk kalkulasi kumulatif (penjumlahan) dalam metode numerik.
III. Kode Praktik (Google Colab)
3.1. Kode Sederhana: Kalkulasi Total Deret
Menghitung total deret aritmetika dari 1 hingga $N$.
# for loop (Iterasi Definit)
N = 10
total_sum = 0
# range(1, N+1) berarti dari 1 sampai 10
for i in range(1, N + 1):
total_sum += i # total_sum = total_sum + i
print(f"Total deret 1 hingga {N}: {total_sum}")
# Penggunaan break (Contoh mencari elemen)
for i in range(1, 100):
if total_sum == 55:
print(f"Target 55 ditemukan pada i={i} (Berhenti).")
break
Total deret 1 hingga 10: 55 Target 55 ditemukan pada i=1 (Berhenti).
3.2. Kode Kompleks (Terarah AI/Math): Metode Numerik Integrasi Trapesium
Perkiraan Integral: Area ≈ $\sum \frac{h}{2} (f(xi) + f(xi+1))$. for loop adalah alat yang ideal untuk summation ini.
import math
def f(x):
# Fungsi yang akan diintegralkan: f(x) = sin(x)
return math.sin(x)
# Parameter Integrasi
a = 0.0 # Batas bawah
b = math.pi # Batas atas (sampai 3.14159...)
N = 100 # Jumlah segmen (semakin besar N, semakin akurat)
# Lebar Segmen (h)
h = (b - a) / N
integral_sum = 0.0
# Iterasi for loop dari segmen pertama hingga terakhir (N-1)
for i in range(N):
x_i = a + i * h
x_i_plus_1 = a + (i + 1) * h
# Formula Trapesium: (h/2) * (f(xi) + f(xi+1))
luas_trapesium = (h / 2) * (f(x_i) + f(x_i_plus_1))
integral_sum += luas_trapesium
print(f"Integral sin(x) dari 0 hingga π (N={N}): {integral_sum:.6f}")
print("Nilai Integral Sebenarnya: 2.000000")
Integral sin(x) dari 0 hingga π (N=100): 1.999836 Nilai Integral Sebenarnya: 2.000000
3.3. Kode Kompleks (Terarah AI): Metode Iterasi Konvergen (Babylonian)
Perulangan while digunakan untuk mencari akar kuadrat ($S$) secara iteratif hingga konvergen (perubahan sangat kecil). Formula Babylonian: xn+1 = (1 / 2) * (xn + (S / xn)).
# while loop (Iterasi Indefinit)
S = 25.0 # Angka yang dicari akar kuadratnya
epsilon = 0.0001 # Kriteria Konvergensi (Epsilon/Toleransi Error)
x_n = S / 2.0 # Tebakan awal (x0)
iterasi = 0
# Kondisi: Lanjutkan selama error lebih besar dari epsilon
while True:
iterasi += 1
# Formula Iterasi
x_next = 0.5 * (x_n + (S / x_n))
# Uji Konvergensi: abs(x_next - x_n) < epsilon
if abs(x_next - x_n) < epsilon:
# Kriteria terpenuhi, hentikan loop
break
x_n = x_next # Perbarui tebakan untuk iterasi berikutnya
print(f"Akar Kuadrat dari {S} adalah: {x_next:.4f}")
print(f"Konvergensi dicapai dalam {iterasi} iterasi.")
Akar Kuadrat dari 25.0 adalah: 5.0000 Konvergensi dicapai dalam 4 iterasi.
IV. Penugasan / PR Sesi 5: Simulasi Peluruhan Radioaktif
Tugas ini menggabungkan while loop (simulasi waktu) dan for loop (pencatatan data) untuk memodelkan peluruhan:
- Variabel: Tentukan N_awal (jumlah partikel awal = 1000) dan Laju_Peluruhan (0.1, atau 10% per satuan waktu).
- Loop Indefinit (while): Gunakan while loop. Lanjutkan simulasi selama N_partikel > 100.
- Simulasi: Di setiap iterasi, hitung jumlah partikel baru: Nbaru = Nsekarang × (1 − Laju_Peluruhan). Tambahkan satu ke variabel waktu.
- Output: Cetak hasil akhir: "Waktu yang dibutuhkan untuk mencapai ambang batas 100 partikel adalah X satuan waktu."