Eigenvalues for Vibration Problems

Eigenvalue/Eigenvector analysis is useful for a wide variety of differential equations.  This page will describe how it can be used in the study of vibration problems for lumped parameter systems.  

A Two-Mass Vibrating System

Consider the system shown below with 2 masses and 3 springs.  The masses are constrained to move only in the horizontal direction (they can't move up an down):

Setting up the equations:

We can draws the free body diagram for this system:

From this, we can get the equations of motion:

We can rearrange these into a matrix form (and use a and b for notational convenience).

Assume a form of solution:

Now we proceed by assuming the form of solution (just as with differential equations).  In this case, since there is no damping, we choose a purely oscillatory solution.

so

This is obviously just an eigenvalue problem.  

Solve the Eigenvalue/Eigenvector problem:

We can solve for the eigenvalues by finding the characteristic equation (note the "+" sign in the determinant rather than the "-" sign, because of the opposite signs of l and w2).

To make the notation easier we will now consider the specific case where k1=k2=m=1.  

Now we can also find the eigenvectors.  For the first eigenvector:

So we'll choose the first eigenvector (which can be multiplied by an arbitrary constant). 

For the second eigenvector:

A General Solution for the equations of motion.

We can come up with a general form for the equations of motion for the two-mass system.  The general solution is 

Note that each frequency is used twice, because our solution was for the square of the frequency, which has two solutions (positive and negative).  We will use initial condition to solve for the unknown coefficients, just like we did with differential equations.   For a real response, the quantities c1 and c2 must be complex conjugates of each other, as are c3 and c4.  The equation can then be re-written:

We can use initial conditions to solve for the unknowns

Now let's consider the case when the initial condition on velocity is zero, and there is an arbitrary initial condition on position (this is the case we'll most often use):

Using the zero condition on initial velocity, we can write 

which leads to the set of equations

Since we know that the frequencies are not equal to zero, we know the only solution is

Therefore, if the initial velocities are zero, only the cosine terms are needed and a general form for the solution simplifies to:

 

A Specific Example

Consider the case when  k1=k2=m=1, as before, with initial conditions on the masses of

Assuming a solution of 

we know that 

We can write this as a set of two equations in two unknowns.

so

Thus the equations of motion is given by

or 

Note: The two unknowns can also be solved for using only matrix manipulations by starting with the initial conditions and re-writing:

Now it is a simple task to find g1 and  g2.  This is the method used in the MatLab code shown below.

Using MatLab to find eigenvalues, eigenvectors, and unknown coefficients of initial value problem.

» A=[-2 1;1 -2]; %Matrix determined by equations of motion.
» [v,d]=eig(A)   %Find Eigenvalues and vectors.
 v =
   0.7071  0.7071
  -0.7071  0.7071
 d =
  -3.0000  0
   0      -1.0000

» x0=[1 0]'       %Initial conditions
 x0 =
   1
   0

» gamma=inv(v)*x0 %Find unknown coefficients
 gamma =
   0.7071
   0.7071


Using MatLab to calculate and plot plot the solution of an initial value problem.

%Define Array from equations of motion.
A=[-2 1;1 -2];      %2 masses
[v,d]=eig(A);       %Find Eigenvalues and vectors.
omega=sqrt(diag(-d));
x0=[1 -1]'           %Initial condition
gam=inv(v)*x0       %Find unknown coefficients


%nxn array with coefficients of gamma along the diagonal
g=diag(gam);
t=0:0.2:20;         %1xM Time vector (for plotting)
% cos(omega*t) is an nxM array with
%        cos(w1*t),...,cos(wn*t) in rows
x=v*g*cos(omega*t); %Calculate output

%This next code does some string manipulation to make 
%legends for the plots, no calculations.
N=size(A,1);
outLeg='';
modLeg='';
for i=1:N,
    outLeg=strvcat(outLeg, strcat('Output ',int2str(i)));
    mstr=sprintf('Mode%d (w=%f)',i,omega(i));
    modLeg=strvcat(modLeg, mstr);
end

%Plot the output trajectories
subplot(2,1,1);
plot(t,x)
xlabel('Time'); ylabel('Output'); title('Output vs. time');
legend(outLeg);

%Plot the mode shapes
subplot(2,1,2)
plot(v,':');
xlabel('Elements'); ylabel('Mode amplitude'); title('Mode shapes');
axis([0 N+1 -1 1]);
legend(modLeg);
hold on
stem(v);
hold off

%Arrays for various numbers of masses.
A=[-2 1;1 -2]; %2 masses
A=[-2 1 0; 1 -2 1; 0 1 -2]; %3 masses
A=[-2 1 0 0; 1 -2 1 0; 0 1 -2 1; 0 0 1 -2]; %4 masses
A=[-2 1 0 0 0; 1 -2 1 0 0; 0 1 -2 1 0; 0 0 1 -2 1; 0 0 0 1 -2]; %5 masses




Comments or Questions?

Erik Cheever
Engineering Department
Swarthmore College