Chapter 10: Time-Domain Response of Linear Systems

Lesson 3: Underdamped, Critically Damped, and Overdamped Responses

This lesson derives and interprets the canonical time-domain responses of second-order linear systems under a unit-step input. Starting from the characteristic equation, we rigorously obtain closed-form expressions for underdamped, critically damped, and overdamped responses, connect each case to pole locations in the \( s \)-plane, and implement the formulas in Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica.

1. Standard Second-Order Model and the Step-Response Problem

From Lesson 2, we use the standard second-order closed-loop form with unity DC gain: \( G(s)=\dfrac{\omega_n^2}{s^2+2\zeta\omega_n s+\omega_n^2} \), where \( \omega_n \) is the natural frequency and \( \zeta \) is the damping ratio.

For a unit-step input \( u(t)=1(t) \) (so \( U(s)=\dfrac{1}{s} \)), the output transform is \( Y(s)=G(s)U(s) \):

\[ Y(s)=\frac{\omega_n^2}{s\left(s^2+2\zeta\omega_n s+\omega_n^2\right)}. \]

In the time domain, the corresponding differential equation (zero initial conditions) is:

\[ \ddot{y}(t)+2\zeta\omega_n\dot{y}(t)+\omega_n^2 y(t)=\omega_n^2 u(t), \qquad y(0)=0,\;\dot{y}(0)=0. \]

A key simplification for step inputs is to define the tracking error \( e(t)=y(t)-1 \). Since a constant particular solution is \( y_p(t)=1 \), the error satisfies the homogeneous ODE:

\[ \ddot{e}(t)+2\zeta\omega_n\dot{e}(t)+\omega_n^2 e(t)=0, \qquad e(0)=-1,\;\dot{e}(0)=0. \]

Therefore, the classification of the step response is entirely determined by the roots of the characteristic polynomial \( s^2+2\zeta\omega_n s+\omega_n^2=0 \).

2. Characteristic Equation, Discriminant, and Response Classes

The characteristic equation is:

\[ s^2+2\zeta\omega_n s+\omega_n^2=0. \]

Its roots are:

\[ s_{1,2}=-\zeta\omega_n \pm \omega_n\sqrt{\zeta^2-1}. \]

The discriminant determines the qualitative response:

\[ \Delta=(2\zeta\omega_n)^2-4\omega_n^2=4\omega_n^2(\zeta^2-1). \]

flowchart TD
  S["Start: s^2 + 2*zeta*wn*s + wn^2 = 0"] --> D["Compute Delta = 4*wn^2*(zeta^2 - 1)"]
  D -->|"zeta < 1 (Delta < 0)"| U["Underdamped: \ncomplex poles"]
  D -->|"zeta = 1 (Delta = 0)"| C["Critically damped: \nrepeated real pole"]
  D -->|"zeta > 1 (Delta > 0)"| O["Overdamped: \ndistinct real poles"]
  U --> UF["y(t)=1 - exp(-zeta*wn*t)*(cos(wd*t) + \n(zeta/sqrt(1-zeta^2))*sin(wd*t))"]
  C --> CF["y(t)=1 - exp(-wn*t)*(1 + wn*t)"]
  O --> OF["y(t)=1 + (s2*exp(s1*t) - \ns1*exp(s2*t))/(s1 - s2)"]
  

In the underdamped case, we also define the damped natural frequency: \( \omega_d=\omega_n\sqrt{1-\zeta^2} \) (valid for \( 0 < \zeta < 1 \)).

3. Underdamped Response ( \( 0 < \zeta < 1 \) ): Closed Form and Key Properties

For \( 0 < \zeta < 1 \), the roots are complex: \( s_{1,2}=-\zeta\omega_n \pm j\omega_d \), where \( \omega_d=\omega_n\sqrt{1-\zeta^2} \). The general homogeneous error solution is:

\[ e(t)=e^{-\zeta\omega_n t}\left(C_1\cos(\omega_d t)+C_2\sin(\omega_d t)\right). \]

Apply the step-response initial conditions \( e(0)=-1 \), \( \dot{e}(0)=0 \). First, from \( e(0)=C_1=-1 \). Differentiate:

\[ \dot{e}(t)=e^{-\zeta\omega_n t}\Big[ -\zeta\omega_n\left(C_1\cos(\omega_d t)+C_2\sin(\omega_d t)\right) -C_1\omega_d\sin(\omega_d t)+C_2\omega_d\cos(\omega_d t) \Big]. \]

Evaluate at \( t=0 \):

\[ \dot{e}(0)= -\zeta\omega_n C_1 + \omega_d C_2 = 0 \;\; → \;\; C_2=\frac{\zeta\omega_n}{\omega_d}C_1 =-\frac{\zeta\omega_n}{\omega_d}. \]

Substitute \( C_1=-1 \), \( C_2=-\dfrac{\zeta\omega_n}{\omega_d} \), and use \( \dfrac{\omega_n}{\omega_d}=\dfrac{1}{\sqrt{1-\zeta^2}} \):

\[ e(t)=-e^{-\zeta\omega_n t}\left(\cos(\omega_d t)+\frac{\zeta}{\sqrt{1-\zeta^2}}\sin(\omega_d t)\right). \]

Since \( y(t)=1+e(t) \), the underdamped unit-step response is:

\[ y(t)=1-e^{-\zeta\omega_n t}\left(\cos(\omega_d t)+\frac{\zeta}{\sqrt{1-\zeta^2}}\sin(\omega_d t)\right), \qquad \omega_d=\omega_n\sqrt{1-\zeta^2}. \]

Oscillation and overshoot (derived from the closed form). The exponential envelope \( e^{-\zeta\omega_n t} \) guarantees decay, while the sinusoidal terms create oscillation. The first peak occurs when \( \dot{y}(t)=0 \); for the canonical step response this yields:

\[ t_p=\frac{\pi}{\omega_d}, \qquad M_p=\exp\!\left(\frac{-\pi\zeta}{\sqrt{1-\zeta^2}}\right), \qquad (0 < \zeta < 1). \]

These expressions will be used more systematically in Lesson 5 (performance metrics), but the key lesson here is structural: \( 0 < \zeta < 1 \) implies decaying oscillations because the poles are complex conjugates.

4. Critically Damped Response ( \( \zeta=1 \) ): Repeated Pole and Fastest Non-Oscillatory Step

For \( \zeta=1 \), the characteristic equation has a repeated root: \( s=-\omega_n \) with multiplicity 2. The homogeneous error solution becomes:

\[ e(t)=(C_1+C_2 t)e^{-\omega_n t}. \]

Apply the initial conditions. From \( e(0)=C_1=-1 \). Differentiate:

\[ \dot{e}(t)=C_2 e^{-\omega_n t}-(C_1+C_2 t)\omega_n e^{-\omega_n t}. \]

At \( t=0 \):

\[ \dot{e}(0)=C_2-\omega_n C_1=0 \;\; → \;\; C_2=\omega_n C_1=-\omega_n. \]

Therefore:

\[ e(t)=(-1-\omega_n t)e^{-\omega_n t}, \qquad y(t)=1-(1+\omega_n t)e^{-\omega_n t}. \]

Proof of monotonicity and no overshoot. For all \( t > 0 \), we have \( (1+\omega_n t)e^{-\omega_n t} > 0 \), hence: \( y(t) < 1 \). Also,

\[ \dot{y}(t)=\frac{d}{dt}\left(1-(1+\omega_n t)e^{-\omega_n t}\right) =\omega_n^2 t e^{-\omega_n t}. \]

Since \( \omega_n^2 t e^{-\omega_n t} > 0 \) for all \( t > 0 \), the response is strictly increasing and approaches 1 from below. This formalizes the statement: \( \zeta=1 \) is the fastest non-oscillatory step response within the second-order family.

5. Overdamped Response ( \( \zeta > 1 \) ): Two Real Modes and Guaranteed Non-Oscillation

For \( \zeta > 1 \), the poles are distinct real numbers:

\[ s_{1,2}=-\zeta\omega_n \pm \omega_n\sqrt{\zeta^2-1}, \qquad s_1 > s_2,\;\; s_1<0,\;\; s_2<0. \]

The homogeneous error solution is:

\[ e(t)=C_1 e^{s_1 t}+C_2 e^{s_2 t}. \]

Apply \( e(0)=-1 \) and \( \dot{e}(0)=0 \):

\[ C_1+C_2=-1, \qquad s_1 C_1+s_2 C_2=0. \]

Solving the linear system yields:

\[ C_1=\frac{s_2}{s_2-s_1}, \qquad C_2=\frac{s_1}{s_1-s_2}. \]

Hence the overdamped unit-step response is:

\[ y(t)=1+e(t) =1+\frac{s_2 e^{s_1 t}-s_1 e^{s_2 t}}{s_1-s_2}, \qquad (\zeta > 1). \]

Proof that the response is monotone increasing. Differentiate:

\[ \dot{y}(t)=\frac{s_1 s_2}{s_1-s_2}\left(e^{s_1 t}-e^{s_2 t}\right). \]

Because \( s_1<0 \) and \( s_2<0 \), we have \( s_1 s_2 > 0 \). Also, since \( s_1 > s_2 \), it follows that \( e^{s_1 t} > e^{s_2 t} \) for all \( t>0 \). Finally, \( s_1-s_2 > 0 \), hence \( \dot{y}(t) > 0 \) for all \( t>0 \). Therefore the overdamped step response increases monotonically to 1 and cannot overshoot.

flowchart TD
  P["Poles from s^2 + 2*zeta*wn*s + wn^2 = 0"] --> U["0 < zeta < 1: poles = -zeta*wn ± j*wd"]
  P --> C["zeta = 1: double pole at -wn"]
  P --> O["zeta > 1: poles = s1, s2 \n(both real, negative)"]
  U --> UE["Time response: decaying oscillation \n(exp envelope + sin/cos)"]
  C --> CE["Time response: fastest \nnon-oscillatory (t*exp term)"]
  O --> OE["Time response: \nsum of two decaying \nexponentials (two modes)"]
        

6. Implementations in Scientific Computing Environments

Below, we implement the unit-step response \( y(t) \) in two ways: (i) via control libraries (transfer function → step response), and (ii) via the derived closed forms (from scratch), using careful branching near \( \zeta=1 \).

6.1 Python (SciPy / python-control) + Closed-Form Implementation

import numpy as np

def step_response_closed_form(t, wn, zeta, tol=1e-8):
    t = np.asarray(t, dtype=float)

    if zeta < 1.0 - tol:
        wd = wn * np.sqrt(1.0 - zeta**2)
        return 1.0 - np.exp(-zeta*wn*t) * (np.cos(wd*t) + (zeta/np.sqrt(1.0 - zeta**2))*np.sin(wd*t))

    elif abs(zeta - 1.0) <= tol:
        return 1.0 - np.exp(-wn*t) * (1.0 + wn*t)

    else:
        a = np.sqrt(zeta**2 - 1.0)
        s1 = -wn*(zeta - a)
        s2 = -wn*(zeta + a)
        return 1.0 + (s2*np.exp(s1*t) - s1*np.exp(s2*t)) / (s1 - s2)

# Library-based validation (SciPy)
if __name__ == "__main__":
    import matplotlib.pyplot as plt
    from scipy import signal

    wn, zeta = 5.0, 0.3
    sys = signal.TransferFunction([wn**2], [1.0, 2.0*zeta*wn, wn**2])

    t = np.linspace(0, 5, 2000)
    tout, y_lib = signal.step(sys, T=t)
    y_cf = step_response_closed_form(t, wn, zeta)

    plt.figure()
    plt.plot(tout, y_lib, label="SciPy step()")
    plt.plot(t, y_cf, "--", label="Closed form")
    plt.xlabel("t (s)")
    plt.ylabel("y(t)")
    plt.grid(True)
    plt.legend()
    plt.show()

Typical Python control workflows use scipy.signal (included with SciPy) or the control package (python-control) for transfer-function modeling and response simulation.

6.2 C++ (From Scratch Closed Form)

#include <cmath>
#include <iostream>
#include <vector>

double stepResponseClosedForm(double t, double wn, double zeta, double tol = 1e-8) {
    if (zeta < 1.0 - tol) {
        double wd = wn * std::sqrt(1.0 - zeta*zeta);
        double expo = std::exp(-zeta*wn*t);
        double term = std::cos(wd*t) + (zeta/std::sqrt(1.0 - zeta*zeta))*std::sin(wd*t);
        return 1.0 - expo * term;
    } else if (std::abs(zeta - 1.0) <= tol) {
        return 1.0 - std::exp(-wn*t) * (1.0 + wn*t);
    } else {
        double a = std::sqrt(zeta*zeta - 1.0);
        double s1 = -wn*(zeta - a);
        double s2 = -wn*(zeta + a);
        return 1.0 + (s2*std::exp(s1*t) - s1*std::exp(s2*t)) / (s1 - s2);
    }
}

int main() {
    double wn = 5.0;
    std::vector<double> zetas = {0.2, 1.0, 2.0};

    for (double zeta : zetas) {
        std::cout << "zeta=" << zeta << "\n";
        for (int k = 0; k <= 10; ++k) {
            double t = 0.1 * k;
            double y = stepResponseClosedForm(t, wn, zeta);
            std::cout << "  t=" << t << "  y=" << y << "\n";
        }
        std::cout << "\n";
    }
    return 0;
}

For larger system-dynamics projects in C++, common supporting libraries include Eigen (linear algebra) and Boost (numerics). Here, the second-order closed form avoids any dependency while remaining numerically stable if you treat the neighborhood of \( \zeta=1 \) with a tolerance.

6.3 Java (Closed Form + Notes on Libraries)

public class SecondOrderStepResponse {

    public static double stepResponseClosedForm(double t, double wn, double zeta, double tol) {
        if (zeta < 1.0 - tol) {
            double wd = wn * Math.sqrt(1.0 - zeta*zeta);
            double expo = Math.exp(-zeta*wn*t);
            double term = Math.cos(wd*t) + (zeta/Math.sqrt(1.0 - zeta*zeta))*Math.sin(wd*t);
            return 1.0 - expo * term;
        } else if (Math.abs(zeta - 1.0) <= tol) {
            return 1.0 - Math.exp(-wn*t) * (1.0 + wn*t);
        } else {
            double a = Math.sqrt(zeta*zeta - 1.0);
            double s1 = -wn*(zeta - a);
            double s2 = -wn*(zeta + a);
            return 1.0 + (s2*Math.exp(s1*t) - s1*Math.exp(s2*t)) / (s1 - s2);
        }
    }

    public static void main(String[] args) {
        double wn = 5.0;
        double[] zetas = {0.2, 1.0, 2.0};
        double tol = 1e-8;

        for (double zeta : zetas) {
            System.out.println("zeta=" + zeta);
            for (int k = 0; k <= 10; k++) {
                double t = 0.1 * k;
                double y = stepResponseClosedForm(t, wn, zeta, tol);
                System.out.println("  t=" + t + "  y=" + y);
            }
            System.out.println();
        }
    }
}

For more general simulation (beyond closed forms), Java users often rely on Apache Commons Math for ODE integrators and numerics. In this lesson, the closed-form approach directly encodes the theory derived in Sections 3–5.

6.4 MATLAB + Simulink (Transfer Function and Step)

% MATLAB: second-order step response using Control System Toolbox
wn = 5; zeta = 0.3;
G = tf(wn^2, [1 2*zeta*wn wn^2]);

figure;
step(G);
grid on;
title('Second-Order Unit-Step Response');

% Closed-form verification
t = linspace(0, 5, 2000);
wd = wn*sqrt(1 - zeta^2);
y_cf = 1 - exp(-zeta*wn*t).*(cos(wd*t) + (zeta/sqrt(1-zeta^2))*sin(wd*t));

hold on;
plot(t, y_cf, '--');
legend('step(G)', 'closed form');

Simulink guidance (conceptual, no images). Use a Transfer Fcn block with numerator [wn^2] and denominator [1 2*zeta*wn wn^2]. Drive it with a Step block (step time 0, initial 0, final 1) and view output on a Scope. This exactly matches the mathematical model \( G(s) \) used above.

6.5 Wolfram Mathematica (TransferFunctionModel + StepResponse)

(* Mathematica: second-order step response *)
wn = 5; zeta = 0.3;
G = TransferFunctionModel[wn^2/(s^2 + 2 zeta wn s + wn^2), s];

(* Step response *)
StepResponse[G, {t, 0, 5}]

(* Closed form (piecewise) *)
yClosed[t_] := Piecewise[{
  {1 - Exp[-zeta wn t] (Cos[wn Sqrt[1 - zeta^2] t] + (zeta/Sqrt[1 - zeta^2]) Sin[wn Sqrt[1 - zeta^2] t]), 0 < zeta < 1},
  {1 - Exp[-wn t] (1 + wn t), zeta == 1},
  {Module[{a, s1, s2},
     a = Sqrt[zeta^2 - 1];
     s1 = -wn (zeta - a); s2 = -wn (zeta + a);
     1 + (s2 Exp[s1 t] - s1 Exp[s2 t])/(s1 - s2)
   ], zeta > 1}
}];

Plot[{StepResponse[G, t], yClosed[t]}, {t, 0, 5}, PlotLegends -> {"Library", "Closed form"}]

Mathematica’s control-systems functions provide an immediate symbolic/numeric check against the derived expressions, which is particularly useful when studying limiting behavior as \( \zeta \) approaches 1.

7. Problems and Solutions

Problem 1 (Classify and write the step response): Consider \( G(s)=\dfrac{25}{s^2+4s+25} \). Find \( \omega_n \) and \( \zeta \), classify the response, and write the unit-step response \( y(t) \) in closed form.

Solution: Match coefficients with \( s^2+2\zeta\omega_n s+\omega_n^2 \).

\[ \omega_n^2=25 \;\; → \;\; \omega_n=5, \qquad 2\zeta\omega_n=4 \;\; → \;\; \zeta=\frac{4}{2\cdot 5}=0.4. \]

Since \( 0 < \zeta < 1 \), the system is underdamped. Compute \( \omega_d=\omega_n\sqrt{1-\zeta^2}=5\sqrt{1-0.16}=5\sqrt{0.84} \). The unit-step response is:

\[ y(t)=1-e^{-0.4\cdot 5\, t}\left(\cos(\omega_d t)+\frac{0.4}{\sqrt{1-0.4^2}}\sin(\omega_d t)\right), \quad \omega_d=5\sqrt{0.84}. \]


Problem 2 (Compute peak time and overshoot from the underdamped form): For \( \omega_n=10 \), \( \zeta=0.2 \), compute \( \omega_d \), the first peak time \( t_p \), and the overshoot ratio \( M_p \).

Solution:

\[ \omega_d=\omega_n\sqrt{1-\zeta^2}=10\sqrt{1-0.04}=10\sqrt{0.96}. \]

\[ t_p=\frac{\pi}{\omega_d}=\frac{\pi}{10\sqrt{0.96}}. \]

\[ M_p=\exp\!\left(\frac{-\pi\zeta}{\sqrt{1-\zeta^2}}\right) =\exp\!\left(\frac{-\pi\cdot 0.2}{\sqrt{0.96}}\right). \]

These follow directly from the canonical underdamped step-response structure; they quantify the oscillatory character implied by complex poles.


Problem 3 (Monotonicity of critical damping): Show that for \( \zeta=1 \) the unit-step response \( y(t)=1-(1+\omega_n t)e^{-\omega_n t} \) satisfies \( 0 \le y(t) < 1 \) and is strictly increasing for all \( t>0 \).

Solution: For \( t\ge 0 \), \( (1+\omega_n t)e^{-\omega_n t} \ge 0 \), hence \( y(t)\le 1 \). Also \( y(0)=0 \). Differentiate:

\[ \dot{y}(t)=\omega_n^2 t e^{-\omega_n t}. \]

Since \( \omega_n^2 t e^{-\omega_n t} > 0 \) for \( t>0 \), the response is strictly increasing. Therefore it approaches 1 from below with no overshoot.


Problem 4 (Overdamped derivative sign): Let \( \zeta>1 \), and define poles \( s_1>s_2 \) as in Section 5. Starting from \( y(t)=1+\dfrac{s_2 e^{s_1 t}-s_1 e^{s_2 t}}{s_1-s_2} \), prove \( \dot{y}(t)>0 \) for all \( t>0 \).

Solution: Differentiate explicitly:

\[ \dot{y}(t)=\frac{s_1 s_2}{s_1-s_2}\left(e^{s_1 t}-e^{s_2 t}\right). \]

For \( \zeta>1 \), both poles are real negative, so \( s_1 s_2 > 0 \). Also, since \( s_1>s_2 \), we have \( e^{s_1 t} > e^{s_2 t} \) for all \( t>0 \). Finally, \( s_1-s_2 > 0 \). Hence every factor is positive, so \( \dot{y}(t)>0 \).


Problem 5 (Estimating damping ratio from decay of peaks): In an underdamped step response, suppose two successive peak deviations from steady state satisfy \( |e(t_k)|/|e(t_{k+1})| = R \) with \( R>1 \). Show that the logarithmic decrement \( \delta=\ln(R) \) satisfies: \( \delta=\dfrac{2\pi\zeta}{\sqrt{1-\zeta^2}} \), and solve for \( \zeta \) in terms of \( \delta \).

Solution: For \( 0 < \zeta < 1 \), the envelope of oscillation is proportional to \( e^{-\zeta\omega_n t} \). Successive peaks are separated by one damped period \( T_d=\dfrac{2\pi}{\omega_d} \), where \( \omega_d=\omega_n\sqrt{1-\zeta^2} \). Therefore:

\[ \frac{|e(t_k)|}{|e(t_{k+1})|}=\frac{e^{-\zeta\omega_n t_k}}{e^{-\zeta\omega_n (t_k+T_d)}}=e^{\zeta\omega_n T_d} \;\; → \;\; \delta=\ln(R)=\zeta\omega_n\frac{2\pi}{\omega_d}. \]

\[ \delta=\zeta\omega_n\frac{2\pi}{\omega_n\sqrt{1-\zeta^2}} =\frac{2\pi\zeta}{\sqrt{1-\zeta^2}}. \]

Solve for \( \zeta \) by squaring:

\[ \delta^2=\frac{4\pi^2\zeta^2}{1-\zeta^2} \;\; → \;\; \delta^2(1-\zeta^2)=4\pi^2\zeta^2 \;\; → \;\; \delta^2=\zeta^2(\delta^2+4\pi^2). \]

\[ \zeta=\frac{\delta}{\sqrt{\delta^2+4\pi^2}}. \]

8. Summary

We derived the unit-step responses for the canonical second-order system by reducing the problem to the homogeneous error dynamics and solving the characteristic equation. The discriminant (equivalently, the damping ratio) partitions responses into: underdamped (complex poles and decaying oscillations), critically damped (repeated pole and fastest non-oscillatory response), and overdamped (two real modes and monotone behavior). Finally, we implemented the closed forms and validated them against standard control libraries across multiple programming environments.

9. References

  1. Hurwitz, A. (1895). Über die Bedingungen, unter welchen eine Gleichung nur Wurzeln mit negativen reellen Teilen besitzt. Mathematische Annalen, 46, 273–284.
  2. Routh, E.J. (1877). A Treatise on the Stability of a Given State of Motion. (Foundational stability theory frequently cited in later journal literature.)
  3. Nyquist, H. (1932). Regeneration theory. Bell System Technical Journal, 11(1), 126–147.
  4. Bode, H.W. (1945). Network analysis and feedback amplifier design principles (theoretical foundations). Bell System Technical Journal, 24, 1–45.
  5. Butterworth, S. (1930). On the theory of filter amplifiers. Wireless Engineer, 7, 536–541.
  6. Kalman, R.E. (1960). On the general theory of control systems. Proceedings of the First International Congress on Automatic Control, 481–492.
  7. Ziegler, J.G., & Nichols, N.B. (1942). Optimum settings for automatic controllers. Transactions of the ASME, 64, 759–768.
  8. Evans, W.R. (1948). Control system synthesis by root locus method. Transactions of the American Institute of Electrical Engineers, 67(1), 547–551.

Note: These references emphasize foundational linear-systems theory that underlies second-order transient behavior and pole-based classification.