Anda di halaman 1dari 4

Nama : Lely Yanuarta

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

# Persamaan gerak bandul


def pendulum_motion(theta, omega):
    return omega, -g/L * np.sin(theta)

# 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.grid()
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')

# Animasi
anim = FuncAnimation(fig, animate, frames=int(t_max/dt), interval=dt*1000, blit=True)

# Tampilkan animasi
plt.show()

Penjelasan singkat tentang kode di atas:


 Pertama, kita mengimport NumPy dan Matplotlib untuk digunakan dalam program.
 Kemudian, kita mendefinisikan beberapa parameter seperti percepatan gravitasi,
panjang tali, sudut awal, kecepatan sudut awal, waktu simulasi maksimum, dan delta
waktu.
 Selanjutnya, kita mendefinisikan persamaan gerak bandul menggunakan fungsi
pendulum_motion.
 Kemudian, kita mendefinisikan fungsi animasi animate. Di dalam fungsi ini, kita
mengintegrasikan persamaan gerak menggunakan metode Euler, kemudian
memperbarui posisi bandul dan label sudut pada setiap frame animasi.
 Setelah itu, kita inisialisasi simulasi dengan membuat array untuk menyimpan sudut
dan kecepatan sudut, lalu menentukan sudut awal dan kecepatan sudut awal.
 Selanjutnya, kita membuat plot bandul awal dengan menggunakan Matplotlib.
 Terakhir, kita membuat animasi
Program di atas merupakan implementasi simulasi gerak bandul menggunakan metode Euler
pada Python dengan library NumPy dan Matplotlib. Berikut penjelasan kode programnya:
1. Pertama-tama, library NumPy dan Matplotlib di-import.

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

3. Selanjutnya, fungsi pendulum_motion(theta, omega) didefinisikan untuk menghitung


percepatan sudut dan percepatan radial menggunakan persamaan gerak bandul.

# Persamaan gerak bandul


def pendulum_motion(theta, omega):
    return omega, -g/L * np.sin(theta)

4. Fungsi animate(i) didefinisikan sebagai fungsi animasi. Pada setiap iterasi i,


persamaan gerak bandul diintegrasikan menggunakan metode Euler. Posisi bandul di-
update dan label sudut juga diperbarui pada setiap iterasi. Fungsi ini mengembalikan
objek line yang digunakan untuk menggambar bandul.

# 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,

5. Selanjutnya, simulasi diinisialisasi dengan menginisialisasi array theta dan omega,


serta mengatur nilai awalnya sesuai dengan nilai parameter yang sudah ditentukan.
Bandul awal digambar menggunakan Matplotlib.

# 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.

Anda mungkin juga menyukai