JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

Hyperbolic Systems and Characteristic Speeds

One transport equation carried a single signal at one speed. What if several quantities ride together and trade momentum? Meet first-order hyperbolic systems, learn why their eigenvalues ARE the speeds at which signals travel, and see how diagonalizing turns a coupled mess into independent travelling waves.

From one carried signal to a crew of them

You arrived here knowing one beautiful fact: the transport equation u_t + c u_x = 0 carries a profile downstream at speed c, and its solution f(x - c t) is constant along the lines x - c t = constant. That single speed c was the whole story. But most of physics is not one quantity drifting alone — it is several quantities riding together and pushing on each other. In a gas, density and velocity are coupled: squeeze the density and the velocity field reacts; speed up the flow and the density piles up ahead. We need a way to handle a vector of unknowns evolving in lockstep, and that is exactly what a first-order hyperbolic system is.

Collect the unknowns into a column U(x,t) = (u_1, u_2, ..., u_n). A first-order system in one space dimension looks like U_t + A U_x = 0, where A is an n-by-n matrix. Each row is its own PDE, and the off-diagonal entries of A are precisely the couplings: row 1's equation contains u_2's slope, row 2's contains u_1's slope, and so on. If A were diagonal, the rows would not talk to each other and we would simply have n independent transport equations, each carried at its own diagonal speed. The whole craft of this guide is to make a non-diagonal A behave, in the right coordinates, exactly like a diagonal one.

Why the eigenvalues ARE the speeds

Here is the central idea, and it is genuinely lovely. Suppose A has a (left) eigenvector L with L A = lambda L, so L picks out the direction lambda. Multiply the system U_t + A U_x = 0 on the left by L. The first term becomes (L U)_t and the second becomes L A U_x = lambda L U_x. Setting w = L U, the whole vector system collapses into one scalar transport equation w_t + lambda w_x = 0. We already know its answer cold: w is carried unchanged along the lines x - lambda t = constant. So each eigenvalue lambda of A is a characteristic speed — literally the speed at which one particular combination of the unknowns travels.

This is what the word hyperbolic secretly means for a system. A system U_t + A U_x = 0 is called hyperbolic precisely when A has n REAL eigenvalues and a full set of eigenvectors — that is, when A is real-diagonalizable. Real eigenvalues mean the speeds are real, so signals genuinely propagate; a full eigenvector basis means we can decouple every direction at once. If some eigenvalues were complex, you would get exponential growth instead of travelling waves and the initial-value problem would be ill-posed — the same kind of failure as trying to run the heat equation backwards in time. Hyperbolicity is exactly the condition that the propagation picture is honest.

Diagonalize: a coupled mess becomes independent waves

Now do the eigenvalue trick for every direction at once, not just one. Stack the n left eigenvectors as the rows of a matrix L, so that L A = D L with D = diag(lambda_1, ..., lambda_n). Define the new variables W = L U. Multiplying the system by L gives W_t + D W_x = 0, and because D is diagonal this is just n separate scalar transport equations, w_k,t + lambda_k w_k,x = 0, one per component. The original unknowns were chattering across the off-diagonals of A; the new variables W glide right past each other without a word. Each w_k is a Riemann invariant (for linear systems, exactly so): a combination of the original quantities that is carried unchanged along its own characteristic.

U_t + A U_x = 0            (coupled: A has off-diagonal entries)
        |
        |  W = L U,   L A = D L,   D = diag(lambda_1, ..., lambda_n)
        v
w_1,t + lambda_1 w_1,x = 0    -->  w_1 = const along x - lambda_1 t = const
w_2,t + lambda_2 w_2,x = 0    -->  w_2 = const along x - lambda_2 t = const
   ...
w_n,t + lambda_n w_n,x = 0    -->  w_n = const along x - lambda_n t = const
Diagonalizing A splits one coupled system into n independent travelling waves — each Riemann invariant w_k riding its own characteristic at speed lambda_k.

To rebuild the physical answer, just undo the change of variables: U = L^(-1) W. Each component of U is therefore a sum of n simple travelling waves, one per characteristic speed. This is the system-level echo of the wave equation splitting into left- and right-movers — there, A had eigenvalues +c and -c, so a signal split into one piece running right at speed c and one running left at speed -c, exactly d'Alembert's F(x - c t) + G(x + c t). The general hyperbolic system is the same story with n speeds instead of two. The method that carries each piece along its line is just the method of characteristics you met earlier, now run once per eigenvalue.

A tiny worked example: the 2-by-2 case

Take the wave equation written as a system, with p = u_t and q = c u_x. A short calculation gives p_t = c q_x and q_t = c p_x, that is U_t + A U_x = 0 with U = (p, q) and A having the rows (0, -c) and (-c, 0). Its eigenvalues solve lambda^2 - c^2 = 0, so lambda = +c and lambda = -c — two real, distinct speeds, so the system is strictly hyperbolic. The matching combinations are p - q and p + q. Indeed (p - q) is carried at speed +c and (p + q) at speed -c, and those two carried combinations are precisely the Riemann invariants.

  1. Write the system in matrix form U_t + A U_x = 0 and read off A.
  2. Solve det(A - lambda I) = 0 for the eigenvalues lambda_1, ..., lambda_n — these are the characteristic speeds. Check they are all real (else the system is not hyperbolic).
  3. Find a left eigenvector L_k for each lambda_k; the combination w_k = L_k U is the Riemann invariant carried at speed lambda_k.
  4. Each w_k stays constant along the line x - lambda_k t = constant; transport the initial data along these lines, then invert U = L^(-1) W to recover the physical answer.

Notice what the two speeds buy us. From a single point of disturbance, information spreads outward no faster than the fastest speed and no slower than the slowest — here, no faster than +c and no slower than -c. That bounded fan of influence is the domain of dependence, and it is the deepest fingerprint of hyperbolicity: signals travel at FINITE speed. This is the sharp opposite of diffusion, where a disturbance is felt everywhere instantly. Finite speed is why a thunderclap reaches you after the lightning, not with it.

When the speeds depend on the state — the road ahead

Everything above assumed A was a fixed matrix of constants, so the speeds lambda_k were fixed numbers and the characteristics were straight, parallel tracks drawn in advance. The genuinely interesting physics begins when A depends on U itself — a quasilinear system U_t + A(U) U_x = 0. Now the characteristic speeds lambda_k(U) change with the solution, so the characteristic lines bend, and faster characteristics can catch up to and overtake slower ones. When two characteristics carrying different values collide, the smooth solution has no consistent value to take — and a shock is born in finite time.

This is the heart of the whole rung, and the reason it exists. The cleanest nonlinear example is the scalar case, where a single conserved quantity has a state-dependent speed — think of the equations of gas dynamics, or simpler still, traffic on a road where dense regions crawl and sparse regions race. Once shocks form, the classical idea of a smooth solution breaks down entirely, and we are forced to widen what we mean by a 'solution': enter weak solutions, the jump conditions that hold across a shock, the entropy rule that picks the physical one, and finally the limit of vanishing viscosity. Guide by guide, this rung builds exactly that machinery on the foundation you have just laid.