Pendulum: linear modeling with Lagrange's approach
> restart: libname := libname, "C:/MBSymba": with(MBSymba_r6):
> PDEtools[declare]([theta(t)],prime=t,quiet):
Define the body frame
> TP := rotate('Z',theta(t)) * translate(0,-L,0);
Define the body
> pendulum := make_BODY(TP,m,0,0,IG): show(pendulum);
kinetic energy
> KE := simplify(kinetic_energy(pendulum));
> KE2 := taylorF(KE, diff(theta(t),t),3);
Define acceleration due to gravity
> _gravity := make_VECTOR(ground,0,-g,0): show(_gravity);
potential energy
> PE:= gravitational_energy(pendulum);
> PE2 := taylorF(PE, theta(t),3);
non linear equations
> eqnNL := lagrange(KE-PE,theta(t),t);
eqnL := linearize(eqnNL,theta(t));
linear Lagrangian equation
> eqnL := lagrange(KE2-PE2,theta(t),t);
>
>
Pendulum: full linear modeling with Newton's approach
> restart: libname := libname, "C:/MBSymba": with(MBSymba_r6):
> PDEtools[declare]([theta(t)],prime=t,quiet):
> Describe(linear_modeling);
# Define a set of parameters that should be considered small. Expressions
# containing these parameters are automatically linearized. When a parameter is
# time dependent, expressions are linearized also with respect its time
# derivatives. Case position, the first two derivatives are computed, case
# velocity only the first derivative.
linear_modeling( position::{set, list, name} := {},
velocity::{set, list, name} := {},
vars::{set, list, name} := {}, $ )
> linear_modeling({theta(t)});
Warning, Linear Modeling option has been choosen for the following variables:
Define the body frame
> TP := rotate('Z',theta(t)) * translate(0,-L,0);
Define the body
> pendulum := make_BODY(TP,m,0,0,IG): show(pendulum);
Define acceleration due to gravity
> _gravity := make_VECTOR(ground,0,-g,0): show(_gravity);
Define the pin joint A
> A := origin(ground): show(A);
Reaction force (body coordinates)
> make_VECTOR(TP,TA,RA,0):
RF := make_FORCE(%, A, pendulum): show(RF);
> eqnE := euler_equations({pendulum,RF},A): show(eqnE);
>
>