Coupled Oscillators and Normal Modes

Set two identical pendulums side by side and join their bobs with a loose, weak spring. Pull just one aside and let go. At first only that pendulum swings — but watch. Within a few seconds it begins to falter, and its neighbour, which you never touched, starts to swing. The motion drains out of the first pendulum and pours into the second, until the first hangs almost dead and the second is swinging hard. Then the whole exchange reverses. Energy sloshes back and forth between them, over and over, like a slow conversation. Nothing is driving them; the little spring is quietly passing the motion back and forth.

This is a coupled oscillator: two (or more) things that would each happily oscillate on their own, but are tied together so that one cannot move without nudging the other. The puzzle is that neither pendulum keeps a steady rhythm — each swells and fades — and yet the system as a whole is doing something perfectly regular underneath. This page is about finding that hidden regularity. It has a beautiful name and a beautiful piece of mathematics behind it: the system has a handful of pure, clean patterns of motion called normal modes, and every possible wobble, however messy, is just a blend of them. Best of all, finding the modes turns out to be exactly an eigenvalue problem in disguise.

The setup: two masses, three springs

Let us build the cleanest version of the problem so the algebra stays honest. Put two equal masses m on a frictionless track. Anchor each to a wall with an identical spring of stiffness k, and join the two masses to each other with a third spring, the coupling spring, of stiffness k_c. Let x_1 and x_2 be how far each mass has moved from its own resting place, positive to the right.

Now do the bookkeeping of forces on each mass — this is just Hooke's law, applied carefully. Mass 1 feels its wall spring pulling it back (a force -k\,x_1), and the coupling spring, which only cares about how much it has been stretched — that is, the difference x_1 - x_2. If mass 1 has moved further right than mass 2, the coupling spring is stretched and pulls mass 1 back, a force -k_c(x_1 - x_2). So Newton's second law for each mass reads:

m\,\ddot{x}_1 = -k\,x_1 - k_c\,(x_1 - x_2), m\,\ddot{x}_2 = -k\,x_2 - k_c\,(x_2 - x_1).

Look hard at what makes these coupled: the equation for \ddot{x}_1 contains an x_2, and vice versa. You cannot solve one without the other. If the coupling spring were removed (k_c = 0), the two lines would fall apart into two independent simple harmonic oscillators, each humming along at \omega = \sqrt{k/m}, blissfully ignoring its partner. It is precisely that little k_c term — the spring in the middle — that ties their fates together.

Casting it as a matrix problem

Two coupled scalar equations are begging to be written as one vector equation. Gather the displacements into a column vector \mathbf{x} = \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} and rearrange each line so the forces sit in a matrix. Expanding the brackets, mass 1 feels -(k + k_c)\,x_1 + k_c\,x_2, and mass 2 feels k_c\,x_1 - (k + k_c)\,x_2. In matrix form:

m \begin{pmatrix} \ddot{x}_1 \\ \ddot{x}_2 \end{pmatrix} = -\begin{pmatrix} k + k_c & -k_c \\ -k_c & k + k_c \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}.

Write this compactly as

M\,\ddot{\mathbf{x}} = -K\,\mathbf{x},

where M = m\,I is the (diagonal) mass matrix and K = \begin{pmatrix} k + k_c & -k_c \\ -k_c & k + k_c \end{pmatrix} is the stiffness matrix. This is a giant leap: a single-mass oscillator obeys m\ddot{x} = -kx, and we have just written the same equation for two masses, only with numbers promoted to matrices and vectors. That similarity is the whole strategy.

For a single oscillator we know the answer wobbles at one frequency, x(t) = A\cos(\omega t). So let us guess that the coupled system can do the same thing: a motion where both masses share one common frequency \omega and keep a fixed shape \mathbf{v},

\mathbf{x}(t) = \mathbf{v}\,\cos(\omega t), \qquad \mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \end{pmatrix}.

Differentiate twice — each cosine brings down a factor -\omega^2 — so \ddot{\mathbf{x}} = -\omega^2 \mathbf{v}\cos(\omega t). Substitute into M\ddot{\mathbf{x}} = -K\mathbf{x}, cancel the common \cos(\omega t), and with M = mI you land on

K\,\mathbf{v} = m\,\omega^2\,\mathbf{v}.

That is an eigenvalue equation. The allowed shapes \mathbf{v} are the eigenvectors of the stiffness matrix K, and the eigenvalue attached to each one is m\omega^2 — so it hands you the frequency. Solving a coupled oscillator is diagonalising a matrix.

Diagonalising: the two normal modes

Let us actually find the eigenvectors of K = \begin{pmatrix} k + k_c & -k_c \\ -k_c & k + k_c \end{pmatrix}. This matrix is symmetric with equal diagonal entries, and such matrices have a lovely, guessable pair of eigenvectors: the symmetric one and the antisymmetric one.

Try \mathbf{v} = \begin{pmatrix} 1 \\ 1 \end{pmatrix}. Both masses move together, by the same amount, in the same direction. Multiply it out:

K \begin{pmatrix} 1 \\ 1 \end{pmatrix} = \begin{pmatrix} (k+k_c) - k_c \\ -k_c + (k+k_c) \end{pmatrix} = \begin{pmatrix} k \\ k \end{pmatrix} = k \begin{pmatrix} 1 \\ 1 \end{pmatrix}.

It is an eigenvector, with eigenvalue k. Since the eigenvalue is m\omega^2 = k, this mode oscillates at

\omega_{\text{in}} = \sqrt{\frac{k}{m}}.

Notice the coupling spring k_c vanished! That is physically obvious once you see it: if both masses move right by the same amount, the middle spring is never stretched or compressed — it just rides along. So it exerts no force, and the frequency is exactly that of an isolated mass on its wall spring. This is the in-phase (symmetric) mode.

Now try \mathbf{v} = \begin{pmatrix} 1 \\ -1 \end{pmatrix}. The masses move by equal amounts in opposite directions:

K \begin{pmatrix} 1 \\ -1 \end{pmatrix} = \begin{pmatrix} (k+k_c) + k_c \\ -k_c - (k+k_c) \end{pmatrix} = \begin{pmatrix} k + 2k_c \\ -(k + 2k_c) \end{pmatrix} = (k + 2k_c) \begin{pmatrix} 1 \\ -1 \end{pmatrix}.

Another eigenvector, this time with eigenvalue k + 2k_c, so

\omega_{\text{out}} = \sqrt{\frac{k + 2k_c}{m}}.

Now the coupling spring works its hardest: when one mass goes right and the other left, the middle spring is stretched (or squashed) by the full amount, adding stiffness and raising the frequency. This is the out-of-phase (antisymmetric) mode, and it is always the faster of the two.

Seeing the two mode shapes

A picture makes the two modes unforgettable. Below is the two-mass, three-spring system. Step through it: first the setup, then the in-phase mode (arrows pointing the same way — the middle spring rides along, unbothered), then the out-of-phase mode (arrows pointing at each other — the middle spring is squeezed, which is exactly why that mode is stiffer and faster).

Any motion is a blend of the modes — and that is where the beats come from

Here is the payoff. Because the two eigenvectors (1,1) and (1,-1) are independent, any starting configuration can be written as a combination of them, and the system's whole future is just the two modes running at their own frequencies at the same time:

\begin{pmatrix} x_1(t) \\ x_2(t) \end{pmatrix} = A_{\text{in}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}\cos(\omega_{\text{in}} t + \phi_1) + A_{\text{out}}\begin{pmatrix} 1 \\ -1 \end{pmatrix}\cos(\omega_{\text{out}} t + \phi_2).

Now return to the opening puzzle. Suppose you pull only mass 1 aside and release both from rest. To write that start, (x_1, x_2) = (A, 0), as a blend you need equal amounts of each mode: (A,0) = \tfrac{A}{2}(1,1) + \tfrac{A}{2}(1,-1). Both modes are switched on together. Add them up and use a trig identity:

x_1(t) = A\,\cos\!\left(\tfrac{\Delta\omega}{2}t\right)\cos\!\left(\bar{\omega}\,t\right), \qquad x_2(t) = A\,\sin\!\left(\tfrac{\Delta\omega}{2}t\right)\sin\!\left(\bar{\omega}\,t\right),

where \bar{\omega} = (\omega_{\text{in}} + \omega_{\text{out}})/2 is the fast average wobble and \Delta\omega = \omega_{\text{out}} - \omega_{\text{in}} is the small difference. Each mass carries out a fast oscillation whose amplitude slowly breathes in and out at the beat rate \Delta\omega/2. When x_1's envelope is full, x_2's is empty, and vice versa — the energy sloshes between them. These are beats, and they are loudest when the two mode frequencies are close, which happens when the coupling k_c is weak.

Drag the coupling slider and watch. Weak coupling makes a slow, lazy exchange (long beats); strong coupling makes the two masses trade energy so fast the neat beat pattern blurs away.

Worked examples

Example 1 — find the two frequencies. Take k = 20\ \text{N/m}, coupling k_c = 5\ \text{N/m}, and m = 2\ \text{kg}. The in-phase mode ignores the coupling:

\omega_{\text{in}} = \sqrt{\frac{k}{m}} = \sqrt{\frac{20}{2}} = \sqrt{10} \approx 3.16\ \text{rad/s}.

The out-of-phase mode feels an extra 2k_c = 10\ \text{N/m} of stiffness:

\omega_{\text{out}} = \sqrt{\frac{k + 2k_c}{m}} = \sqrt{\frac{20 + 10}{2}} = \sqrt{15} \approx 3.87\ \text{rad/s}.

As promised, the out-of-phase mode is the faster one — the middle spring stiffens it.

Example 2 — the same numbers, in a running example. Here is the calculation as a short program, so you can change the numbers and watch the two frequencies move:

const k = 20; // wall spring stiffness (N/m) const kc = 5; // coupling spring stiffness (N/m) const m = 2; // each mass (kg) const wIn = Math.sqrt(k / m); // in-phase (symmetric) mode const wOut = Math.sqrt((k + 2 * kc) / m); // out-of-phase (antisymmetric) mode console.log("in-phase w =", wIn.toFixed(3), "rad/s"); console.log("out-of-phase w =", wOut.toFixed(3), "rad/s"); console.log("ratio wOut/wIn =", (wOut / wIn).toFixed(3));

Example 3 — reading off a mode. A student measures the two masses and finds that at every instant x_1 = -x_2: they mirror each other exactly. Which mode is this, and what is its frequency? The displacement vector is always a multiple of (1,-1), the antisymmetric eigenvector, so this is the pure out-of-phase mode, oscillating at \omega_{\text{out}} = \sqrt{(k + 2k_c)/m}. Because it is a single pure mode, the amplitudes do not beat — both masses hold a steady swing.

Example 4 — building a general motion. Suppose the in-phase amplitude is A_{\text{in}} = 3\ \text{cm} and the out-of-phase amplitude is A_{\text{out}} = 1\ \text{cm} (both starting at a crest). Then at t = 0 the masses sit at x_1 = A_{\text{in}} + A_{\text{out}} = 4\ \text{cm} and x_2 = A_{\text{in}} - A_{\text{out}} = 2\ \text{cm}. As time runs, each mode spins at its own frequency and the two masses trace a genuinely complicated path — but it is only ever the sum of those two simple pieces. That is the entire content of the theory: hard motion, built from easy modes.

A very natural thing to say after meeting the two mode frequencies is: "so mass 1 oscillates at \omega_{\text{in}} and mass 2 at \omega_{\text{out}}." This is wrong, and it is the classic trap. The two frequencies do not belong to the two masses — they belong to the two modes. In a general motion, a single mass carries both frequencies at once, superimposed. That is precisely why the beat pattern above looks the way it does: each mass is doing a fast wobble (the average frequency) inside a slowly breathing envelope (the difference frequency), and both of those come from mixing the two modes. A mass does only one pure frequency in the special case where the system is locked into a single normal mode — the exception, not the rule.

No — and the asymmetry is the whole story. Adding or stiffening the coupling spring k_c leaves the in-phase frequency completely untouched at \sqrt{k/m}, because in that mode the coupling spring never changes length, so it can't possibly matter. It only ever raises the out-of-phase frequency, to \sqrt{(k + 2k_c)/m}. So as you crank up the coupling, the two frequencies spread apart — the modes split. This "mode splitting" is a fingerprint of coupling that shows up everywhere: two identical tuning forks joined by a bar, two pendulums on a shared string, and — jump to quantum mechanics — two identical atoms brought close, whose single shared electron level splits into a lower "bonding" and higher "antibonding" pair. Same maths, same picture: coupling splits a degenerate pair into a low symmetric mode and a high antisymmetric one.