function zzsolution(ivp,duration,fps,movie)
nframes = duration*fps;
sol = ode45(@zzSEQ,[0 duration], ivp);
t = linspace(0,duration,nframes);
X = deval(sol,t);
r = X(1,:)';
rdot = X(2,:)' ;
phi = X(3,:)';
phidot = X(4,:)' ;
L = X(7,:)' ;
L = L(1) ;
position = [r.*sin(phi), -r.*cos(phi)];
maxr = max(abs(r));
xmin = min(position(:,1))-0.1*maxr ;
xmax = max(position(:,1))+0.1*maxr ;
ymin = min(position(:,2))-0.1*maxr ;
ymax = max([0,max(position(:,2))])+0.1*maxr;
h = figure(1);
clf(h);
set(h,'name','The Spring Pendulum','numbertitle','off','Color','w') ;
stop = uicontrol('style','toggle','string','stop','background','white');
subplot(121);
hold on
bob = plot(position(1,1),position(1,2),'MarkerSize',10,'Marker','.','Color','b');
[xs ys] = Spring([0,0],[position(1,1),position(1 ,2)],20,L,0.1) ;
arm = plot(xs,ys,'LineWidth',.5,'Color','r');
path = plot(position(1,1), position(1,2),'k');
axis equal ;
grid on;
axis([xmin xmax ymin ymax]);
title('Spring Pendulum Animation','Color','k');
axis off ;
for i=1:length(t)-1
if get(stop,'value')==0
set(bob,'XData',position(i,1),'YData',position(i ,2));
[xs ys] = Spring([0 0],[position(i,1) position(i,2)]) ;
set(arm,'XData',xs,'YData',ys) ;
DEPL(i,:) = [position(i,1) position(i,2)] ;
set(path,'Xdata',DEPL(:,1),'YData',DEPL(:,2)) ;
F(i) = getframe(h) ;
if movie == false
pause(t(i+1)-t(i));
end
elseif get(stop,'value')==1
break
end
end
if movie == true
msgbox('Please wait animaition being saved') ;
movie2avi(F,'SpringPendulum.avi','compression','Cinepak','fps',fps)
end
set(stop,'style','pushbutton','string','close','callback','close(gcf)');