Introduction

Stare at 3x+5(x1)(x+2)\dfrac{3x+5}{(x-1)(x+2)} and integrating it looks hopeless. But algebra has a trick: rewrite it as Ax1+Bx+2\dfrac{A}{x-1} + \dfrac{B}{x+2} for the right constants AA and BB, and each piece is something you already know how to integrate.

This is partial fraction decomposition: any ratio of polynomials, P(x)Q(x)\frac{P(x)}{Q(x)}, can be rewritten as a sum of simple fractions, one for each root of the denominator Q(x)Q(x). The hard fraction doesn't get simpler by accident — it gets unfolded into the pieces it was secretly built from.

It sounds like a homework trick, but it's the hinge that connects polynomial roots to integrals, inverse transforms, and the impulse response of physical systems.

Try It

Pick a denominator made of simple linear roots — something like (x1)(x+2)(x3)(x-1)(x+2)(x-3) — and a numerator degree lower than the denominator's. The demo finds the constant on top of each root's fraction and reconstructs the sum.

<p class="hint">{{hint_para}}</p>
<div class="controls">
  <label for="preset">{{preset_label}}</label>
  <select id="preset"></select>
  <button id="decompose" type="button">{{btn_decompose}}</button>
  <button id="reset" type="button" class="ghost">{{btn_reset}}</button>
</div>
<div class="frac-row">
  <div class="frac-block" id="original"></div>
</div>
<div class="arrow" id="arrow" hidden>&#8595;</div>
<div class="frac-row split" id="splitRow" hidden></div>
<div class="status" id="status">{{status_ready}}</div>
* { box-sizing: border-box; }
body { font-family: system-ui, sans-serif; color: #222; margin: 0; }
.hint { font-size: .9rem; color: #444; margin: 0 0 .7rem; line-height: 1.45; }
.controls { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; margin-bottom: .8rem; }
.controls label { font-size: .85rem; font-weight: 600; color: #1d3557; }
select { font: 600 14px system-ui, sans-serif; padding: .4rem .5rem; border-radius: 8px;
         border: 1px solid #cdd9e3; background: #fff; color: #1d3557; }
button { font: 600 14px system-ui, sans-serif; padding: .45rem .9rem; border: 1px solid #1d3557;
         background: #1d3557; color: #fff; border-radius: 8px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
.frac-row { display: flex; align-items: center; justify-content: center; flex-wrap: wrap;
            gap: .5rem; min-height: 3.4rem; margin: .3rem 0; }
.frac-row.split { gap: .8rem; }
.frac-block { display: flex; align-items: center; gap: .35rem; font: 600 1.15rem ui-monospace, monospace; }
.frac { display: inline-flex; flex-direction: column; align-items: center; padding: 0 .3rem; }
.frac .num { padding: 0 .25rem .1rem; border-bottom: 2px solid #1d3557; }
.frac .den { padding: .1rem .25rem 0; }
.term { display: flex; align-items: center; gap: .3rem; padding: .5rem .6rem; border-radius: 10px;
        background: #e8eef3; border: 1px solid #cdd9e3; opacity: 0; transform: translateY(6px);
        transition: opacity .35s ease, transform .35s ease; }
.term.show { opacity: 1; transform: translateY(0); }
.term .root-tag { font: 600 .75rem system-ui, sans-serif; color: #457b9d; margin-right: .3rem; }
.sign { font: 700 1.15rem ui-monospace, monospace; color: #1d3557; }
.arrow { text-align: center; font-size: 1.4rem; color: #457b9d; margin: .2rem 0; }
.status { font-size: 1rem; font-weight: 600; margin: .5rem 0; min-height: 1.4em; color: #0a7d33; }
.status.info { color: #444; font-weight: 500; font-size: .88rem; }
// Code not found

Behind the scenes it uses the cover-up method: to find the constant for root rr, cover the factor (xr)(x-r) in the denominator and evaluate everything else at x=rx=r. Do that once per root and the whole decomposition falls out — no system of equations required, as long as the roots are simple and real.

The Real Complexity

Decomposition itself is one of the tamest procedures in algebra — once you already know the roots.

  • Simple, distinct real roots. With nn roots the cover-up method costs O(n2)O(n^2) time: for each of the nn roots you evaluate an (n1)(n-1)-factor product. Solved, mechanical, no surprises.
  • Repeated roots. A root rr with multiplicity kk needs kk stacked terms, A1xr+A2(xr)2++Ak(xr)k\frac{A_1}{x-r} + \frac{A_2}{(x-r)^2} + \dots + \frac{A_k}{(x-r)^k}. The cover-up shortcut only hands you AkA_k directly; the rest come from a small linear system or repeated differentiation.
  • Complex conjugate roots. Instead of two complex fractions you keep one real quadratic term, Bx+Cx2+px+q\frac{Bx+C}{x^2+px+q}, so the whole decomposition stays real-valued — useful, since most applications want real coefficients.
  • The real bottleneck is upstream. Decomposition assumes the denominator is already factored. Finding those roots is where the real algebraic effort lives — see the tools of polynomial long division and resultants — so in practice the roots come from numerical methods, and decomposition is the easy, solved step that comes after.

So the technique that looks like the "hard part" of an integral is actually the friendly one; the genuine difficulty was quietly outsourced to root-finding before you ever wrote down a single Axr\frac{A}{x-r}.

Where It Matters

Once you can split a rational function, whole fields open up:

  • Symbolic integration: 1xrdx=lnxr+C\int \frac{1}{x-r}\,dx = \ln|x-r| + C is trivial, so decomposing first turns any rational integral into a sum of logs and arctangents — the same rational-function machinery that Risch's integration algorithm needs to decide whether an antiderivative exists in closed form.
  • Inverse Laplace and Z-transforms: control engineers decompose a transfer function's fraction to read off, term by term, the exact time-domain response of a system, plotting each pole (each root) as it moves in the root locus design method.
  • Difference equations and generating functions: expanding a generating function in partial fractions is the standard way to extract a closed formula for a recurrence.
  • Signal processing: filter design routinely factors a transfer function's denominator and reasons about each pole in isolation, exactly the decomposition at work.

Learn to decompose one fraction and you've picked up the algebraic move behind entire chapters of engineering and analysis.

Conclusion

Partial fraction decomposition takes something that looks like one intractable fraction and reveals it was always a sum of simple ones, one per root, hiding in plain sight. The method for simple real roots is fast and mechanical; repeated and complex roots just need a slightly larger toolbox.

The real difficulty in the whole story was never the decomposition — it was finding the roots in the first place, the same work that underlies polynomial long division. Once the roots are in hand, splitting the fraction is the easy, satisfying part that unlocks integrals, transforms, and closed formulas across mathematics and engineering.

Share this article

Pick a channel — or use your device's native share sheet.

Comments

Loading comments...

https://www.kipuhub.com/en/article/partial-fraction-decomposition/Content licensed under CC BY-NC 4.0.