Visual walkthrough — Singular Value Decomposition (SVD) — full derivation
We build everything from the ground up. If you have never seen a matrix "act" on space, start at Step 0 and do not skip.
Step 0 — What does "a matrix acts on space" even mean?
WHAT. A matrix is a machine. You feed it an arrow (a vector ), it spits out another arrow . Feeding it every arrow at once, we see what it does to a whole shape.
WHY start here. Every claim in SVD is a claim about this machine's shape-changing behaviour. We must be able to picture the input shape and the output shape before any symbol appears.
PICTURE. Take the unit circle — all arrows of length , pointing every direction. Watch what does to it.

The big question the whole derivation answers:
Step 1 — The two frames we are hunting for
WHAT. We want two special sets of perpendicular arrows:
- in the input circle — the arrows that will land exactly on the ellipse's axes.
- in the output — unit arrows pointing along those axes.
- — how long each axis is (the stretch amounts).
WHY. If we find these, then the machine is completely described by the sentence " sends to a -times-longer arrow in direction ." Everything else is bookkeeping.
PICTURE. Same circle-to-ellipse, now with the special arrows drawn in.

The target relationship, term by term:
Read it aloud: " acting on equals lots of ." Our job for the rest of the page: prove such always exist and find them.
Step 2 — We cannot attack directly, so we build
WHAT. can be rectangular, tilted, without perpendicular eigen-arrows — hard to grip. So we form a friendlier matrix: . Here (read " transpose") is flipped across its diagonal.
WHY this tool and not another. We need a matrix with guaranteed perpendicular special directions. A matrix has a full set of perpendicular eigen-arrows exactly when it is symmetric (that is the Spectral Theorem). And is always symmetric — proof in the picture. That is the whole reason we detour through it.
PICTURE. Why is symmetric? Flipping it does nothing.

Term by term: flips the order; undoes a flip. The result equals what we started with — that is the definition of symmetric.
Step 3 — The eigen-arrows of become our
WHAT. Solve the eigen-problem for : find perpendicular unit arrows and numbers with Then define .
WHY. An eigenvector is an arrow the matrix does not rotate — it only scales it by (see Eigenvalues and Eigenvectors). These un-rotated, mutually perpendicular arrows are exactly the special input directions we hunted in Step 1. The symbol (the Kronecker delta) is just shorthand: when , otherwise — it says "perpendicular unit arrows".
PICTURE. leaves each pointing the same way, only scaled.

Order the arrows so . Here is the rank: the count of non-zero stretches. Stacking the arrows side by side gives the matrix , which is orthogonal () because its columns are perpendicular unit arrows.
Step 4 — Push each through to get
WHAT. For each with , define
WHY divide by ? points the right way (along an ellipse axis) but has the wrong length. How long is it? Compute: Term by term: regroup the arrows; substitute the eigen-equation from Step 3; use . So . Dividing by rescales it to length — now it is a legit unit direction . This is also where pays off: , one clean stretch.
PICTURE. Watch get sent to (length ), then shrunk to the unit arrow .

Are the perpendicular to each other? Yes — check for : The last equality holds because (Step 3's perpendicularity). So are perpendicular unit arrows.
Step 5 — Complete the output basis (the leftover directions)
WHAT. We have (one per non-zero ). If the output space is bigger than , we still need to fill it. We invent them using the Gram-Schmidt Process: pick any arrows filling the gaps, then straighten them to be perpendicular unit arrows.
WHY. must be a full orthogonal matrix (a complete frame), even if only reaches an -dimensional slice of the output. The extra 's point into directions never lands on — the left null space.
PICTURE. Two reached axes plus one unreached direction completing 3D space.

Stacking all of them gives , orthogonal by construction. Together with Step 3's , these are the four bases of the Four Fundamental Subspaces.
Step 6 — Assemble
WHAT. Collect the single fact (true for every : when both sides are the zero arrow) into one matrix equation.
WHY. Doing the same thing to every column at once is matrix multiplication. Stacking as columns: Here is the box with the on its diagonal (same shape as — it is not square in general), so that places in front of .
Right-multiply both sides by . Since is orthogonal, (rotating then un-rotating changes nothing):
PICTURE. The famous three-move factory: input frame → turn () → stretch () → turn () → output.

Read the moves right to left (the order they hit an input in ):
- : rotate the input so the special arrows align with the coordinate axes.
- : stretch axis by (and squash to any axis with ).
- : rotate the stretched result into its final resting frame.
Step 7 — The degenerate cases (nothing is left to chance)
WHAT & WHY. SVD claims to work for every matrix. So we must survive the ugly inputs. Each gets a panel below.

The one-picture summary

Everything on this page in a single diagram: perpendicular input frame → each stretched by → landing on the perpendicular output frame , tracing the ellipse. The two frames plus the stretch numbers are the SVD.
Recall Feynman retelling — say it in plain words
A matrix is a machine that turns the unit circle into an ellipse. An ellipse has a long axis and a short axis — the only special directions in sight. I want to know which input arrows fed those axes and by how much they grew. The raw matrix is too messy to ask directly, so I build , which is guaranteed to have a perpendicular set of un-rotated arrows (that is what symmetry buys me). Their scaling numbers are ; I take square roots to get the true stretches . Pushing each through and rescaling to length one gives the output axes — and because I define them this way, their signs and pairing come out right automatically. I pad out any missing output directions with Gram–Schmidt. Assembling the single fact " sends to " column by column, and undoing one rotation, gives : turn, stretch, turn. Zero stretches just mean some input arrows got crushed to a point — that is the null space, and the theorem swallows it without complaint.
Recall
Why detour through instead of ? ::: Because is always symmetric and PSD, so the Spectral Theorem guarantees perpendicular eigen-arrows and non-negative eigenvalues — itself offers no such guarantee. What single fact, stacked as columns, gives the whole SVD? ::: for all , which stacks to , hence . What geometric object is the unit circle mapped to, and what are its axes? ::: An ellipse; its semi-axis lengths are the singular values and its axis directions are the left singular vectors .