octave_mechanics_singlependulum
Function: octave_mechanics_singlependulum ()
function out = octave_mechanics_doublependulum(g,m1,m2,l1,l2,x_k)
dt = 0.01;
%m1 = 1;
%m2 = 1;
%l1 = 0.5;
%l2 = 0.5;
%g = 9.8;
%x_k = [60/180*pi ;
% 0 ;
% 0 ;
% 0 ];
x = [];
tim =[];
for t = 0 : dt : 10
A1=[(m1+m2)*l1 m2*l2*cos(x_k(1)-x_k(2));
m2*l1*cos(x_k(2)-x_k(1)) m2*l2];
B1=[(m1+m2)*g*sin(x_k(1)) m2*l2*(x_k(4))^2*sin(x_k(1)-x_k(2));
m2*l1*(x_k(3))^2*sin(x_k(2)-x_k(1)) m2*g*sin(x_k(2))];
C1=[1;
1];
D1=-(inv(A1)*B1)*C1;
k1 = [ x_k(3);
x_k(4);
D1(1);
D1(2)] * dt;
x_tmp = x_k + k1/2;
A2=[(m1+m2)*l1 m2*l2*cos(x_tmp(1)-x_tmp(2));
m2*l1*cos(x_tmp(2)-x_tmp(1)) m2*l2];
B2=[(m1+m2)*g*sin(x_tmp(1)) m2*l2*(x_tmp(4))^2*sin(x_tmp(1)-x_tmp(2));
m2*l1*(x_tmp(3))^2*sin(x_tmp(2)-x_tmp(1)) m2*g*sin(x_tmp(2))];
C2=[1;
1];
D2=-(inv(A2)*B2)*C2;
k2 = [ x_tmp(3);
x_tmp(4);
D2(1);
D2(2)] * dt;
x_tmp = x_k + k2/2;
A3=[(m1+m2)*l1 m2*l2*cos(x_tmp(1)-x_tmp(2));
m2*l1*cos(x_tmp(2)-x_tmp(1)) m2*l2];
B3=[(m1+m2)*g*sin(x_tmp(1)) m2*l2*(x_tmp(4))^2*sin(x_tmp(1)-x_tmp(2));
m2*l1*(x_tmp(3))^2*sin(x_tmp(2)-x_tmp(1)) m2*g*sin(x_tmp(2))];
C3=[1;
1];
D3=-(inv(A3)*B3)*C3;
k3 = [ x_tmp(3);
x_tmp(4);
D3(1);
D3(2)] * dt;
x_tmp = x_k + k3;
A4=[(m1+m2)*l1 m2*l2*cos(x_tmp(1)-x_tmp(2));
m2*l1*cos(x_tmp(2)-x_tmp(1)) m2*l2];
B4=[(m1+m2)*g*sin(x_tmp(1)) m2*l2*(x_tmp(4))^2*sin(x_tmp(1)-x_tmp(2));
m2*l1*(x_tmp(3))^2*sin(x_tmp(2)-x_tmp(1)) m2*g*sin(x_tmp(2))];
C4=[1;
1];
D4=-(inv(A4)*B4)*C4;
k4 = [ x_tmp(3);
x_tmp(4);
D4(1);
D4(2)] * dt;
x_k1 = x_k + (k1 + 2 * k2 + 2 * k3 + k4 ) /6 ;
x = [x x_k];
tim = [tim t];
x_k = x_k1;
endfor
plot(l1*sin(x(1, :)),-l1*cos(x(1, :)),l1*sin(x(1, :))+l2*sin(x(2, :)),-l1*cos(x(1, :))-l2*cos(x(2, :)));
out=0;
endfunction