The displacement resonance in forced oscillations 

In every oscillating system there is dissipation of mechanical energy, which results that the motion of the mass-spring system described in the previous sections dies out. If the oscillation are to be maintained, energy must be supplied to the system. In this section we shall assume that the system is acted on by a periodic driving force. Suppose that the mass-spring system is subjected to a periodic force `*`(F[0], `*`(cos(`*`(omega, `*`(t))))), where F[0] is the maximum value of the applied force and f = `*`(omega, `*`(`/`(`+`(`*`(2, `*`(Pi)))))) is its frequency. The equation of motion is then 

`+`(`*`(m, `*`(Student:-MultivariateCalculus:-diff(x(t), t, t))), `*`(r, `*`(Student:-MultivariateCalculus:-diff(x(t), t))), `*`(k, `*`(x(t)))) = `*`(F[0], `*`(cos(`*`(omega, `*`(t))))) 

> restart; -1
 

> with(inttrans); -1; L := proc (x) options operator, arrow; laplace(x, t, s) end proc; -1; invL := proc (X) options operator, arrow; invlaplace(X, s, t) end proc; -1
 

> alias(X(s) = L(x(t)), F(s) = L(f(t))); -1
 

> deq := `+`(`*`(m, `*`(Student:-MultivariateCalculus:-diff(x(t), `$`(t, 2)))), `*`(r, `*`(Student:-MultivariateCalculus:-diff(x(t), t))), `*`(k, `*`(x(t)))) = f(t); -1; %
 

`+`(`*`(m, `*`(diff(diff(x(t), t), t))), `*`(r, `*`(diff(x(t), t))), `*`(k, `*`(x(t)))) = f(t)
 

> simplify(L(deq))
 

`+`(`*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k), `*`(X(s))), `*`(`+`(`-`(`*`(m, `*`(s))), `-`(r)), `*`(x(0))), `-`(`*`((D(x))(0), `*`(m)))) = F(s)
 

> X(s) = solve(%, X(s))
 

X(s) = `/`(`*`(`+`(`*`(x(0), `*`(s, `*`(m))), `*`((D(x))(0), `*`(m)), `*`(x(0), `*`(r)), F(s))), `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k)))
 

> subs(x(0) = 0, (D(x))(0) = 0, %)
 

X(s) = `/`(`*`(F(s)), `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k)))
 

The transfer function of the mass-spring system is given by: 

T(s) = `/`(1, `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k))) 

> T := proc (s) options operator, arrow; `/`(1, `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k))) end proc; -1
 

It is easy to show that the steady-state frequency response to an input `*`(F[0], `*`(cos(`*`(omega, `*`(t))))) becomes 

> x(t) = `*`(F[0], `*`(abs(('T')(`*`(I, `*`(omega)))), `*`(cos(`+`(`*`(omega, `*`(t)), arg(('T')(`*`(I, `*`(omega)))))))))
 

x(t) = `*`(F[0], `*`(abs(T(`*`(I, `*`(omega)))), `*`(cos(`+`(`*`(omega, `*`(t)), arg(T(`*`(I, `*`(omega)))))))))
 

> value(%)
 

x(t) = `/`(`*`(F[0], `*`(cos(`+`(`*`(omega, `*`(t)), arg(`/`(1, `*`(`+`(`-`(`*`(m, `*`(`^`(omega, 2)))), `*`(I, `*`(r, `*`(omega))), k)))))))), `*`(abs(`+`(`-`(`*`(m, `*`(`^`(omega, 2)))), `*`(I, `*`(...
 

The steady-state system response is also a cosine having the same frequency omega as the input. 

And the amplitude of this response is F[0]abs(T(`*`(I, `*`(omega)))). The variation in both the magnitude abs(T(`*`(I, `*`(omega)))) and argument arg(T(`*`(I, `*`(omega)))) as the frequency omega of the input cosine is varied  constitute the frequency response of the system, as the following example shows. 

 

Let us first solve the differential equation using Maples dsolve. 

> f := proc (omega, t) options operator, arrow; `+`(`*`(2, `*`(cos(`*`(t, `*`(omega)))))) end proc
 

proc (omega, t) options operator, arrow; `+`(`*`(2, `*`(cos(`*`(t, `*`(omega)))))) end proc
 

> deq := proc (m, r, k, omega) options operator, arrow; `+`(`*`(m, `*`(Student:-MultivariateCalculus:-diff(x(t), `$`(t, 2)))), `*`(r, `*`(Student:-MultivariateCalculus:-diff(x(t), t))), `*`(k, `*`(x(t))...
 

> deq(m, r, k, omega)
 

`+`(`*`(m, `*`(diff(diff(x(t), t), t))), `*`(r, `*`(diff(x(t), t))), `*`(k, `*`(x(t)))) = `+`(`*`(2, `*`(cos(`*`(omega, `*`(t))))))
 

> sol := dsolve({deq(1, .25, 4, 2), x(0) = 0, (D(x))(0) = 0}, x(t), method = laplace); -1; %
 

x(t) = `+`(`-`(`*`(`/`(64, 255), `*`(`^`(255, `/`(1, 2)), `*`(exp(`+`(`-`(`*`(`/`(1, 8), `*`(t))))), `*`(sin(`+`(`*`(`/`(1, 8), `*`(`^`(255, `/`(1, 2)), `*`(t)))))))))), `*`(4, `*`(sin(`+`(`*`(2, `*`(...
 

> plot(rhs(sol), t = 0 .. 40)
 

Plot_2d
 

The displacement x(t) of a mass-spring system undergoing forced oscillations plotted against the time with m = kg, r = .25 `/`(`*`(Ns), `*`(m)), k = 4 `/`(`*`(N), `*`(m)), omega = 2  

The graph shows that the transient solution dies out as t increases. The transfer function of the system is given by: 

> T := proc (m, r, k, s) options operator, arrow; `/`(1, `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k))) end proc
 

proc (m, r, k, s) options operator, arrow; `/`(1, `*`(`+`(`*`(m, `*`(`^`(s, 2))), `*`(r, `*`(s)), k))) end proc
 

With m = kg, k = 4 `/`(`*`(N), `*`(m)) and s = `*`(I, `*`(omega)), we get 

> Tabs := unapply(evalc(abs(T(1, r, 4, `*`(I, `*`(omega))))), r, omega); -1
 

> 'Tabs(r, omega)' = Tabs(r, omega)
 

Tabs(r, omega) = `/`(1, `*`(`^`(`+`(`*`(`^`(`+`(`*`(`^`(omega, 2)), `-`(4)), 2)), `*`(`^`(r, 2), `*`(`^`(omega, 2)))), `/`(1, 2))))
 

There is some frequency called the resonance frequency at which the amplitude  A = `+`(`*`(2, `*`(Tabs(r, omega))))becomes a maximum. This resonance frequency can be recognized in many vibrating systems unless the damping force r is too large. 

> solve(`+`(`*`(`^`(`+`(`*`(`^`(omega, 2)), `-`(4)), 2)), `*`(`^`(r, 2), `*`(`^`(omega, 2)))) = 0, {r})
 

{r = `/`(`*`(I, `*`(`+`(omega, 2), `*`(`+`(omega, `-`(2))))), `*`(omega))}, {r = `+`(`-`(`/`(`*`(`+`(I), `*`(`+`(omega, 2), `*`(`+`(omega, `-`(2))))), `*`(omega))))}
 

With zero damping force the resonance frequency is omega = 2. 

The phase angle phi is given by 

> phi := unapply(evalc(argument(T(1, r, 4, `*`(I, `*`(omega))))), r, omega)
 

proc (r, omega) options operator, arrow; arctan(`+`(`-`(`*`(omega, `*`(r)))), `+`(`-`(`*`(`^`(omega, 2))), 4)) end proc
 

Substituting the values r = .25, omega = 2 and gives the steady-state response 

> xs := unapply(`+`(`*`(2, `*`(Tabs(.25, 2), `*`(cos(`+`(`*`(2, `*`(t)), phi(.25, 2))))))), t); -1; ('xs')(t) = xs(t); 1
 

xs(t) = `+`(`*`(4.000000000, `*`(cos(`+`(`*`(2, `*`(t)), `-`(1.570796327))))))
 

> sol
 

x(t) = `+`(`-`(`*`(`/`(64, 255), `*`(`^`(255, `/`(1, 2)), `*`(exp(`+`(`-`(`*`(`/`(1, 8), `*`(t))))), `*`(sin(`+`(`*`(`/`(1, 8), `*`(`^`(255, `/`(1, 2)), `*`(t)))))))))), `*`(4, `*`(sin(`+`(`*`(2, `*`(...
 

As  

> control := '`+`(`*`(4, `*`(sin(`+`(`*`(2, `*`(t)))))), `-`(`*`(4, `*`(cos(`+`(`*`(2, `*`(t)), `-`(`*`(`/`(1, 2), `*`(Pi)))))))))' = simplify(`+`(`*`(4, `*`(sin(`+`(`*`(2, `*`(t)))))), `-`(`*`(4, `*`(c...
 

`+`(`*`(4, `*`(sin(`+`(`*`(2, `*`(t)))))), `-`(`*`(4, `*`(cos(`+`(`*`(2, `*`(t)), `-`(`*`(`/`(1, 2), `*`(Pi))))))))) = 0
 

> with(plots); -1
 

> plot([f(2, t), xs(t)], t = 30 .. 39, thickness = [1, 2], legend = [typeset(f(2, t) = input), typeset(xs(t) = '`*`(steady_state, `*`(response))')], labels = [t, x(t)], labelfont = [TIMES, BOLD, 12])
plot([f(2, t), xs(t)], t = 30 .. 39, thickness = [1, 2], legend = [typeset(f(2, t) = input), typeset(xs(t) = '`*`(steady_state, `*`(response))')], labels = [t, x(t)], labelfont = [TIMES, BOLD, 12])
 

Plot_2d
 

> A := 'A'; -1
 

> Tabsi := proc (i) options operator, arrow; plot(Tabs(i, omega), omega = 1 .. 3, A = 0 .. 2.5) end proc; -1
 

> plt2 := proc (i) options operator, arrow; plots:-display(Tabsi(i), text2(i)) end proc; -1
 

> text2 := proc (i) options operator, arrow; plots:-textplot([2, Tabs(i, 2), convert(r = i, string)], align = ABOVE, font = [TIMES, BOLD, 12]) end proc; -1
 

> plots:-display(seq(plt2(i), i = [.1, .25, .5, .75, 1, 1.41]), labels = [omega, A], labelfont = [TIMES, BOLD, 12])
 

Plot_2d
 

Phase shift between steady-state response and input displacement. 

> plots:-display(seq(plt2(`+`(`*`(0.5e-1, `*`(i)))), i = 1 .. 28), insequence = true, labels = [omega, A], labelfont = [TIMES, BOLD, 12])
 

Plot_2d
 

Animation 

> Targ := proc (i) options operator, arrow; plot(phi(i, omega), omega = 1 .. 3) end proc; -1
 

> text3 := proc (i) options operator, arrow; plots:-textplot([2.4, phi(i, 2.4), convert(r = i, string)], align = {ABOVE, RIGHT}, font = [TIMES, BOLD, 12]) end proc; -1
 

> plt3 := proc (i) options operator, arrow; plots:-display(Targ(i), text3(i)) end proc; -1
 

> plots:-display(seq(plt3(i), i = [.1, .25, .5, .75, 1, 1.41]), labels = [omega, phi], labelfont = [TIMES, BOLD, 12])
 

Plot_2d
 

Variation of the phase shift phi against the angular velocity  

> plots:-display(seq(plt3(`+`(`*`(0.5e-1, `*`(i)))), i = 1 .. 28), labelfont = [TIMES, BOLD, 12], insequence = true)
 

Plot_2d
 

Animation 

> f := proc (t) options operator, arrow; `+`(`*`(2, `*`(sin(`+`(`*`(2, `*`(t))))))) end proc; -1
 

> mass_spring(1, .25, 4, 0, 5, 0, 0, 20, f, 60, scaling = constrained)
 

 

 

`+`(diff(diff(x(t), t), t), `*`(.25, `*`(diff(x(t), t))), `*`(4, `*`(x(t)))) = `+`(`*`(2, `*`(sin(`+`(`*`(2, `*`(t)))))))
x(t) = `+`(`*`(`/`(4, 255), `*`(`^`(255, `/`(1, 2)), `*`(exp(`+`(`-`(`*`(`/`(1, 8), `*`(t))))), `*`(sin(`+`(`*`(`/`(1, 8), `*`(`^`(255, `/`(1, 2)), `*`(t))))))))), `*`(4, `*`(exp(`+`(`-`(`*`(`/`(1, 8)...
Plot_2d
 

The displacement of the mass-spring system undergoing forced oscillations with damping constant  

> mass_spring(1, 0.1e-1, 4, 0, 5, 0, 0, 11.5, f, 60, scaling = constrained)
 

 

 

`+`(diff(diff(x(t), t), t), `*`(0.1e-1, `*`(diff(x(t), t))), `*`(4, `*`(x(t)))) = `+`(`*`(2, `*`(sin(`+`(`*`(2, `*`(t)))))))
x(t) = `+`(`*`(`/`(100, 159999), `*`(exp(`+`(`-`(`*`(`/`(1, 200), `*`(t))))), `*`(`^`(159999, `/`(1, 2)), `*`(sin(`+`(`*`(`/`(1, 200), `*`(`^`(159999, `/`(1, 2)), `*`(t))))))))), `*`(100, `*`(exp(`+`(...
Plot_2d
 

The displacement of the mass-spring system undergoing forced oscillations with damping constant