MATLAB Answers

Animating a pendulum: error in code

12 views (last 30 days)
KLETECH MOTORSPORTS
KLETECH MOTORSPORTS on 15 Nov 2020
Commented: Geoff Hayes on 18 Nov 2020
Hi guys,
i'm trying to plot the oscillatory motion of a simple pendulum in the form of a GIF or AVI file and i'm trying the following code, but there seems to be an error:
The pendulum generated is not oscillating.
I got a warning when i ran this: Warning: The EraseMode property is no longer supported and will error in a future release.
Also, how do i save the animation as a GIF file?
% A script to animate the motion of the simple pendulum
clc
clear
disp('Specify the initial angle of the pendulum in degrees, e.g., 50')
disp('or press ENTER for the default value.')
theta=input('Initial angular displacement of the pendulum= ');
if isempty(theta)
theta=50
else
theta;
end
theta=theta*pi/180; % convert from degrees to radians
disp('Specify the final time, e.g. tfinal = 25')
disp('or press ENTER for default value.')
tfinal=input('Final time tfinal = ');
if isempty(tfinal)
tfinal=10
else
tfinal;
end
data_init=[0 0; -4 0]; %pendulum length
% rotation matrix
R=[cos(theta) -sin(theta);sin(theta) cos(theta)];
data=R*data_init; % initial pendulum position
bar=line('xdata',[0 data(1)],'ydata',...
[0 data(2)]','linewidth',3,'erase','xor');
mass=line('xdata',data(1),'ydata',data(2),'marker','o',...
'markersize',15,'MarkerFaceColor','b','erase','xor');
hinge=line('xdata',0,'ydata',0,'marker','o',...
'markersize',7,'erase','xor');
axis([-5 5 -5 5])
grid % comment this out if you do like the grid
set(gca,'Fontsize',14)
set(gca,'dataaspectratio',[1 1 1])
box on
dt=0.03; % step−size for solving differential
% equations can be arbitrarily selected
t=0; % initial time
thetadot=0; % initial angular speed
disp('Can maximize the display so you can see the action better,')
disp('then press ENTER.')
disp('If you are happy with the display size, press ENTER.')
pause
% solve the diff eqns using the Euler's method
while(t<tfinal)
t=t+dt;
theta = theta + thetadot*dt;
thetadot=thetadot - 5*sin(theta)*dt; %−0.01*thetadot;
% you can add some friction
R=[cos(theta) -sin(theta);sin(theta) cos(theta)];
datanew=R*data_init;
% change the property values of the bar and hinge objects
set(bar,'xdata',[0 datanew(1)],'ydata',[0 datanew(2)]);
set(mass,'xdata',datanew(1),'ydata',datanew(2));
set(hinge,'xdata',0,'ydata',0)
set(gca,'dataaspectratio',[1 1 1])
drawnow;
end

  5 Comments

Show 2 older comments
KLETECH MOTORSPORTS
KLETECH MOTORSPORTS on 16 Nov 2020
I have tried that as well, but got some errors.
I tried putting the expression for the simple pendulum and the function fie Animation in the same script and running them together, and i got the following errors.
Unrecognized function or variable 'Equation'.
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in Animation1>Animation (line 30)
sol=ode45(@Equation,[0 duration], ivp);
Error in Animation1 (line 19)
Animation(ivp, duration, fps, movie,arrow);
KLETECH MOTORSPORTS
KLETECH MOTORSPORTS on 16 Nov 2020
Is there anyway i can specifically add something to my existing code such that i can convert it to a series of frmes andthen into an AVI or GIF fie? I have read the syntax, but i am unable to understand how to use it in this case.

Sign in to comment.

Answers (1)

Geoff Hayes
Geoff Hayes on 16 Nov 2020
In order to convert to a series of frames and save as an AVI, just do
% open the video writer
v = VideoWriter('pendulum.avi');
open(v);
% solve the diff eqns using the Euler's method
while(t<tfinal)
% your existing code
drawnow;
% get the frame and write to the file
frame = getframe(gcf);
writeVideo(v,frame);
end
% close the video writer
close(v);

  9 Comments

Show 6 older comments
Geoff Hayes
Geoff Hayes on 18 Nov 2020
Glad that the above code worked. I tend to use functions over scripts, so the function grh2 is just indicates that this code is part of a function named grh2 which is saved to a file named grh2.m.
KLETECH MOTORSPORTS
KLETECH MOTORSPORTS on 18 Nov 2020
I didn't realize you could use functions over scripts. I thought the two had to be used in tandem.
How does only using functions work?
Can a script be used without a function? How are scripts and functions related even
Geoff Hayes
Geoff Hayes on 18 Nov 2020
See scripts vs functions for a discussion on the differences between the two.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!