8.26.2023

octave :: triple pendulum

octave octave_mechanics_triplependulum

    function out = octave_mechanics_triplependulum()
    dt =  0.01;
    m1 = 1;
    m2 = 1;
    m3 = 1;
    l1 = 0.5;
    l2 = 0.5;
    l3 = 0.5;
    g = 9.8;
    x_k = [60/180*pi ;
              0      ;
              0      ;
              0      ;
              0      ;
              0      ];
    x = [];
    tim =[];
    
    for t = 0 : dt : 10
        x_k1 = x_k;
        x_tmp = x_k;
        for j =1 : 1 : 4
         A=[(m1+m2+m3)*l1 (m2+m3)*l2*cos(x_tmp(1)-x_tmp(2)) m3*l3*cos(x_tmp(1)-x_tmp(3));
            (m2+m3)*l1*cos(x_tmp(2)-x_tmp(1)) (m2+m3)*l2    m3*l3*cos(x_tmp(2)-x_tmp(3));
             m3*l1*cos(x_tmp(3)-x_tmp(1))      m3*l2*cos(x_tmp(3)-x_tmp(2)) m3*l3       ];
         B=[(m1+m2+m3)*g*sin(x_tmp(1)) (m2+m3)*l2*(x_tmp(5))^2*sin(x_tmp(1)-x_tmp(2)) m3*l3*(x_tmp(6))^2*sin(x_tmp(1)-x_tmp(3));
            (m2+m3)*l1*(x_tmp(4))^2*sin(x_tmp(2)-x_tmp(1)) (m2+m3)*g*sin(x_tmp(2))    m3*l3*(x_tmp(6))^2*sin(x_tmp(2)-x_tmp(3));
             m3*l1*(x_tmp(4))^2*sin(x_tmp(3)-x_tmp(1))      m3*l2*(x_tmp(5))^2*sin(x_tmp(3)-x_tmp(2)) m3*g*sin(x_tmp(3))];
         C=[1;
            1;
            1];
         D=-(inv(A)*B)*C;
         k_j = [ x_tmp(4);
                 x_tmp(5); 
                 x_tmp(6); 
                 D(1);
                 D(2);
                 D(3)] * dt;
         if j == 1
                x_tmp = x_k + k_j /2;
         endif
         if j == 2
                x_tmp = x_k + k_j /2;
         endif
         if j == 3
                x_tmp = x_k + k_j ;
         endif
         if j == 4
                x_tmp = x_k + k_j /2;
         endif
         if j == 1
                x_k1 = x_k1 + k_j /6;
         endif
         if j == 2
                x_k1 = x_k1 + k_j /3;
         endif
         if j == 3
                x_k1 = x_k1 + k_j /3;
         endif
         if j == 4
                x_k1 = x_k1 + k_j /6;
         endif
        endfor
        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,:)),l1*sin(x(1,:))+l2*sin(x(2,:))+l3*sin(x(3,:)),-l1*cos(x(1,:))-l2*cos(x(2,:))-l3*cos(x(3,:)));
    out=0;
    endfunction
    

octave octave_mechanics_triplependulum.m

octave octave_mechanics_triplependulum