clear all;
clc;
global epsSqr l m g RKG xOld tau eps
dim = 4;
stage = 3;
l = 1;
m = 1;
g = 1;
eps = 1e-2;
epsSqr = eps^2;
tau = 0.01;
T = 10;
nSteps = T/tau;
b = [5/18 4/9 5/18];
RKG = [5/36 2/9-sqrt(15)/15 5/36-sqrt(15)/30;...
5/36+sqrt(15)/24 2/9 5/36-sqrt(15)/24;...
5/36+sqrt(15)/30 2/9+sqrt(15)/15 5/36];
d = b/RKG;
x0 = [l+eps; 0; 0; 0];
z0 = zeros(dim*stage,1);
xOld = x0;
x_soln = zeros(dim,nSteps+1);
x_soln(:,1) = x0;
options = optimset('Display','none','TolFun',1e-8,'TolX',1e-8);
for step = 1:nSteps
time = step*tau;
zNew = fsolve(@f_RKG,z0,options);
zNew = reshape(zNew,dim,stage);
xNew = xOld + zNew*d';
x_soln(:,step+1) = xNew;
xOld = xNew;
end
x1 = x_soln(1,:);
x2 = x_soln(2,:);
v1 = x_soln(3,:);
v2 = x_soln(4,:);
time = 0:tau:T;
subplot(2,1,1)
plot(x1,x2); axis equal;
Kinetic = m/2*(v1.^2 + v2.^2);
Potential = m*g*x2 + 1/(2*epsSqr)*(sqrt(x1.^2 + x2.^2) - l).^2;
Energy = Kinetic + Potential;
subplot(2,1,2)
hold on;
plot(time,Kinetic,'y',time,Potential,'g');
plot(time,Energy,'b','linewidth',3)
plot(time,x1,'r', time, x2, 'k');
legend('kinetic energy','potential energy','total energy','x1','x2');
hold off;