This page is the "no surprises" drill for Null & Column space . Below is a map of every kind of matrix this topic can hand you. Then we work an example for each cell, so that when a strange one appears in an exam, you have already seen its twin.
Definition The two spaces, restated so this page stands alone
For a matrix A ∈ R m × n (a machine turning input x into output A x ):
Column space Col ( A ) = { A x : x ∈ R n } = the set of all reachable outputs = the span of the columns of A . It lives in the output space R m .
Null space Null ( A ) = { x : A x = 0 } = the set of all inputs crushed to zero . It lives in the input space R n .
"== double equals == " above is Obsidian highlight syntax — it just marks the key phrase; ignore the marks and read the words. We use it throughout to flag the one idea you must not miss in a line.
We classify a matrix A ∈ R m × n by two questions that decide everything about its two spaces:
Shape: is it tall (m > n , more equations than unknowns), square (m = n ), or wide (m < n , more unknowns than equations)?
Rank: does it have full column rank (r = n , every input column is a genuinely new direction), full row rank (r = m , every output direction is reachable), or is it rank-deficient (some columns are dependent)?
Definition The words we will use, defined once
(Reminder: the ==...== marks below are just Obsidian highlight — they visually flag the key phrase, nothing mathematical.)
m = number of rows = size of each output vector. Output space is R m .
n = number of columns = size of each input vector. Input space is R n .
r = rank ( A ) = number of pivots (leading 1's) after row reduction = number of genuinely independent columns.
A pivot column has a leading 1 in RREF; a free column does not — its variable is free to roam.
Nullity = n − r = number of free variables = dim Null ( A ) .
Here is the full grid. Each cell names an example below that hits it.
Shape \ Rank
Full column rank r = n
Rank-deficient r < min ( m , n )
Full row rank r = m
Tall m > n
Ex 1 (injective, trivial kernel)
Ex 2 (dependent columns)
— impossible if m > n *
Square m = n
Ex 3 (invertible)
Ex 4 (singular)
(same as full col rank)
Wide m < n
— impossible if m < n *
Ex 5 (deficient wide)
Ex 6 (surjective, fat kernel)
The decision flow-chart below is the same taxonomy drawn as a visual: start at the shape, split on the rank, and land on the pair ( dim Col , dim Null ) . Trace your matrix down it before computing — the leaf you reach is your forecast.
Plus three edge/extra cases every syllabus loves:
Extra case
Example
Zero matrix (degenerate, everything crushed)
Ex 7
Word problem (real-world reachability)
Ex 8
Exam twist (a parameter t that changes the rank)
Ex 9
Intuition Why two of the cells are marked impossible*
The rank can never exceed the smaller of m and n : you cannot have more independent columns than there are rows to hold them, nor more than there are columns to begin with. So r ≤ min ( m , n ) . A tall matrix (m > n ) can never have r = m ; a wide matrix (m < n ) can never have r = n . That is a genuine theorem, not a gap in our examples.
Intuition The two subspaces as pictures, before any algebra
Every example below produces two geometric objects: Col ( A ) is a flat sheet (point, line, plane...) sitting in the output space R m , and Null ( A ) is another flat sheet sitting in the input space R n . The next figure shows the two flavours you will meet most: a column space that is a plane in R 3 (left) and a null space that is a line in R 3 (right). Keep this picture in your head — the numbers dim Col and dim Null are just "how many dimensions does each sheet have."
A = 1 1 0 0 1 1 ( m = 3 , n = 2 ) .
Find bases and dimensions of Col ( A ) and Null ( A ) .
Forecast: More rows than columns. Guess: how many free variables can there possibly be, and what does that force the null space to be?
Step 1 — Row reduce. R 2 → R 2 − R 1 , then R 3 → R 3 − R 2 :
1 0 0 0 1 1 → 1 0 0 0 1 0 = R .
Why this step? RREF exposes which columns hold pivots; that is the only reliable independence test.
Step 2 — Read pivots. Columns 1 and 2 are pivot columns, so r = 2 . There are no free columns .
Why this step? Free columns are the source of null-space freedom; if there are none, the kernel is forced to be a single point.
Step 3 — Column space. Take the pivot columns from the original A : {( 1 , 1 , 0 ) ⊤ , ( 0 , 1 , 1 ) ⊤ } , so dim Col ( A ) = 2 . This is a 2-D plane tilted inside R 3 .
Why this step? Row operations move column entries; only the original columns point in the true output directions. See Row reduction & RREF .
Step 4 — Null space. No free variables ⇒ the only solution of A x = 0 is x = 0 . So Null ( A ) = { 0 } , dim = 0 . The map is injective .
Why this step? With every variable pinned by a pivot, there is nothing left to vary; the kernel cannot contain any direction other than the origin, which is exactly what "injective" (no two inputs share an output) means.
Verify: r + nullity = 2 + 0 = 2 = n . ✓ And A ( 0 , 0 ) ⊤ = ( 0 , 0 , 0 ) ⊤ is the only crush. Since r = 2 < 3 = m , the map is not surjective — it misses most of R 3 .
The figure below draws this case: the two accent-red original columns and the plane they sweep out inside R 3 . Notice the single black dot at the origin — that lone point is the whole null space, the geometric meaning of "trivial kernel."
A = 1 2 3 2 4 6 ( m = 3 , n = 2 ) .
Forecast: Look at the two columns before touching anything. Do you already see a dependence?
Step 1 — Spot the dependence. Column 2 = 2 × column 1. So the columns are not independent.
Why this step? The 80/20 trick: an obvious multiple relation tells you the rank instantly and saves full reduction.
Step 2 — Row reduce to confirm. R 2 → R 2 − 2 R 1 , R 3 → R 3 − 3 R 1 :
1 0 0 2 0 0 = R .
One pivot ⇒ r = 1 .
Why this step? Subtracting multiples of row 1 zeroes out the lower rows exactly because they were multiples of it — the collapse to a single nonzero row is the visible proof that only one pivot survives.
Step 3 — Column space. Pivot in column 1 only ⇒ Col ( A ) = span {( 1 , 2 , 3 ) ⊤ } , a single line in R 3 . dim = 1 .
Why this step? Column 2 adds nothing new — it lies on the same line.
Step 4 — Null space. Free variable x 2 . Row 1 gives x 1 + 2 x 2 = 0 ⇒ x 1 = − 2 x 2 . Set x 2 = 1 : special solution ( − 2 , 1 ) ⊤ . So Null ( A ) = span {( − 2 , 1 ) ⊤ } , dim = 1 .
Why this step? Setting the single free variable to 1 generates the one direction the kernel is free to move in; every null vector is a multiple of it.
Verify: r + nullity = 1 + 1 = 2 = n . ✓ Plug back: A ( − 2 , 1 ) ⊤ = − 2 ( 1 , 2 , 3 ) ⊤ + ( 2 , 4 , 6 ) ⊤ = ( 0 , 0 , 0 ) ⊤ . ✓
A = [ 2 1 1 1 ] ( m = n = 2 ) .
Forecast: A square matrix with independent columns — what are the two dimensions before you compute?
Step 1 — Make the top-left pivot 1. R 1 → R 1 − R 2 :
[ 2 1 1 1 ] → [ 1 1 0 1 ] .
Why this step? Subtracting row 2 from row 1 turns the leading entry into a clean 1 and simultaneously clears the ( 1 , 2 ) entry — one move sets up the pivot in column 1.
Step 2 — Clear below the first pivot. R 2 → R 2 − R 1 :
[ 1 1 0 1 ] → [ 1 0 0 1 ] = R .
Two pivots ⇒ r = 2 .
Why this step? Subtracting the new row 1 from row 2 zeroes the entry beneath the first pivot; the leftover second row already carries the second pivot, so we land exactly on the identity. Reaching the identity in RREF is the signature of an invertible square matrix.
Step 3 — Column space. Both columns are pivots ⇒ Col ( A ) = R 2 , dim = 2 . Every output is reachable ⇒ surjective.
Why this step? Two independent pivot columns span the whole 2-D output space, so nothing in R 2 is out of reach.
Step 4 — Null space. No free variables ⇒ Null ( A ) = { 0 } , dim = 0 ⇒ injective.
Why this step? Every variable is a pivot variable, so A x = 0 pins all of them to 0 — the kernel is a single point.
Verify: r + nullity = 2 + 0 = 2 = n . ✓ Determinant = 2 ⋅ 1 − 1 ⋅ 1 = 1 = 0 confirms invertibility, which forces a trivial kernel and full column space.
A = 1 2 1 2 4 1 3 6 1 ( m = n = 3 ) .
Forecast: Row 2 is a multiple of Row 1. Will that cost you a pivot? Predict the nullity.
Step 1 — Row reduce. R 2 → R 2 − 2 R 1 (kills row 2), R 3 → R 3 − R 1 :
1 0 0 2 0 − 1 3 0 − 2 swap R 2 , R 3 1 0 0 2 − 1 0 3 − 2 0 .
Normalize row 2 (× − 1 ) and clear above: R 1 → R 1 − 2 R 2 :
1 0 0 0 1 0 − 1 2 0 = R .
Pivots in columns 1,2 ⇒ r = 2 .
Why this step? Subtracting 2 R 1 zeroes row 2 because it was 2 × row 1; the swap then moves the surviving nonzero row up so the pivots line up on the diagonal — the standard tidy-up that makes the free-variable formulas readable.
Step 2 — Column space. Pivot columns from original A : {( 1 , 2 , 1 ) ⊤ , ( 2 , 4 , 1 ) ⊤ } , dim = 2 . A plane in R 3 .
Why this step? Column 3 is free, so it depends on the first two — it adds no new output direction.
Step 3 — Null space. Free variable x 3 . From R : x 1 = x 3 , x 2 = − 2 x 3 . Set x 3 = 1 : ( 1 , − 2 , 1 ) ⊤ . dim Null = 1 .
Why this step? The lone free variable is the single dial the kernel can turn; setting it to 1 reads off the one basis direction.
Verify: r + nullity = 2 + 1 = 3 = n . ✓ A ( 1 , − 2 , 1 ) ⊤ = ( 1 − 4 + 3 , 2 − 8 + 6 , 1 − 2 + 1 ) ⊤ = ( 0 , 0 , 0 ) ⊤ . ✓ Determinant is 0 (singular), consistent with a nontrivial kernel.
A = [ 1 2 2 4 1 1 3 5 ] ( m = 2 , n = 4 ) .
Forecast: Wide matrix, so n − r is at least n − m = 2 . Could it be even bigger? Guess the nullity.
Step 1 — Row reduce. R 2 → R 2 − 2 R 1 :
[ 1 0 2 0 1 − 1 3 − 1 ] .
Clear above pivot in column 3: R 1 → R 1 + R 2 , then R 2 → − R 2 :
[ 1 0 2 0 0 1 2 1 ] = R .
Pivots in columns 1,3 ⇒ r = 2 .
Why this step? Subtracting 2 R 1 from R 2 cancels the first entry so the next pivot appears in column 3 (column 2 got zeroed, making it free); adding R 2 back into R 1 then clears the entry above that pivot so each pivot column is a clean unit column — exactly what lets us read x 1 , x 3 in terms of the free variables.
Step 2 — Column space. Original columns 1,3: {( 1 , 2 ) ⊤ , ( 1 , 1 ) ⊤ } . These are independent ⇒ Col ( A ) = R 2 , dim = 2 . Surjective onto the small output space.
Why this step? Two independent columns already fill the 2-D output space, so every target in R 2 is reachable.
Step 3 — Null space. Free variables x 2 , x 4 . From R : x 1 = − 2 x 2 − 2 x 4 , x 3 = − x 4 .
x 2 = 1 , x 4 = 0 : s 1 = ( − 2 , 1 , 0 , 0 ) ⊤ .
x 2 = 0 , x 4 = 1 : s 2 = ( − 2 , 0 , − 1 , 1 ) ⊤ .
dim Null = 2 .
Why this step? Two free variables mean two independent dials; turning each one alone (others 0 ) produces the two basis null vectors.
Verify: r + nullity = 2 + 2 = 4 = n . ✓ Check s 2 : A s 2 = − 2 ( 1 , 2 ) ⊤ + 0 + ( − 1 ) ( 1 , 1 ) ⊤ + ( 3 , 5 ) ⊤ = ( − 2 − 1 + 3 , − 4 − 1 + 5 ) ⊤ = ( 0 , 0 ) ⊤ . ✓
A = [ 1 0 0 1 2 3 ] ( m = 2 , n = 3 ) .
Forecast: Already almost in RREF. This is the cleanest wide case: predict both spaces at a glance.
Step 1 — Read pivots. Already RREF: pivots in columns 1,2 ⇒ r = 2 = m . Full row rank.
Why this step? No row operation is needed — the leading 1's already sit alone in their columns, so we can read pivots directly.
Step 2 — Column space. Pivot columns ( 1 , 0 ) ⊤ , ( 0 , 1 ) ⊤ span all of R 2 ⇒ Col ( A ) = R 2 , dim = 2 . Every output reachable ⇒ surjective.
Why this step? r = m is exactly the condition for surjectivity — see Injective and surjective linear maps .
Step 3 — Null space. Free variable x 3 . x 1 = − 2 x 3 , x 2 = − 3 x 3 . Set x 3 = 1 : ( − 2 , − 3 , 1 ) ⊤ . dim Null = 1 .
Why this step? The single free variable furnishes the one direction of the kernel; every crushed input is a multiple of it.
Verify: r + nullity = 2 + 1 = 3 = n . ✓ A ( − 2 , − 3 , 1 ) ⊤ = ( − 2 + 2 , − 3 + 3 ) ⊤ = ( 0 , 0 ) ⊤ . ✓
The figure below shows this null space: a single accent-red line through the origin in R 3 in the direction ( − 2 , − 3 , 1 ) . Every point on that line is fed into A and comes out as the zero vector — the whole line is "wasted input."
A = [ 0 0 0 0 ] ( m = n = 2 ) .
Forecast: The machine outputs zero no matter what you feed it. What is Col, what is Null?
Step 1 — Rank. No pivots ⇒ r = 0 .
Why this step? Every column is zero, hence dependent; there is no leading 1 anywhere.
Step 2 — Column space. Span of zero columns is just { 0 } ⇒ dim Col = 0 . The only reachable output is 0 .
Why this step? Nothing but the zero vector can be built from all-zero columns.
Step 3 — Null space. Every x satisfies A x = 0 ⇒ Null ( A ) = R 2 , dim = 2 . Both ( 1 , 0 ) , ( 0 , 1 ) are a basis.
Why this step? With no pivots, both variables are free, so the kernel fills the whole input space.
Verify: r + nullity = 0 + 2 = 2 = n . ✓ This is the extreme end of the matrix: nothing reachable, everything crushed.
A juice bar makes two drinks. Each Green uses 2 apples and 1 kale; each Gold uses 4 apples and 2 kale. If you make g Greens and d Golds, the total (apples, kale) used is
A [ g d ] , A = [ 2 1 4 2 ] .
(a) Which (apples, kale) totals are achievable? (b) Which recipes waste nothing versus another — i.e. give the same total?
Forecast: Gold uses exactly twice everything of Green. Do you expect the achievable totals to fill the whole plane, or a line?
Step 1 — Rank. Column 2 = 2 × column 1 ⇒ r = 1 .
Why this step? Dependent columns mean the two drinks pull in the same direction in resource space.
Step 2 — (a) Column space. Col ( A ) = span {( 2 , 1 ) ⊤ } : a line. Only totals in a 2 : 1 apple-to-kale ratio are achievable. You can never produce a total of ( 3 , 3 ) — it is not in Col ( A ) . (Solvable iff b ∈ Col ( A ) ; see Solving Ax=b .)
Why this step? The achievable set is by definition the span of the columns; with rank 1 that span is a single line, so any target off the line is impossible no matter how many drinks you make.
Step 3 — (b) Null space. Solve 2 g + 4 d = 0 ⇒ g = − 2 d . Special solution ( − 2 , 1 ) ⊤ .
Interpreted: swapping "− 2 Greens for + 1 Gold" changes nothing in resource total — one Gold uses the resources of two Greens. That direction is the null space.
Why this step? The null space is exactly the set of recipe changes that leave the resource total fixed; solving A x = 0 finds them, and the free variable d gives the one trade direction.
Verify: r + nullity = 1 + 1 = 2 = n . ✓ A ( − 2 , 1 ) ⊤ = ( − 4 + 4 , − 2 + 2 ) ⊤ = ( 0 , 0 ) ⊤ : the resource-neutral trade. ✓
The figure below draws the resource plane: the accent-red line of achievable totals (all in 2 : 1 ratio) and the black dot at ( 3 , 3 ) sitting off that line — the geometric reason ( 3 , 3 ) can never be produced.
A ( t ) = [ 1 2 2 t ] ( m = n = 2 ) .
For which value of t does the null space become nontrivial? Give bases in both regimes.
Forecast: For most t the columns are independent. There is exactly one "bad" t where the second row collapses. Guess it.
Step 1 — Row reduce with a parameter. R 2 → R 2 − 2 R 1 :
[ 1 0 2 t − 4 ] .
Why this step? The pivot in row 2 exists only if the entry t − 4 is nonzero. Parameters live or die on such entries, so isolating t − 4 tells us the whole story.
Step 2 — Case t = 4 . Then t − 4 = 0 ⇒ two pivots ⇒ r = 2 . Col = R 2 , Null = { 0 } , nullity 0 . Invertible.
Why this step? A nonzero ( 2 , 2 ) entry becomes the second pivot, so no variable is free and the map is injective and surjective at once.
Step 3 — Case t = 4 . Then row 2 becomes all zeros ⇒ r = 1 . Column space = span {( 1 , 2 ) ⊤ } . Free variable x 2 : x 1 + 2 x 2 = 0 ⇒ x 1 = − 2 x 2 . Special solution ( − 2 , 1 ) ⊤ . Nullity = 1 .
Why this step? At the critical t the second row vanishes, dropping the rank; the now-free variable x 2 opens up a one-dimensional kernel.
Verify: At t = 4 , det A = 1 ⋅ 4 − 2 ⋅ 2 = 0 (singular) ⇒ nontrivial kernel, consistent. A ( 4 ) ( − 2 , 1 ) ⊤ = ( − 2 + 2 , − 4 + 4 ) ⊤ = ( 0 , 0 ) ⊤ . ✓ At, say, t = 5 : det = 5 − 4 = 1 = 0 , kernel trivial. ✓
Recall Which scenario forces which space?
Full column rank (r = n ) ::: trivial null space, map injective.
Full row rank (r = m ) ::: column space is all of R m , map surjective.
Wide matrix (m < n ) ::: nullity ≥ n − m > 0 , so there is ALWAYS a nonzero null vector.
Zero matrix ::: rank 0 , null space is the whole input space.
Parameter that kills a pivot ::: rank drops, nullity rises, determinant hits 0 (if square).
Mnemonic The one identity behind every cell
Rank Plus Null equals n . Whatever the shape or sign, r + ( n − r ) = n closes every example. See Rank–Nullity Theorem .
Rank of a matrix — the r counted in every example.
Rank–Nullity Theorem — the check line of every worked case.
Row reduction & RREF — the engine that found the pivots.
Linear independence and basis — why pivot columns are a basis.
Injective and surjective linear maps — Ex 1/3 (injective), Ex 3/6 (surjective).
Four fundamental subspaces — Col and Null are two of the four.
Solving Ax=b — Ex 8's reachability question.