MGSpringRestrainedDoublePendulumStatics.html  (MotionGenesis input/output).
   (1) % MotionGenesis file:  MGSpringRestrainedDoublePendulumStatics.txt
   (2) % Copyright (c) 2009 Motion Genesis LLC.  All rights reserved.
   (3) %---------------------------------------------------------
   (4) NewtonianFrame  N                   % Earth.
   (5) RigidFrame      A, B                % Rods.
   (6) Particle        P, Q                % Particles at end of A, B.
   (7) %---------------------------------------------------------
   (8) Variable   qA,  qB                  % Angles for A and B.
   (9) Constant   LA = 1 m,  LB = 2 m      % Lengths of A, B.
   (10) Constant   k = 200 N/m,   Ln = 1 m  % Spring constant, natural length.
   (11) Constant   g = 9.8 m/s^2            % Earth's gravitational acceleration.
   (12) P.SetMass( mP = 10 kg )
   (13) Q.SetMass( mQ = 20 kg )
   (14) %---------------------------------------------------------
   (15) %   Rotational kinematics.
   (16) A.RotateZ( N, qA )
-> (17) A_N = [cos(qA), sin(qA), 0;  -sin(qA), cos(qA), 0;  0, 0, 1]

   (18) B.RotateZ( N, qB )
-> (19) B_N = [cos(qB), sin(qB), 0;  -sin(qB), cos(qB), 0;  0, 0, 1]

   (20) %---------------------------------------------------------
   (21) %   Translational kinematics.
   (22) P.SetPosition( Ao, LA*Ax> )
-> (23) p_Ao_P> = LA*Ax>

   (24) Q.SetPosition(  P, LB*Bx> )
-> (25) p_P_Q> = LB*Bx>

   (26) %---------------------------------------------------------
   (27) %   Add relevant contact and distance forces.
   (28) System.AddForceGravity( g*Nx> )
-> (29) Force_P> = mP*g*Nx>
-> (30) Force_Q> = mQ*g*Nx>

   (31) LSpring = Q.GetDistance( Ao )
-> (32) LSpring = sqrt(LA^2+LB^2+2*LA*LB*cos(qA-qB))

   (33) SpringStretch = LSpring - Ln
-> (34) SpringStretch = LSpring - Ln

   (35) UnitVectorFromNoToQ> = Q.GetPosition( Ao ) / LSpring
-> (36) UnitVectorFromNoToQ> = LA/LSpring*Ax> + LB/LSpring*Bx>

   (37) Q.AddForce( No,  -k * SpringStretch * UnitVectorFromNoToQ> )
-> (38) Force_Q_No> = -k*LA*SpringStretch/LSpring*Ax> - k*LB*SpringStretch/LSpring*Bx>

   (39) %--------------------------------------------------------------------
   (40) %   Static equations of motion via MG road-maps.
   (41) Statics[1] = Dot(  Nz>,  System(B,Q).GetStatics(P)  )
-> (42) Statics[1] = -LB*(mQ*g*sin(qB)+k*LA*sin(qA-qB)*SpringStretch/LSpring)

   (43) Statics[2] = Dot(  Nz>,       System.GetStatics(Ao) )
-> (44) Statics[2] = -g*(mP*LA*sin(qA)+mQ*LA*sin(qA)+mQ*LB*sin(qB))

   (45) %----------------------------------------------------------
   (46) %   Optional: Statics via potential energy.
   (47) PESpring = 1/2*k*SpringStretch^2
-> (48) PESpring = 0.5*k*SpringStretch^2

   (49) PEGravity = System.GetForceGravityPotentialEnergy( g*Nx>, Ao )
-> (50) PEGravity = -g*(mP*LA*cos(qA)+mQ*(LA*cos(qA)+LB*cos(qB)))

   (51) PotentialEnergy = PEGravity + PESpring
-> (52) PotentialEnergy = PEGravity + PESpring

   (53) StaticsViaPE[1] = -D( PotentialEnergy, qA )
-> (54) StaticsViaPE[1] = -LA*((mP+mQ)*g*sin(qA)-k*LB*sin(qA-qB)*SpringStretch/
        sqrt(LA^2+LB^2+2*LA*LB*cos(qA-qB)))

   (55) StaticsViaPE[2] = -D( PotentialEnergy, qB )
-> (56) StaticsViaPE[2] = -LB*(mQ*g*sin(qB)+k*LA*sin(qA-qB)*SpringStretch/sqrt(LA^2
        +LB^2+2*LA*LB*cos(qA-qB)))

   (57) %----------------------------------------------------------
   (58) %   Optional: Statics with Lagrange's method.
   (59) SetGeneralizedCoordinate( qA, qB )
   (60) LagrangeStatics = System.GetStaticsLagrange( systemPotential = PotentialEnergy )
-> (61) LagrangeStatics[1] = -LA*((mP+mQ)*g*sin(qA)-k*LB*sin(qA-qB)*SpringStre
        tch/sqrt(LA^2+LB^2+2*LA*LB*cos(qA-qB)))

-> (62) LagrangeStatics[2] = -LB*(mQ*g*sin(qB)+k*LA*sin(qA-qB)*SpringStretch/
        sqrt(LA^2+LB^2+2*LA*LB*cos(qA-qB)))

   (63) %----------------------------------------------------------
   (64) %       Solve nonlinear equations (requires a guess).
   (65) Solve( Statics = 0,  qA = -30 deg,  qB = 30 deg )
-> (66) qA = -0.8761486       %  or  qA = -50.19962 deg.
-> (67) qB = 0.6140832       %  or  qB = 35.18437 deg.

   (68) %----------------------------------------------------------
Saved by Motion Genesis LLC.  MotionGenesis 6.4 Professional.  Command names and syntax: Copyright (c) 2024 Motion Genesis LLC. All rights reserved.