Visualisasi & Komputasi Simbolik: Matplotlib, SymPy, dan lambdify

Python untuk Sains


Sejauh ini kita sudah bisa menghitung dengan NumPy. Kini saatnya melihat hasilnya dalam bentuk grafik dengan Matplotlib, lalu menyelesaikan persamaan secara simbolik dengan SymPy, dan menjembatani keduanya memakai lambdify. Semua diilustrasikan dengan contoh fisika, kimia, dan material.

Matplotlib: Plot Pertama

Matplotlib membuat grafik hanya dengan beberapa baris kode. Kita mengimpor submodul pyplot dengan alias plt.

import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [5,2,4,4,8,7,4,8,10,9]
plt.plot(x, y)
plt.xlabel('Waktu (s)')
plt.ylabel('Suhu (degC)')
plt.show()

Fungsi yang paling sering dipakai: plot(), title(), xlabel(), ylabel(), grid(), legend(), dan show().

Kurva Halus dengan NumPy

Untuk kurva mulus, gunakan banyak titik lewat np.arange lalu terapkan fungsi ter-vektorisasi seperti np.sin.

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('x'); plt.ylabel('y')
plt.show()
Kurva y = sin(x) yang mulus karena memakai banyak titik
Kurva y = sin(x) yang mulus karena memakai banyak titik

Warna, Marker & Gaya Garis

Kita bisa mengatur tampilan garis dengan format string ringkas atau argumen kata kunci.

plt.plot(x, y, 'rd--')   # r=merah, d=berlian, --=putus-putus
plt.plot(x, y, color='red', linestyle='dashed',
         marker='o', linewidth=2)
Contoh gaya 'rd--': garis merah, penanda berlian, putus-putus
Contoh gaya 'rd--': garis merah, penanda berlian, putus-putus

Beberapa pilihan: warna (b g r c m y k), marker (o v ^ s p * + x D), dan gaya garis (- -- -. :).

Contoh Fisika: Bola Dilempar ke Atas

Seorang fisikawan melempar bola lurus ke atas dengan kecepatan awal v₀ = 5 m/s. Persamaan geraknya y = v₀t − ½gt². Kita plot posisi dan cari tinggi maksimum secara numerik.

import numpy as np
import matplotlib.pyplot as plt
vo, g = 5, 9.8
t = np.linspace(0, 1.03, 100)
y = [vo*u - g*u**2/2 for u in t]
plt.plot(t, y)
plt.title('Bola dilempar ke atas')
plt.xlabel('Waktu t [s]'); plt.ylabel('y(t) [m]')
ymax = max(y)
tmax = t[np.argmax(y)]
print(ymax, tmax)   # 1.2755 m, 0.5098 s
plt.show()
Posisi bola y(t); puncak pada ymax ≈ 1.28 m
Posisi bola y(t); puncak pada ymax ≈ 1.28 m

Evaluasi numerik. max(y) memberi nilai puncak, sedangkan np.argmax(y) memberi indeksnya — lalu t[np.argmax(y)] memberi waktu saat puncak tercapai.

Plot 3D: Permukaan z = f(x, y)

Untuk permukaan 3D, kita memakai gaya object-oriented dan np.meshgrid untuk membangun grid titik.

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-3, 3, 0.6)
X, Y = np.meshgrid(x, x)
Z = 3 + X + Y
fig = plt.figure()
axes = fig.add_subplot(projection='3d')
axes.plot_wireframe(X, Y, Z, color='skyblue')
axes.set_xlabel('X'); axes.set_ylabel('Y'); axes.set_zlabel('Z')
plt.show()
Permukaan bidang z = 3 + x + y (wireframe)
Permukaan bidang z = 3 + x + y (wireframe)

SymPy: Komputasi Simbolik

SymPy membuat Python bekerja dengan simbol, bukan hanya angka — sehingga bisa menyelesaikan persamaan dan menurunkan secara aljabar. Contoh: masalah bola tadi, kali ini secara simbolik.

from sympy import symbols, solve
vo, t, g = symbols('vo t g', real=True)
tmax = solve(vo - g*t, t)[0]     # saat v=0
y = vo*t - g*t**2/2
ymax = y.subs(t, tmax)
print(tmax)   # vo/g
print(ymax)   # vo**2/(2*g)

Alih-alih satu angka, SymPy memberi rumus umum: tmax = v₀/g dan ymax = v₀²/(2g) — persis seperti di buku fisika, dan berlaku untuk semua nilai v₀ dan g.

lambdify: dari Rumus ke Angka

Bagaimana jika kita ingin memplot hasil simbolik? lambdify mengubah ekspresi SymPy menjadi fungsi numerik yang bisa dihitung NumPy dan diplot Matplotlib.

from sympy import symbols, sin, diff, lambdify
import numpy as np, matplotlib.pyplot as plt
a, b, t = symbols('a b t', real=True)
f = a*sin(b*t)
deriv = diff(f, t)          # turunan simbolik: a*b*cos(b*t)

tims = np.linspace(0, 6, 200)
y = lambdify(t, f.subs({a:1, b:2}))     # jadi fungsi numerik
v = lambdify(t, deriv.subs({a:1, b:2}))
plt.subplot(1,2,1); plt.plot(tims, y(tims))
plt.subplot(1,2,2); plt.plot(tims, v(tims))
plt.tight_layout(); plt.show()
Fungsi f(t)=sin(2t) dan turunannya v(t)=2cos(2t)
Fungsi f(t)=sin(2t) dan turunannya v(t)=2cos(2t)

Alurnya: diff menurunkan secara simbolik → subs memasukkan nilai → lambdify mengubahnya menjadi fungsi numerik → Matplotlib memplotnya. Inilah cara menggabungkan kekuatan SymPy dan NumPy.

Penutup

Dengan Matplotlib kita memvisualkan data dan hasil simulasi; dengan SymPy kita memperoleh jawaban dalam bentuk rumus; dan dengan lambdify keduanya bekerja bersama. Kombinasi ini adalah perkakas sehari-hari untuk analisis sains dan teknik.

Ingin mengulang dasar NumPy? Baca Pustaka Python & NumPy: dari Loop Manual ke Komputasi Ter-vektorisasi.

Catatan: seluruh contoh ditulis untuk Python 3/ Spyder dan memerlukan matplotlib, numpy, serta sympy (semuanya tersedia di Anaconda). Gambar plot 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