Week 3 - Solving second order ODEs
Program to simulate simple pendulum
%Write a program that will simulate the pendulum motion
clear all
close all
clc
b=0.05;
g=9.81;
l=1;
m=1;
%Initial condition
theta_0=[0;3];
%time_plots
t_span=linspace(0,20,500);
%solve for ode
[t,results]=ode45(@(t,theta) ode_func(t,theta,b,g,l,m),t_span,theta_0);
%Pendulum
ct=1;
for i=1:length(results(:,1))
x0=0;
y0=0;
x1=l*sin(results(i,1));
y1=-l*cos(results(i,1));
plot([-0.5,0.5],[0,0],'linewidth',3);
line([x0,x1],[y0,y1],'linewidth',3);
hold on
plot(x1,y1,'o','MarkerS',20,'MarkerFaceColor','r');
grid on
axis([-1.5 1.5 -1 0.5]);
pause(0.02);
M(ct)=getframe(gcf);
hold off
ct=ct+1;
end
movie(M)
videofile=VideoWriter('Pendulum_motion.avi','Uncompressed AVI')
open(videofile)
writeVideo(videofile,M)
close(videofile)
Explanation of program:
- Firstly the inputs are given such as damping coefficient (b), gravity (g),length (l),mass (m).
- Initial conditions are given for velocity & displacement.
- time span is defined using linspace command.
- differential equation s solved using ode45 inbuilt command.
- Time function is call to define the values of variables & calculates column matrics.
- for loop is used to calculate motion of pendulum at different time interval.
- Marker command is used to creat ball.
- movie command is used to make movie.
Call function:
function[dtheta_dt]=ode_func(t,theta,b,g,l,m)
theta1=theta(1);
theta2=theta(2);
dtheta1_dt=theta2;
dtheta2_dt=-(b/m)*theta2-(g/l)*sin(theta1);
dtheta_dt=[dtheta1_dt;dtheta2_dt];
end
Image that represents position of pendulum

Output:

Error faced during Programming:

Inverted comma (') is given at videofile. Inverted comma removed and then run the program.
Video link of simulation