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.
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):

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).
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.
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:
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:
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? |
![]() |