You are on page 1of 4

Title: Free Response of SDOF Damped System

Aim: Determination of free response of SDOF damped system to demonstrate


different damping conditions using MATLAB.

Theory:

Equation of motion of damped free vibrations of single degree of freedom system.

If we divide through by m, we introduce the dimensionless parameters ωn and Ç,

In the above, ωn represents the undamped natural frequency, and Ç is the viscous damping
ratio. For the purposes of this example, we will assume the underdamped case (Ç < 1).

The solution to this equation is:

where

Our initial conditions are at time t = 0, x = x0 and v = v0.

This equation is more useful if we write all of the terms as functions of parameters ωn and Ç:
While this equation admittedly looks intimidating, note that it only depends on four
quantities: xo, vo, ωn, and Ç. Figure 1 gives the variation of the response with increasing
viscous damping coefficient for xo = 3; vo = 1; and ωn = 7. Note how quickly the response
becomes virtually zero; this occurs within ten seconds, even for a damping coefficient as
small as 0.05!

The MATLAB code used to generate the Figure 1. This time, however, the damping
ratios are entered in array form only. The algorithm chosen to produce the plots works
only for the underdamped case; since we have the term[md = m n ƒ1— Ç2 ] in the
denominator of our
response equation, Ç = 1 will cause division by zero, and Ç >1 will give an imaginary damped
natural frequency. We employ some defensive programming to ensure allowable values for
the damping ratio are entered. Conveniently, this gives us a reason to introduce the while
loop. The code checks each value zeta(zi) to see if it lies between zero and one. If not, a
somewhat abrupt reminder is sent to the screen, and the loop asks for a new entry. Otherwise,
it continues to the next damping ratio value.

Conclusion:

With increasing values of damping ratio, response dies out fast and system comes to rest
quickly.
%Initial value entry.
%The while loop in the zeta initialization section prevents
%certain values for zeta from being entered, since such
%values would crash the program.
%
wn=input('Enter the natural frequency. ');
x0=input('Enter the initial displacement. ');
v0=input('Enter the initial velocity. ');
tf=input('Enter the time duration to test, in seconds. ');
for zi=1:3
zeta(zi)=12;
while(zeta(zi)<0 | zeta(zi)>=1) % The pipe |means "or".
zeta(zi)=input(['Enter damping coefficient value ', num2str(zi),'.']);
if (zeta(zi)>=1 | zeta(zi)<0)
fprintf('Zeta must be between 0 and 1!');
zeta(zi)=12;
end
end
end
%
%Now, having wn and zeta, the wd values can be found.
%
for i=1:3
wd(i)=wn*sqrt(1-zeta(i)^2);
end
%
%Solving for the response. Note the use of the array
%multiplication command (.*) in the expression for x(t).
%This command is necessary, else the program gives a
%multiplication error.
%
t=0:tf/1000:tf;
for j=1:3
a=sqrt((wn*x0*zeta(j)+v0)^2+(x0*wd(j))^2)/wd(j);
phi=atan2(wd(j)*x0,v0+zeta(j)*wn*x0);
x(j,:)=a*exp(-zeta(j)*wn*t).*sin(wd(j)*t+phi);
end
%
%Now, the program plots the results in a subplot format.
%
subplot(3,1,1)
plot(t,x(1,:))
title(['Response for zeta=',num2str(zeta(1))])
ylabel('Response x')
grid
subplot(3,1,2)
plot(t,x(2,:))
title(['Response for zeta=', num2str(zeta(2))])
ylabel('Response x')
grid
subplot(3,1,3)
plot(t,x(3,:))
title(['Response for zeta=', num2str(zeta(3))])
ylabel('Response x')
xlabel('Time, seconds')
grid
Response for zeta=0.05
4
Response x

-2

-4
0 1 2 3 4 5 6 7 8 9 10

Response for zeta=0.2


4
Response x

-2
0 1 2 3 4 5 6 7 8 9 10

Response for zeta=0.5


4
Response x

-2
0 1 2 3 4 5 6 7 8 9 10
Time, seconds

You might also like