From a free system to a pushed one
Everything so far in this rung has been about the homogeneous system x' = A x — a system evolving entirely under its own internal rule, nobody pushing from outside. You learned that its complete solution is x(t) = e^(At) x(0): the matrix exponential takes the starting state and carries it forward, and that is the whole story. But real machines get poked. A circuit has a voltage source plugged in, a spring has a hand shaking it, a population has immigrants arriving. That outside push turns the equation into x' = A x + g(t), a nonhomogeneous system, and the clean formula no longer fits.
Here g(t) is the forcing — a known vector function of time, the input you feed in. The question of this guide is exactly: given the same matrix A but now with an outside input g(t), what is x(t)? You already know half the answer. From earlier work on a single equation you met variation of parameters, the idea of letting the constants in the homogeneous solution drift with time to absorb the forcing. We are going to do precisely that, but for a whole system at once — and the result will be one of the most quoted formulas in all of differential equations.
Let the constants vary — but for a vector
Recall the homogeneous answer x(t) = e^(At) c, where c is the constant vector of starting data. Variation of parameters is a single audacious move: replace the constant c by an unknown function u(t), and hope x(t) = e^(At) u(t) can be made to solve the forced equation. We are no longer assuming the state just rides the free flow; we let the 'starting data' u(t) be retuned at every instant so the extra motion exactly matches the push. The whole method is the disciplined working-out of that one substitution.
Differentiate x = e^(At) u(t) with the product rule. The derivative of e^(At) is A e^(At) — that is the defining property of the matrix exponential — so x' = A e^(At) u + e^(At) u'. The first term is just A x. Plug into x' = A x + g(t): the A x parts cancel on both sides, leaving e^(At) u' = g(t). That cancellation is the magic of the method — choosing the homogeneous flow as our carrier makes the hardest part of the equation vanish, and all that survives is a relation for u'.
Now solve for u'. The matrix exponential is always invertible — its inverse is e^(-At), running the same flow backward — so u'(t) = e^(-At) g(t). There is no algebraic struggle here, no matrix to laboriously invert by hand: the inverse of e^(At) is free. Integrate both sides from 0 to t, add the constant of integration to honour the starting state, and the unknown u(t) is fully pinned down. The last move is to put it back into x = e^(At) u(t).
The formula, and the picture inside it
Assemble the pieces. With x(0) given, u(t) = x(0) + integral from 0 to t of e^(-As) g(s) ds, and multiplying through by e^(At) gives the headline result, the matrix convolution formula: x(t) = e^(At) x(0) + integral from 0 to t of e^(A(t - s)) g(s) ds. Stare at the structure. The first term, e^(At) x(0), is exactly the free homogeneous solution — what the system would do if nobody pushed. The integral is everything the forcing contributes. The full answer is free response plus forced response, the system's own tendency plus the world's interference, cleanly added.
The integrand carries a vivid physical story. At an earlier instant s, the forcing delivers a small kick g(s) ds into the state. From that moment until now, t - s seconds elapse, and the system's own dynamics carry that injected piece forward — by exactly the flow over that elapsed time, e^(A(t - s)). The integral then SUMS the carried-forward remnants of every kick between time 0 and now. The present state is a weighted memory of the entire forcing history, each past push aged by how long ago it landed. This summing-over-history shape is a Duhamel principle, and it recurs across all of linear dynamics.
free part forced part (a convolution of the flow with the input)
| |
v v
x(t) = e^(At) x(0) + integral_0^t e^(A(t - s)) g(s) ds
\_________/ \___/
carry the the kick
kick from delivered
s up to t at time s
e^(A(t - s)) is the state-transition matrix Phi(t, s):
it moves a state from time s to time t along the free flow.The carrier factor e^(A(t - s)) has its own name and life: it is the state-transition matrix Phi(t, s), the operator that ferries a state from time s to time t along the free dynamics. Because our system is time-invariant — A does not depend on t — the transition depends only on the elapsed gap t - s, which is why the integrand can be written as a true flow over that single duration. For systems where A(t) varies in time the same skeleton survives, but Phi(t, s) is no longer a simple exponential and must be built more carefully.
Walking the recipe through
In practice you never re-derive the substitution; you apply the variation-of-parameters formula directly. The only genuine work is computing e^(At) for your particular A — which is exactly the skill the previous guide built, by diagonalisation, by the Putzer or Cayley-Hamilton route, or by Laplace transform. Once e^(At) is in hand, the rest is one matrix-times-vector product inside an integral. Here is the whole procedure laid out.
- Write the system in the form x' = A x + g(t); identify the constant matrix A and the forcing vector g(t).
- Compute the matrix exponential e^(At) — by diagonalisation, Putzer, Cayley-Hamilton, or Laplace, whichever is easiest for this A.
- Form e^(A(t - s)) g(s) — the kick at time s carried forward by the flow over the gap t - s.
- Integrate that vector from 0 to t to get the forced response; the convolution does the summing over history.
- Add the free term e^(At) x(0) to satisfy the initial state, and the initial value problem is fully solved.
A quick reality check on the two ends. At t = 0 the integral runs over an empty interval and contributes nothing, so x(0) = e^(A0) x(0) = I x(0) = x(0) — the formula honours the starting condition automatically, with no extra constant to fit. And if the forcing is switched off, g = 0 makes the integral vanish and you fall straight back to the pure homogeneous flow e^(At) x(0). The forced formula contains the free one as the special case where the world stops pushing.
Honest caveats and what it buys you
Be clear about the boundaries of this beautiful result. It is a theorem about linear systems only. The cancellation that made the method work — the A x terms killing each other — depends utterly on superposition, and there is no matrix-exponential analogue for a nonlinear x' = f(x, t). Most equations in the wild are nonlinear, so this formula is a sharp tool for a special, important class, not a master key for everything; for the rest you fall back on numerical and qualitative methods.
A second, gentler caveat: 'closed form' is partly an illusion. The formula is exact, but to get an explicit answer you must actually DO the integral of e^(A(t - s)) g(s), and for a messy g(t) that integral may have no elementary antiderivative. The convolution form is still priceless — it tells you the structure, lets you reason about stability and steady state, and is trivial to hand to a computer for numerical evaluation even when the symbols refuse to simplify. Exactness of form does not guarantee a clean symbolic value.
What it does buy you is enormous. The convolution structure is the bridge from differential equations to engineering: take g(t) to be a unit impulse and the integral collapses to e^(At) itself, revealing the matrix exponential as the system's impulse response — its reaction to a single instantaneous kick, from which the response to ANY input follows by convolution. That is the same Duhamel idea you met with the Laplace transform, now standing on its own without leaving the time domain. In the next and final guide of this rung we step back and see why e^(At) — defining the free flow, generating the forced response, and serving as the impulse response all at once — really is the whole story of a linear system.