Assignment 9
Assignment 9
1
y_values, t_values = RK4(t_start, t_end, np.array([theta0, omega0]),␣
↪pendulum_ode, n_steps)
theta_values = y_values[:, 0]
def init():
line.set_data([], [])
return line,
def update(frame):
theta = theta_values[frame]
x = l * np.sin(theta)
y = -l * np.cos(theta) # Negative because y-axis points upward
line.set_data([0, x], [0, y])
return line,
rc('animation', html='jshtml')
animate_pendulum(t_values, theta_values, l)
2
[9]: <matplotlib.animation.FuncAnimation at 0x105cc7e10>
# For the driven case, we now use RK4 with extra parameters.
def RK4_driven(t0, tn, y0, f, n, *params):
t = np.linspace(t0, tn, n)
h = (tn - t0) / n
y = np.zeros((n, y0.size))
y[0, :] = y0
for i in range(1, n):
k1 = h * f(y[i-1], t[i-1], *params)
k2 = h * f(y[i-1] + k1/2, t[i-1] + h/2, *params)
k3 = h * f(y[i-1] + k2/2, t[i-1] + h/2, *params)
3
k4 = h * f(y[i-1] + k3, t[i-1] + h, *params)
y[i] = y[i-1] + (k1 + 2*k2 + 2*k3 + k4) / 6
return y, t
driven_pendulum_ode,
n_steps_driven, C, Omega)
theta_values_driven = y_values_driven[:, 0]
driven_pendulum_ode,
n_steps_driven, C,␣
↪Omega_resonant)
theta_values_resonant = y_values_resonant[:, 0]
total_distance = y[b, 0]
print("Total horizontal distance traveled:", total_distance, "m")