Diferensiasi dengan Python: Aturan Turunan, Difraksi Cahaya, dan Potensial Lennard-Jones

Python untuk Sains


Turunan mengukur laju perubahan — dan hampir semua hukum fisika ditulis dalam bahasa turunan. Pada artikel ini kita meninjau makna turunan, aturan-aturan diferensiasi, lalu menghitung turunan secara simbolik dengan SymPy dan memvisualkannya untuk dua kasus nyata: difraksi celah tunggal dan potensial Lennard-Jones.

Makna Geometris Turunan

Turunan f′(a) adalah kemiringan garis singgung kurva di titik a. Ia diperoleh dari limit kemiringan tali busur ketika jaraknya menyusut:

f'(a) = lim   [ f(a + Δx) - f(a) ] / Δx
        Δx→0
Turunan sebagai kemiringan garis singgung di sebuah titik
Turunan sebagai kemiringan garis singgung di sebuah titik

Aturan Diferensiasi

Dalam praktik, kita jarang memakai limit; kita memakai aturan berikut (dengan f, g fungsi dan a, b konstanta):

Jenis fungsiTurunan
Konstantad/dx (a) = 0
Jumlahd/dx (a·f + b·g) = a·f' + b·g'
Hasil kalid/dx (f·g) = f'·g + g'·f
Hasil bagid/dx (f/g) = (f'·g − g'·f) / g²
Rantaid/dx f(u) = (df/du)·(du/dx)
Pangkatd/dx (xⁿ) = n·xⁿ⁻¹
Eksponen & logd/dx eˣ = eˣ ; d/dx ln x = 1/x
Trigonometrid/dx sin x = cos x ; d/dx cos x = −sin x

Diferensiasi Simbolik dengan SymPy

SymPy menerapkan aturan-aturan itu secara otomatis. Turunan pertama dengan diff(f, x), turunan kedua dengan diff(f, x, 2).

from sympy import symbols, diff, sin
x = symbols('x')
f = sin(x) * x**2
print(diff(f, x))      # x**2*cos(x) + 2*x*sin(x)
print(diff(f, x, 2))   # turunan kedua

Contoh 1 — Difraksi Celah Tunggal

Intensitas cahaya pada difraksi celah tunggal adalah I(φ) = I₀ · sin²φ / φ², dengan φ sudut fase. Kita ambil I₀ = 1, lalu hitung turunan pertama dan kedua secara simbolik dan plot ketiganya.

from sympy import symbols, sin, diff, lambdify
import numpy as np, matplotlib.pyplot as plt
phi = symbols('phi', real=True)
I = sin(phi)**2 / phi**2
dI  = diff(I, phi)
d2I = diff(I, phi, 2)

fI  = lambdify(phi, I,  'numpy')
fdI = lambdify(phi, dI, 'numpy')
fd2I= lambdify(phi, d2I,'numpy')
p = np.linspace(-10, 10, 500)
plt.plot(p, fI(p),  label='I(φ)')
plt.plot(p, fdI(p), '--', label='dI/dφ')
plt.plot(p, fd2I(p),'-.', label='d²I/dφ²')
plt.legend(); plt.show()
I(φ) dan turunan pertama & keduanya
I(φ) dan turunan pertama & keduanya

Mengapa lambdify? Hasil diff berupa rumus SymPy. lambdify mengubahnya menjadi fungsi numerik yang bisa dihitung untuk seluruh array φ dan diplot Matplotlib. Puncak pusat pada φ = 0 (nilai limit I = 1) diapit puncak-puncak sekunder yang makin kecil.

Contoh 2 — Potensial Lennard-Jones

Potensial Lennard-Jones memodelkan energi interaksi dua atom netral terhadap jaraknya r:

V(r) = 4ε [ (σ/r)¹² − (σ/r)⁶ ]

Suku (σ/r)¹² adalah tolakan yang naik tajam saat atom berdekatan; suku −(σ/r)⁶ adalah tarikan (gaya dispersi London) yang lebih landai. Dengan ε = σ = 1:

import numpy as np, matplotlib.pyplot as plt
r = np.linspace(0.9, 3.0, 400)
V = 4*((1/r)**12 - (1/r)**6)
plt.plot(r, V); plt.xlabel('r/σ'); plt.ylabel('V/ε')
plt.show()
Sumur potensial Lennard-Jones; minimum di r = 2^(1/6)σ, V = −ε
Sumur potensial Lennard-Jones; minimum di r = 2^(1/6)σ, V = −ε

Gaya antar-atom: F = −dV/dr

Gaya adalah negatif turunan energi terhadap jarak. Kita cari juga jarak kesetimbangan (saat gaya nol) secara simbolik.

from sympy import symbols, diff, solve
r, eps, sig = symbols('r epsilon sigma', positive=True)
V = 4*eps*((sig/r)**12 - (sig/r)**6)
F = -diff(V, r)
print(solve(diff(V, r), r))   # [2**(1/6)*sigma]
Gaya F(r) = −dV/dr; F = 0 tepat di jarak kesetimbangan
Gaya F(r) = −dV/dr; F = 0 tepat di jarak kesetimbangan

Fisika di balik matematika. Kesetimbangan terjadi di dasar sumur potensial, yaitu saat turunan energi nol (F = 0). SymPy menyelesaikannya secara eksak: r = 21/6σ ≈ 1,122σ, dengan energi minimum V = −ε. Inilah jarak ikatan yang disukai kedua atom.

Penutup

Dengan SymPy kita menurunkan fungsi secara eksak, dan dengan lambdify + Matplotlib kita memvisualkannya. Dua contoh — difraksi dan Lennard-Jones — menunjukkan bahwa turunan bukan sekadar latihan kalkulus, melainkan alat untuk menemukan puncak intensitas, jarak kesetimbangan, dan gaya dalam sistem fisis nyata.

Ingin mengulang dasar Matplotlib & SymPy? Baca Visualisasi & Komputasi Simbolik: Matplotlib, SymPy, dan lambdify.

Catatan: seluruh contoh ditulis untuk Python 3 dengan berbagai editor seperti Spyder atau Visual Studio dan memerlukan numpy, matplotlib, serta sympy (tersedia di Anaconda). Gambar pada artikel ini dihasilkan langsung oleh kode di atas.

Ditulis untuk InspiraSains — belajar sains dan pemrograman secara gratis dan terbuka.

File Download: --File Download PDF--

Posting Komentar

Lebih baru Lebih lama

Formulir Kontak