Week 3 - Solving second order ODEs
AIM
To simulate the transient behaviour of a simple pendulum and to create an animation of its motion
OBJECTIVE
- To write a program in python that solves the second order ODE corresponding to motion of simple pendulum and to plot its angular displacement and angular velocity wrt time
- To create the animation of the motion of pendulum by simulating the motion between 0-20 sec for angular displacement =0 , angular velocity = 3 rad/sec at time =0
THEORY

When the bob of pendulum is displaced from its mean position to either extreme position and is released the pendulum will swing back and forth with periodic motion until the motion damps .By applying newtons second law for rotational system the equation of motion for the pendulum may be obtained as

GOVERNING EQUATIONS
To solve the above equation in python we need to transform the given second order ODE into first order ODE as

Represent them in matrix form

CODE
- At first math , matplotlib , numpy and scipy modules were imported for thier various functions
- Initial inputs such as b,g,I,m are provided according to data in the question
- An array of initial theta was created to define initial angular displacement and initial angular velocity
- An array of time span was created to store 100 equally spaced intervals between time 0 to 20 seconds
- To solve the second order ODE a function named ode function which stores the above matrix data in it.
- The given second order ODE was solved using odient command follows by proper syntax of the calling function and the result obtained was used to plot graph of variation of angular displacement and angular velocity wrt time
- Now for creating the animation of obtained harmonic motion of pendulum for loop was used and a loop counter variables was intiated the values of angular position is stored in a seperate variable called tmp and as is iterated in for loop .In this execution the one end of the string of pendulum was fixed and the other end moves according to the solution of the ODE solved and was plotted for each time interval of the time span
''' A program for solving second order ODEs and simulate its motion'''
import math
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
def ode_function(theta,t,b,g,l,m):
theta1 = theta[0]
theta2 = theta[1]
dtheta1_dt = theta2
dtheta2_dt = -(b/m)*theta2-(g/l)*math.sin(theta1)
dtheta_dt = [dtheta1_dt,dtheta2_dt]
return dtheta_dt
# Inputs
# damping coefficient
b = 0.05
# acceleration due to gravity(m/s^2)
g = 9.81
# length of string (m)
l = 1
# mass of bob (kg)
m = 1
# Initial Conditions
theta_0 = [0,3]
# time points
t_span = np.linspace(0,20,100)
# Solve ODE
theta = odeint(ode_function,theta_0,t_span,args = (b,g,l,m))
# Plotting the graph
plt.plot(t_span,theta[:,0],'b-',label=r'$\frac{d\theta1}{dt}=\theta2$')
plt.plot(t_span,theta[:,1],'r--',label=r'$\frac{d\theta2}{dt}=-\frac{b}{m}\theta2-\frac{g}{l}sin\theta1$')
plt.xlabel('Time (second)')
plt.ylabel('Plot')
plt.title('Damped Harmonic motion of a Simple Pendulum')
plt.legend(loc='best')
plt.grid()
plt.show()
# Iteration using for loop to create animation of motion of pendulum
loop_counter =1
tmp = theta[:,0]
for i in tmp:
x_start = 0
y_start = 0
x_end = l*math.sin(i)
y_end = -l*math.cos(i)
# Plotting for animation
plt.figure()
# Plotting String of pendulum
plt.plot([x_start,x_end],[y_start,y_end],linewidth=3)
# Plotting Bob of pendulum
plt.plot(x_end,y_end,'o',markersize=20,color='r')
# Plotting the rigid support through which string of pendulum is attached
plt.plot([-0.5,0.5],[0,0],linewidth=8,color='k')
# Plotting hatched vertical line for refernce
plt.plot([0,0],[0,-1.5],'--',color='y')
plt.xlim([-1.25,1.25])
plt.ylim([-2,1])
plt.title('Animation of transient behaviour of a Simple Pendulum')
filename = 'test%05d.png' % loop_counter
plt.savefig(filename)
loop_counter = loop_counter + 1
RESULTS
The following plot was generated for given program






- The above plot of angular displacement and angular velocity shows the pendulum motion to be gradually decreasing .This is due to damping effect which exponentially decreases the amplitude and the velocity of motion
- For animation 100 plots were generated and were stitched together to form animation
CONCLUSION
In this way we can understand that any second order or any higher order ODE can easily be solved using python and simulation of transient behaviour of simple pendulum was using it to explain the effect of damping on its motion