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.
-
A normal mode is an eigenvector of the system: a special pattern in which every
mass oscillates at one shared frequency, keeping a fixed shape.
-
In-phase (symmetric) mode — \mathbf{v} = (1,\,1), both
masses together, the coupling spring untouched:
\omega_{\text{in}} = \sqrt{k/m} (the lower frequency).
-
Out-of-phase (antisymmetric) mode — \mathbf{v} = (1,\,-1),
masses opposed, the coupling spring fully worked:
\omega_{\text{out}} = \sqrt{(k + 2k_c)/m} (the higher frequency).
-
The number of normal modes equals the number of masses (degrees of freedom). Every possible motion
is a superposition of the modes.
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.