4. Linear Systems Modeling

Linear systems modeling is often used in engineering because this simplification makes it possible to easily analyze the properties of the system.
In particular, linear modeling is most suitable for:

1) analyzing the stability of a system
2) vibrations mechanics
3) developing control systems

> restart:  mylib :="C:\LIBS": libname := mylib,libname: with(MBsymba):

 

 

4.1 The Standard Procedure for Developing a Linear Model

In order to develop a linear model of a system, the following steps are usually followed:

1) developing the full mathematical model of the system, i.e. finding the set of first order differential equations which describe the system

(Note a second order diff. eqn. may be split into two first order diff. eqns.)

[Maple OLE 2.0 Object]

where it is supposed that only external actions depends on time

2) finding the equilibrium solution(s) [Maple OLE 2.0 Object] in absence of external actions and with zero velocity (i.e. time dependency disappears)

[Maple OLE 2.0 Object]

3) linearizing the equations of motion as follows (Taylor series expansion)

[Maple OLE 2.0 Object]

Linear Models of Mechanical Systems

For a mechanical system the linear equations of motion may be written in the following form

[Maple OLE 2.0 Object]

where matrices [Maple OLE 2.0 Object] are the well known mass, damping, and stiffness matrices.

Each of them is associated to a quadratic, respectively the kinetic energy, the Rayleigh's dissipation function, and the elastic energy, as follows:

[Maple OLE 2.0 Object]

the expressions above are widely used in modeling linear systems using the Lagrangian approach.

4.2 A Smart Approach to Linear Modeling

As seen above, the linearization of the equations of motion is the last step in mathematical modeling.
This implies that the derivation of the non-linear equations of motion is still required and it may be not easy.
Indeed, many difficulties arise when modeling mechanical systems due to the presence of non-linear rotational terms in kinematics and so on. Therefore, it would be very useful to be able to develop the linear equations of motion directly instead of the non-linear ones. In general this is not possible but there is a large class of problems which allow this operation. In particular, this is possible when the equilibrium solution is clear at the begin of modeling process and
all variables represents small variation from the equilibrium configuration (It is important that all variables are small, otherwive there will be some trouble that will be discussed later).

Under these assumptions, it is possible to use linearized kinematic relations for computing the expression of kinetic and potential energy, and in conclusion for deriving the equations of motion without losing any information of the system properties.


Indeed, starting from the
non-linear expression of the position, velocity, and acceleration of a body

[Maple OLE 2.0 Object]

the linearization leads to

[Maple OLE 2.0 Object]

and it should be noted that the linear expressions of velocity and accelerations may be obtained either by linearizing the corresponding non-linear expressions or by deriving the linear position and then differentiating with respect to time.


For quadratric expressions, such kinetic energy, the 2nd order Taylor expansion yelds:

[Maple OLE 2.0 Object]

and once again quadratic expressions may be calculate by direct use of the linear kinematic equations.

Therefore, the linear equations of motion may be derived using either the Newtonial or Lagrangian approach.

 

4.3 Example: the Pendulum

Definition of the the reference coordinate frame of the pendulum located a the center of mass of the pendulum bob.

PF := rotate('Y',alpha(t)) * translate(0,0,L);

PF := matrix([[cos(alpha(t)), 0, sin(alpha(t)), sin...

Position of the center of mass.

> G := origin(PF): show(%);

Linearized for small angles of pendulum displacement.

GL := linearize(project(G,ground), [alpha(t)],t): show(%);

POINT(frame = matrix([[cos(alpha(t)), 0, sin(alpha(...

POINT(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], [...

velocity: first derivation and then linearization

> VG := velocity(G): show(%);
linearize(VG, [alpha(t)],t): show(%);

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

velocity: first linearization and then derivation

> VGL := velocity(GL): show(%);

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

FOR DETERMINING THE VELOCITY IT CAN BE SHOWN THAT ANY ORDER OF LINEARIZATION AND DERIVATION YIELDS THE SAME RESULT!

acceleration: first derivation and then linearization

> AG := velocity(VG): show(%);
linearize(AG, [alpha(t)],t): show(%);

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

acceleration: first linearization and then derivation

> AGL := velocity(VGL): show(%);

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

FOR DETERMINING THE ACCELERATION IT CAN BE SHOWN THAT ANY ORDER OF LINEARIZATION AND DERIVATION YIELDS THE SAME RESULT!

kinetic energy: first derivation and then Taylor expansion

> KE := 1/2*m*dot_prod(VG,VG);
taylorF(KE,[alpha(t),diff(alpha(t),t)],3);

KE := 1/2*m*(cos(alpha(t))^2*diff(alpha(t),t)^2*L^2...

1/2*m*diff(alpha(t),t)^2*L^2

kinetic energy: first linearization and then calculation

1/2*m*dot_prod(VGL,VGL);

1/2*m*diff(alpha(t),t)^2*L^2

FOR DETERMINING THE KINETIC ENERGY IT CAN BE SHOWN THAT ANY ORDER OF LINEARIZATION AND DERIVATION YIELDS THE SAME RESULT!

4.4 Example: Sequence of Rotations

An important property in linear kinematics is that rotational transformations are commutative
Indeed:

> T1 := rotate('X',alpha) * rotate('Y',beta);

> taylorF(T1,[alpha,beta],2);

T1 := matrix([[cos(beta), 0, sin(beta), 0], [sin(al...

matrix([[1, 0, beta, 0], [0, 1, -alpha, 0], [-beta,...

> T2 := rotate('Y',beta) * rotate('X',alpha);

> taylorF(T2,[alpha,beta],2);

T2 := matrix([[cos(beta), sin(alpha)*sin(beta), cos...

matrix([[1, 0, beta, 0], [0, 1, -alpha, 0], [-beta,...

4.5 Example: the Pendulum Mounted on a Rotating Support

kinematics

support rotating frame

> RF := rotate('Z',Omega*t);

RF := matrix([[cos(Omega*t), -sin(Omega*t), 0, 0], ...

pendulum frame

> alpha0 := 'alpha0'; equilibrium position

> sm_vars := [alpha(t)]; small displacements from equilibrium

> PF := RF * rotate('Y',alpha(t)+alpha0) * translate(0,0,L);

alpha0 := 'alpha0'

sm_vars := [alpha(t)]

PF := matrix([[cos(Omega*t)*cos(alpha(t)+alpha0), -...

> G := project(origin(PF),ground): #show(%);
GL := linearize(G, sm_vars,t): show(%,'synthetic');

POINT(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], [...

velocity:
first derivation and then linarization

> VG := velocity(G): #show(%);
VGL := linearize(VG, sm_vars,t): show(%);

VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0], ...

position
of the pendulum Center of Mass

> G := project(origin(PF),RF): #show(%);
GL := linearize(G, sm_vars,t): show(%,'synthetic');

POINT(frame = matrix([[cos(Omega*t), -sin(Omega*t),...

velocity:
first derivation and then linearization

> VG := project(velocity(G),RF): #show(%);
linearize(VG, sm_vars,t): show(%);


first linearization and then derivation

> VGL := project(velocity(GL),RF): show(%);

VECTOR(frame = matrix([[cos(Omega*t), -sin(Omega*t)...

VECTOR(frame = matrix([[cos(Omega*t), -sin(Omega*t)...

acceleration:
first derivation and then linearization

> AG := project(velocity(VG),RF): #show(%);
linearize(AG, sm_vars,t): show(%);


first linearization and then derivation

> AGL := project(velocity(VGL),RF): show(%);

VECTOR(frame = matrix([[cos(Omega*t), -sin(Omega*t)...

VECTOR(frame = matrix([[cos(Omega*t), -sin(Omega*t)...

Euler's equations

> pendulum := make_BODY(G,m): show(pendulum);
hub_torque := make_TORQUE(PF,MX,0,MZ,pendulum): show(hub_torque);
_gravity := make_VECTOR(ground,0,0,g): show(_gravity);

pendulum = BODY(frame = matrix([[cos(Omega*t), -sin...

hub_torque = TORQUE(frame = matrix([[cos(Omega*t)*c...

_gravity = VECTOR(frame = matrix([[1, 0, 0, 0], [0,...

first derive equation, then linearize

> eqnE := euler_equations({pendulum,hub_torque},origin(ground),PF): #show(%);
eqnE := linearize(eqnE, sm_vars,t): show(eqnE,'synthetic');

eqnE = VECTOR(frame = eqnE[frame],comps = matrix([[...

first linearize then derive equation

> pendulumL := make_BODY(linearize(G,sm_vars,t),m): #show(%);

> hub_torqueL := make_TORQUE(linearize(PF,sm_vars,t),MX,0,MZ,pendulumL): #show(%);

> eqnEL := linearize(euler_equations({pendulumL,hub_torqueL},origin(ground),PF),sm_vars,t):
eqnEL[comps] := map(simplify,eqnEL[comps],trig):
show(eqnEL,'synthetic');

eqnEL = VECTOR(frame = eqnEL[frame],comps = matrix(...

equilibrium solution

> Yeqn := collect(simplify(expand(Ycomp(eqnE)),trig),[alpha(t)]):

> subs(alpha(t)=0,expand(Yeqn/sin(alpha0)));

> equilibrium := alpha0 = solve(%,alpha0);

L*m*g-L^2*m*cos(alpha0)*Omega^2+1/sin(alpha0)*L^2*m...

equilibrium := alpha0 = arccos(g/L/Omega^2)

the equation of motion becomes:

> expand(subs(equilibrium, Yeqn));

-m*alpha(t)*g^2/Omega^2+L^2*m*alpha(t)*Omega^2+L^2*...

4.6 Example: a Rigid Rotor Mounted on Flexible Bearings

[Maple Metafile]

> alpha(t), beta(t), rotations due to bearings elastiticy

> Omega; constant spin velocity

alpha(t), beta(t), Omega

we assume that rotations due to elasticity are smalls
using the 'l
inear modelind({small_vars}) ' command, linearization will be made automatically

> linear_modeling( {alpha(t),beta(t)} );

Warning, Linear Modeling option has been choosen for the following variables:

small_vars = {alpha(t), beta(t)}

body frame

> BF := rotate('Y',alpha(t)) * rotate ('X',beta(t)) * rotate('Z',Omega*t);

BF := matrix([[cos(Omega*t), -sin(Omega*t), alpha(t...

> project(angular_velocity(BF),ground);

TABLE([obj = VECTOR, comps = matrix([[diff(beta(t),...

definition of rotor mass properties

> rotor := make_BODY(BF, m, It,It,Ia): show(%);

BODY(frame = matrix([[cos(Omega*t), -sin(Omega*t), ...

> k, linear stiffness of the bearing

> L; distance between beerigns

> MX := -k*(L/2)^2*alpha(t); elastic torque

> MY := -k*(L/2)^2*beta(t); elastic torque

k, L

MX := -1/4*k*L^2*alpha(t)

MY := -1/4*k*L^2*beta(t)

reative torque due to the bearings

> elastic_bearings := make_TORQUE(ground, MX,MY,0, rotor): show(%);

TORQUE(comps = matrix([[-1/4*k*L^2*alpha(t)], [-1/4...

equations of motion using Euler's Equation

> eqns := euler_equations({rotor,elastic_bearings},CoM(rotor),ground):
show(%);

VECTOR(comps = matrix([[1/4*k*L^2*alpha(t)+It*diff(...

>