Integral definite (area di bawah kurva) dan indefinite (antiderivative), Riemann sum逼近, dan Fundamental Theorem of Calculus — konsep ini muncul dalam area/volume numerik, probability dari PDF, accumulated cost, dan numerical methods.

Setelah di episode 22 kita mempelajari turunan — laju perubahan instan — pada episode ini kita mempelajari integral: kebalikan dari turunan. Jika turunan memberitahu kita "seberapa cepat" sesuatu berubah, integral memberitahu kita "berapa total" yang telah terakumulasi. Dalam programming, integral muncul dalam menghitung area, volume, probability dari PDF, dan accumulated cost.
Mengapa integral penting? Karena banyak masalah dunia nyata melibatkan akumulasi dari rate yang terus berubah: jarak dari kecepatan, total biaya dari marginal cost, probability dari density function. Integral memberikan cara untuk menghitung total ini secara presisi.
Integral didefinisikan sebagai Riemann sum: jumlah area dari banyak persegi panjang tipis yang mendekati kurva.
import math
def riemann_sum(f, a, b, n):
"""Riemann sum: n persegi panjang dari a ke b."""
dx = (b - a) / n
total = 0
for i in range(n):
x = a + i * dx
total += f(x) * dx
return total
# Integral x² dari 0 ke 2 = 8/3 ≈ 2.6667
f = lambda x: x**2
exact = 8/3
print("Riemann sum: ∫₀² x² dx = 8/3 ≈ 2.6667\n")
for n in [10, 100, 1000, 10000]:
approx = riemann_sum(f, 0, 2, n)
error = abs(approx - exact)
print(f" n={n:>5}: {approx:.6f} (error: {error:.2e})")∫[a,b] f(x) dx = area di bawah kurva f(x) dari a ke b.
import math
# ∫xⁿ dx = x^(n+1)/(n+1) + C
# ∫sin(x) dx = -cos(x) + C
# ∫cos(x) dx = sin(x) + C
# ∫eˣ dx = eˣ + C
# ∫(1/x) dx = ln|x| + C
def integral_xn(n, a, b):
"""∫[a,b] xⁿ dx = [x^(n+1)/(n+1)]_a^b."""
return (b**(n+1) - a**(n+1)) / (n+1)
def integral_sin(a, b):
"""∫[a,b] sin(x) dx = [-cos(x)]_a^b."""
return -math.cos(b) + math.cos(a)
print("Verifikasi integral dasar:")
print(f" ∫[0,1] x² dx = {integral_xn(2, 0, 1):.4f} (exact: 1/3)")
print(f" ∫[0,π] sin(x) dx = {integral_sin(0, math.pi):.4f} (exact: 2)")
print(f" ∫[0,1] x³ dx = {integral_xn(3, 0, 1):.4f} (exact: 1/4)")Part 1: Jika F(x) adalah antiderivative dari f(x), maka ∫[a,b] f(x) dx = F(b) - F(a).
Part 2: d/dx ∫[a,x] f(t) dt = f(x) — turunan dari integral adalah fungsi asli.
# Jika f(x) = 2x, maka F(x) = x² + C
# ∫[1,3] 2x dx = F(3) - F(1) = 9 - 1 = 8
def f(x):
return 2*x
def F(x):
"""Antiderivative of 2x = x²."""
return x**2
a, b = 1, 3
result = F(b) - F(a)
print(f"∫[{a},{b}] 2x dx = F({b}) - F({a}) = {result}")
# Verifikasi dengan Riemann sum
approx = riemann_sum(f, a, b, 10000)
print(f"Riemann sum (n=10000): {approx:.4f}")from scipy import integrate
import math
# ∫[0,π] sin(x) dx
result, error = integrate.quad(math.sin, 0, math.pi)
print(f"∫[0,π] sin(x) dx = {result:.6f} (error: {error:.2e})")
print(f"Exact: 2.0")
# ∫[0,∞] e^(-x²) dx = √π/2 (Gaussian integral)
result, error = integrate.quad(lambda x: math.exp(-x**2), 0, float('inf'))
print(f"\n∫[0,∞] e^(-x²) dx = {result:.6f}")
print(f"√π/2 = {math.sqrt(math.pi)/2:.6f}")import math
from scipy import integrate
def normal_pdf(x, mu=0, sigma=1):
"""Normal distribution PDF."""
return (1 / (sigma * math.sqrt(2 * math.pi))) * math.exp(-0.5 * ((x - mu) / sigma)**2)
# P(-1 < X < 1) untuk normal(0,1)
prob, _ = integrate.quad(normal_pdf, -1, 1)
print(f"P(-1 < X < 1) for N(0,1) = {prob:.4f}")
print(f"Expected: ~0.6827 (68-95-99.7 rule)")
# P(-2 < X < 2)
prob2, _ = integrate.quad(normal_pdf, -2, 2)
print(f"P(-2 < X < 2) for N(0,1) = {prob2:.4f}")
print(f"Expected: ~0.9545")import math
from scipy import integrate
# Marginal cost: MC(q) = 2q + 10 (biaya tambahan untuk unit ke-q)
def marginal_cost(q):
return 2*q + 10
# Total cost = ∫[0,Q] MC(q) dq + fixed_cost
fixed_cost = 1000
total_cost, _ = integrate.quad(marginal_cost, 0, 100)
print(f"Marginal cost: MC(q) = 2q + 10")
print(f"Total cost untuk Q=100: {total_cost + fixed_cost:,.0f}")
# Verifikasi: ∫(2q+10)dq = q² + 10q, dari 0 ke 100 = 10000+1000 = 11000
exact = 100**2 + 10*100
print(f"Exact: {exact + fixed_cost:,.0f}")from scipy import integrate
import math
# Volume of revolution: ∫[a,b] π × [f(x)]² dx
def f(x):
return math.sqrt(x) # Rotasi y = √x dari 0 ke 4
def volume_integrand(x):
return math.pi * f(x)**2
volume, _ = integrate.quad(volume_integrand, 0, 4)
print(f"Volume of revolution (y=√x, 0 to 4): {volume:.4f}")
# Exact: π × ∫[0,4] x dx = π × 8 = 25.13...
print(f"Exact: {8 * math.pi:.4f}")Note
Riemann sum dengan n persegi panjang memberikan逼近 yang cukup baik untuk banyak aplikasi. Tetapi untuk akurasi tinggi, gunakan library numerik seperti SciPy yang menggunakan adaptive quadrature — otomatis menyesuaikan jumlah titik berdasarkan kompleksitas fungsi.
Inti yang harus dibawa pulang:
∫[a,b] f(x) dx = area di bawah kurva dari a ke b.integrate.quad() untuk integral numerik yang akurat.Di episode 24 selanjutnya kita akan mempelajari multivariable calculus dan gradients — gradient vector, directional derivative, dan bagaimana ini menjadi fondasi dari backpropagation di neural networks!