NIM : 2110129120009
Gaya Bandul
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# Parameter
g = 9.8 # percepatan gravitasi bumi (m/s^2)
L = 1.0 # panjang tali (m)
theta0 = np.pi / 4 # sudut awal
omega0 = 0 # kecepatan sudut awal
t_max = 10 # waktu simulasi maksimum (s)
dt = 0.01 # delta waktu
# Fungsi animasi
def animate(i):
global theta, omega, line
# Integrasikan persamaan gerak menggunakan metode Euler
omega_new, alpha_new = pendulum_motion(theta[i], omega[i])
omega[i+1] = omega[i] + alpha_new * dt
theta[i+1] = theta[i] + omega[i+1] * dt
# Update posisi bandul
line.set_xdata([0, L*np.sin(theta[i+1])])
line.set_ydata([0, -L*np.cos(theta[i+1])])
# Set label sudut
ax.set_title(f"Sudut: {theta[i+1]*180/np.pi:.1f} derajat")
return line,
# Inisialisasi simulasi
theta = np.zeros(int(t_max/dt)+1)
omega = np.zeros(int(t_max/dt)+1)
theta[0] = theta0
omega[0] = omega0
# Animasi
anim = FuncAnimation(fig, animate, frames=int(t_max/dt), interval=dt*1000, blit=True)
# Tampilkan animasi
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
2. Kemudian, beberapa parameter seperti percepatan gravitasi bumi (g), panjang tali (L),
sudut awal (theta0), kecepatan sudut awal (omega0), waktu simulasi maksimum
(t_max), dan delta waktu (dt) didefinisikan.
# Parameter
g = 9.8 # percepatan gravitasi bumi (m/s^2)
L = 1.0 # panjang tali (m)
theta0 = np.pi / 4 # sudut awal
omega0 = 0 # kecepatan sudut awal
t_max = 10 # waktu simulasi maksimum (s)
dt = 0.01 # delta waktu
# Fungsi animasi
def animate(i):
global theta, omega, line
# Integrasikan persamaan gerak menggunakan metode Euler
omega_new, alpha_new = pendulum_motion(theta[i], omega[i])
omega[i+1] = omega[i] + alpha_new * dt
theta[i+1] = theta[i] + omega[i+1] * dt
# Update posisi bandul
line.set_xdata([0, L*np.sin(theta[i+1])])
line.set_ydata([0, -L*np.cos(theta[i+1])])
# Set label sudut
ax.set_title(f"Sudut: {theta[i+1]*180/np.pi:.1f} derajat")
return line,
# Inisialisasi simulasi
theta = np.zeros(int(t_max/dt)+1)
omega = np.zeros(int(t_max/dt)+1)
theta[0] = theta0
omega[0] = omega0
# Plot bandul awal
fig, ax = plt.subplots()
ax.set_xlim(-L-0.5, L+0.5)
ax.set_ylim(-L-0.5, 0.5)
line, = ax.plot([0, L*np.sin(theta0)], [0, -L*np.cos(theta0)], 'o-', lw=2)
ax.set_aspect('equal')
ax
Selanjutnya, program melakukan inisialisasi simulasi dengan mengatur array theta dan
omega dengan panjang yang sama dengan jumlah waktu simulasi maksimum t_max dibagi
delta waktu dt, ditambah satu. Kemudian, nilai sudut awal theta0 dan kecepatan sudut awal
omega0 disimpan di theta[0] dan omega[0].
Setelah itu, program membuat plot awal dengan menggunakan objek subplot dari
matplotlib. Objek ini memungkinkan kita untuk membuat plot dengan beberapa sumbu,
sehingga plot bandul dapat ditampilkan dalam satu gambar bersama dengan label sumbu x
dan y. Kemudian, program mengatur batas sumbu x dan y dengan menggunakan set_xlim dan
set_ylim, serta menambahkan grid pada plot dengan grid().
Program kemudian membuat garis awal yang merepresentasikan posisi bandul pada
waktu awal dengan menggunakan plot(). Setelah garis awal dibuat, program membuat
animasi dengan menggunakan objek FuncAnimation dari matplotlib.animation.
FuncAnimation akan memanggil fungsi animate pada setiap frame animasi.
Fungsi animate akan menghitung sudut dan kecepatan sudut baru dengan menggunakan
persamaan gerak bandul dan metode Euler, kemudian mengupdate posisi garis dengan
set_xdata dan set_ydata. Terakhir, fungsi animate akan mengembalikan objek garis yang telah
diupdate.
Akhirnya, program menampilkan animasi dengan plt.show(). Setiap frame animasi akan
diperbarui setiap dt*1000 milidetik, sesuai dengan interval yang telah ditentukan pada objek
FuncAnimation.