Linear Stability Analysis

An ODE system is a collection of ordinary differential equations — one per variable being modeled — coupled together by allowing each variable’s rate to depend on all the others. This page restricts to the 2D case: two equations governing two variables x(t)x(t) and y(t)y(t),

x˙(t)=f1(x(t),y(t)),y˙(t)=f2(x(t),y(t)).\dot x(t) = f_1(x(t), y(t)), \qquad \dot y(t) = f_2(x(t), y(t)).

The pair (x(t),y(t))(x(t), y(t)) — the values of both variables at time tt — is called the system’s state. The dot notation x˙=dx/dt\dot x = dx/dt marks the time derivative as usual, and the rate functions f1,f2f_1, f_2 each take a state (x,y)(x, y) and return the speed at which that variable is changing there. The two-species model is one instance, with x,yx, y playing the role of the two populations p,qp, q. The chapter writes that model in factored form, p˙=f(p,q)p\dot p = f(p,q)\,p and q˙=g(p,q)q\dot q = g(p,q)\,q, where ff and gg are per-capita growth rates. To match the shape used on this page, the rate functions are the full products: f1(x,y)=f(x,y)xf_1(x,y) = f(x,y)\,x and f2(x,y)=g(x,y)yf_2(x,y) = g(x,y)\,y.

A stationary point of such a system is a state (xˉ,yˉ)(\bar x, \bar y) at which both rate functions vanish,

f1(xˉ,yˉ)=0andf2(xˉ,yˉ)=0,f_1(\bar x, \bar y) = 0 \qquad \text{and} \qquad f_2(\bar x, \bar y) = 0,

equivalently x˙=y˙=0\dot x = \dot y = 0 at (xˉ,yˉ)(\bar x, \bar y). The name records what happens: the system started exactly at this state stays there for all time, because every variable has zero speed.

Why this isn’t the calculus stationary point

This is not the calculus stationary point, even though the name is identical. The confusion is fair — both conditions end with “something equals zero” — but the something is different.

In calculus, the thing set to zero is the derivative of a scalar field: f(a)=0\nabla f(\mathbf{a}) = \mathbf{0}. The field itself can take any value at that point — at a peak of height 55, the gradient vanishes while ff equals 55. “Stationary” there means the field is locally flat.

In an ODE system, the thing set to zero is the value of each rate function: f1(xˉ,yˉ)=f2(xˉ,yˉ)=0f_1(\bar x, \bar y) = f_2(\bar x, \bar y) = 0. The rate functions are not derivatives of anything; they are simply functions that say how the state changes. “Stationary” here means the state does not move. That x˙=y˙=0\dot x = \dot y = 0 follows is a consequence of the ODE x˙=f1\dot x = f_1, not the definition: when f1f_1 is zero, so is x˙\dot x.

A concrete contrast makes the gap visible. Take the function g(x)=x2+5g(x) = x^2 + 5.

  • As a scalar field, gg has a calculus stationary point at x=0x = 0, since g(0)=0g'(0) = 0, even though g(0)=5g(0) = 5 is positive.
  • As the rate function of an ODE x˙=g(x)\dot x = g(x), gg has no stationary point at all, since g(x)=x2+5g(x) = x^2 + 5 never equals zero.

Same function, different role, different verdict — because the two notions test different conditions on it.

The natural next question, once a system has a stationary point, is how it behaves nearby. Some stationary points pull nearby states toward themselves; others push them away; others have mixed character. This is the question of stability: a stationary point is stable when every state that starts close enough stays close for all later time, and unstable when at least one nearby start is carried far away. One escape route is enough — a saddle that draws states in along one direction but expels them along another still counts as unstable.

A finer distinction sits inside the stable case. A stable point that also pulls nearby states all the way in, so they converge onto it, is attractive; a stable point whose nearby states stay close without converging — circling it forever, say — is stable but not attractive. The classification below resolves this finer picture, and the verdict for each case is noted alongside it.

Linear stability analysis is the standard tool for telling these cases apart, and the verdict depends on a single piece of data: the eigenvalues of the system’s Jacobian evaluated at the stationary point.

This page is the lookup table. It applies to 2D ODE systems, and the six rows cover every generic behavior a stationary point can have. The same classification can be reached geometrically rather than algebraically, by sketching the system’s directional field and reading the behavior straight off the arrows — the two routes are complementary and land on the same verdict.

Setup

Fix a stationary point (xˉ,yˉ)(\bar x, \bar y) of the system. As tt runs forward, the state (x(t),y(t))(x(t), y(t)) traces a curve through the (x,y)(x, y)-plane — the system’s trajectory — and the question of stability concerns the trajectories that start near (xˉ,yˉ)(\bar x, \bar y).

The Jacobian of f=(f1,f2)\boldsymbol{f} = (f_1, f_2) at the stationary point is the 2×22 \times 2 matrix

J=(xf1yf1xf2yf2)(xˉ,yˉ).J = \begin{pmatrix} \partial_x f_1 & \partial_y f_1 \\ \partial_x f_2 & \partial_y f_2 \end{pmatrix}_{(\bar x, \bar y)}.

Its two eigenvalues λ1\lambda_1 and λ2\lambda_2 are the data linear stability analysis depends on. They are roots of JJ‘s characteristic polynomial, a quadratic, so they are either both real or a complex-conjugate pair.

The Jacobian of a linear function is just the matrix the function is built from — so for a linear ODE system x˙=Ax+b\dot{\mathbf x} = A\mathbf x + \mathbf b, the Jacobian is AA at every point of the state plane, regardless of which stationary point we evaluate at. The implication for stability analysis: the linearization is exact rather than a local approximation, and the eigenvalue classification below holds globally for every trajectory of the system, not just for ones started near a stationary point.

The classification below assumes both eigenvalues are nonzero. If one of them is zero, the determinant detJ\det J is zero too (a matrix’s determinant equals the product of its eigenvalues, so a single zero factor zeroes the whole product), and the Jacobian is non-invertible. In that case the stationary point is no longer a single point at all: a whole line of states satisfies x˙=y˙=0\dot x = \dot y = 0. This degenerate case falls outside the lookup.

Classification

The six cases split first by whether the eigenvalues are real or complex, then by sign (for real) or sign of real part (for complex).

Real eigenvalues

When both eigenvalues of JJ are real, nearby trajectories move without rotating around the stationary point. The signs of the two eigenvalues set the three cases below.

Attractive node

λ1,λ2<0\lambda_1, \lambda_2 < 0

Both eigenvalues are negative. Every nearby trajectory flows straight in to the stationary point — no rotation, no detours. The point is stable, and in the strongest way: nearby states are not just kept close, they are pulled all the way in (attractive).

Saddle node

λ1>0,λ2<0\lambda_1 > 0, \quad \lambda_2 < 0

One eigenvalue is negative, one positive. The two eigendirections of JJ (drawn dashed) split the picture: along the negative-eigenvalue direction trajectories rush straight in to the stationary point; along the positive-eigenvalue one they shoot straight out. Off these two lines, a typical trajectory follows a hyperbolic path — it slides in close to the stationary point along the negative-eigenvalue direction, then bends away along the positive-eigenvalue one. The point is unstable: the single outward direction is enough to carry some nearby states away, however strongly the other direction pulls in.

Repulsive node

λ1,λ2>0\lambda_1, \lambda_2 > 0

Both eigenvalues are positive. Every nearby trajectory flows straight out from the stationary point — mirror image of the attractive case. The point is unstable: every direction drives nearby states away.

Complex eigenvalues

The Jacobian itself has only real entries: it is built from partial derivatives of real-valued rate functions, so no complex numbers appear in JJ. Complex numbers enter only when we compute the eigenvalues, and when they do, they come as a complex-conjugate pair λ1,2=α±iβ\lambda_{1,2} = \alpha \pm i\beta, because a real-coefficient quadratic forces any non-real roots to be conjugates of each other. The radial picture from the real-eigenvalue cases still holds — the real part α\alpha pulls trajectories in if negative, pushes them out if positive, and does nothing if zero — but now the imaginary part β\beta wraps that radial motion around the stationary point as rotation. The three cases are the same three real cases plus rotation on top.

Attractive spiral node

Reλ1,2<0\operatorname{Re}\lambda_{1,2} < 0

Every nearby trajectory spirals in toward the stationary point — the same inward pull as the attractive node, with rotation added by the imaginary part. The point is stable and attractive: the spiral still ends at the center.

Neutral center

Reλ1,2=0\operatorname{Re}\lambda_{1,2} = 0

The real part is exactly zero, so there’s no pull or push along the radius — only rotation. Every nearby trajectory orbits the stationary point in a closed loop at a fixed distance, going around forever. The point is stable but not attractive — the orbits stay close and never escape, yet never settle onto the center either — which makes it the borderline between stable and unstable. (This row alone isn’t the final word: the nonlinear corrections the linear test ignores can quietly spiral the trajectories inward or outward — see “Why the classification works” below.)

Repulsive spiral node

Reλ1,2>0\operatorname{Re}\lambda_{1,2} > 0

Every nearby trajectory spirals outward from the stationary point — the same outward push as the repulsive node, with rotation added. The point is unstable: the spiral flings nearby states ever further out.

Why the classification works

The lookup table works because of one core fact: near a stationary point, every smooth nonlinear ODE system behaves like a linear one. And linear ODE systems are completely determined by their coefficient matrix’s eigenvalues. The classification table is just the result of working through both halves.

The linearization step first. Any smooth function, near a chosen base point, can be approximated by a linear function — the first-order Taylor expansion at that base point. The approximation is exact at the base point and gets better the closer the input stays. Apply this to each rate function of our system, expanded around the stationary point (xˉ,yˉ)(\bar x, \bar y):

f1(x,y)f1(xˉ,yˉ)+xf1(xˉ,yˉ)(xxˉ)+yf1(xˉ,yˉ)(yyˉ),f_1(x, y) \approx f_1(\bar x, \bar y) + \partial_x f_1(\bar x, \bar y)\,(x - \bar x) + \partial_y f_1(\bar x, \bar y)\,(y - \bar y),

and similarly for f2f_2. Because (xˉ,yˉ)(\bar x, \bar y) is a stationary point, both f1(xˉ,yˉ)=0f_1(\bar x, \bar y) = 0 and f2(xˉ,yˉ)=0f_2(\bar x, \bar y) = 0 — the constant terms drop out. The two Taylor expansions stacked into matrix form become

(x˙y˙)(xf1yf1xf2yf2)(xˉ,yˉ)(xxˉyyˉ).\begin{pmatrix} \dot x \\ \dot y \end{pmatrix} \approx \begin{pmatrix} \partial_x f_1 & \partial_y f_1 \\ \partial_x f_2 & \partial_y f_2 \end{pmatrix}_{(\bar x, \bar y)} \begin{pmatrix} x - \bar x \\ y - \bar y \end{pmatrix}.

The 2×22 \times 2 matrix of partial derivatives on the right is exactly the Jacobian JJ from the Setup, so the approximation collapses to

(x˙y˙)J(xxˉyyˉ).\begin{pmatrix} \dot x \\ \dot y \end{pmatrix} \approx J \begin{pmatrix} x - \bar x \\ y - \bar y \end{pmatrix}.

Near the stationary point, the original system behaves like this linear ODE system.

Now the eigenvalue step. The simplest linear ODE is the scalar one: u˙=λu\dot u = \lambda u, with one constant coefficient λ\lambda. Its solution is u(t)=u0eλtu(t) = u_0 e^{\lambda t} — the Malthus model. The sign of λ\lambda alone determines what happens: uu grows exponentially if λ>0\lambda > 0, decays if λ<0\lambda < 0, holds constant if λ=0\lambda = 0.

For the 2D linear approximation, the same exponential story plays out along each eigendirection of JJ separately. An eigendirection is a direction in which JJ acts purely by multiplication: a vector aligned with it just gets stretched (or shrunk, or flipped) by a single number, the eigenvalue. So along one eigendirection the linear system reduces to u˙=λu\dot u = \lambda u with λ\lambda the eigenvalue; the other eigendirection has its own scalar equation, independently. The full 2D motion is the two scalar motions happening at once.

Real eigenvalues give growth or decay along their eigendirection. A complex-conjugate pair gives rotation around the stationary point: the imaginary part sets the rotation speed, and the real part decides whether the rotation tightens into a spiral inward (real part <0< 0) or loosens outward (real part >0> 0). The six rows of the classification table fall out of these two cases combined.

Finally, the honest question: does the linear approximation actually predict what the nonlinear original does? The Hartman–Grobman theorem answers it — as long as every eigenvalue of JJ has nonzero real part, the nonlinear system near the stationary point qualitatively matches its linear approximation. So the lookup table accurately classifies the nonlinear behavior.

The exception is the neutral center row, where an eigenvalue’s real part is exactly zero. There the linear approximation predicts closed orbits, but the small nonlinear corrections the linearization threw away can pull the system gently inward, push it gently outward, or leave the orbits as they are. The classification table includes the row for completeness but cannot promise the nonlinear system matches.

Connection to the broad categories

The six rows collapse onto the three umbrella categories used in two-species population systems:

  • Attractive covers attractive node and attractive spiral node.
  • Repulsive covers repulsive node and repulsive spiral node. The neutral center sits on the boundary — trajectories neither leave nor settle.
  • Saddle is its own case, saddle node.

So when a population model classifies an equilibrium as attractive, the underlying picture is one of the two attractive cases above; the spiral-versus-monotone distinction is finer information the chapter doesn’t need.

Summary

The whole lookup table on one line per case — eigenvalues to classification to stability verdict:

EigenvaluesConditionClassificationStability
Realλ1,λ2<0\lambda_1, \lambda_2 < 0attractive nodestable (attractive)
Realλ1,λ2>0\lambda_1, \lambda_2 > 0repulsive nodeunstable
Realλ1>0, λ2<0\lambda_1 > 0,\ \lambda_2 < 0saddle nodeunstable
ComplexReλ1,2<0\operatorname{Re}\lambda_{1,2} < 0attractive spiral nodestable (attractive)
ComplexReλ1,2=0\operatorname{Re}\lambda_{1,2} = 0neutral centerstable, not attractive
ComplexReλ1,2>0\operatorname{Re}\lambda_{1,2} > 0repulsive spiral nodeunstable

The split runs straight down the Stability column: any eigenvalue with positive real part makes the point unstable, all-negative real parts make it stable and attractive, and the purely imaginary row is the lone borderline — stable but never settling.