Recipe
Find the null space of a matrix
Use when: you're given a matrix A and asked for \operatorname{Nul}(A) — every \mathbf x with A\mathbf x = \mathbf 0 — rather than a single yes/no membership check
Goal: a spanning set for \operatorname{Nul}(A): one fixed vector per free variable, so every solution of A\mathbf x=\mathbf 0 is some combination of them
Taught in The null space · a later section extends this recipe with more cases
Quick recipe
-
1
Because the right-hand side of A\mathbf x=\mathbf 0 is zero in every equation, it stays zero through every row operation — there's no augmented column to track, and no consistency check to worry about. Row-reduce A itself.
Example
For A = \begin{pmatrix}1 & 2 & -1 & 3\\ 2 & 4 & 1 & 0\end{pmatrix}, replace row 2 with row 2 minus 2\times row 1: \begin{pmatrix}1 & 2 & -1 & 3\\ 2 & 4 & 1 & 0\end{pmatrix} \to \begin{pmatrix}1 & 2 & -1 & 3\\ 0 & 0 & 3 & -6\end{pmatrix} (2-2(1)=0, 4-2(2)=0, 1-2(-1)=3, 0-2(3)=-6.) Divide row 2 by 3, then clear column 3 out of row 1 by adding the new row 2 to it: \to \begin{pmatrix}1 & 2 & -1 & 3\\ 0 & 0 & 1 & -2\end{pmatrix} \to \begin{pmatrix}1 & 2 & 0 & 1\\ 0 & 0 & 1 & -2\end{pmatrix}
Why: solving A\mathbf x=\mathbf 0 is exactly what row reduction does for any linear system — the zero right-hand side just makes the bookkeeping simpler than the general case.
-
2
Read the RREF's pivot columns: every column WITHOUT a pivot names a free variable. Every column WITH a pivot names a variable that will be solved for in terms of the free ones.
Example
The RREF above, \begin{pmatrix}1 & 2 & 0 & 1\\ 0 & 0 & 1 & -2\end{pmatrix}, has pivots in columns 1 and 3 (so x_1, x_3 are pivot variables), and no pivot in columns 2 or 4 (so x_2, x_4 are free).
- every column has a pivot (no free variables) — stop; \operatorname{Nul}(A) = \{\mathbf 0\} only, and there's no spanning set to build.
- at least one column has no pivot — continue to Step 3 with those free variables.
Why: a free variable is one the system never pins down — it's free to take any value, and each one contributes an independent "drift direction" to the null space.
-
3
Read each RREF row as an equation and isolate its pivot variable on the left, moving every free-variable term to the right.
Example
Row 1, x_1 + 2x_2 + x_4 = 0, gives x_1 = -2x_2 - x_4. Row 2, x_3 - 2x_4 = 0, gives x_3 = 2x_4.
Why: RREF is precisely the form where each pivot row involves exactly one pivot variable, so isolating it is a one-line rearrangement, no further elimination needed.
-
4
Substitute the pivot variables' formulas into \mathbf x, then group all the terms multiplying each free variable into its own vector. One vector per free variable, and that set of vectors spans \operatorname{Nul}(A).
Example
\mathbf x = \begin{pmatrix}x_1\\x_2\\x_3\\x_4\end{pmatrix} = \begin{pmatrix}-2x_2-x_4\\x_2\\2x_4\\x_4\end{pmatrix} = x_2\begin{pmatrix}-2\\1\\0\\0\end{pmatrix} + x_4\begin{pmatrix}-1\\0\\2\\1\end{pmatrix}\boxed{\operatorname{Nul}(A) = \operatorname{span}\left\{\begin{pmatrix}-2\\1\\0\\0\end{pmatrix},\ \begin{pmatrix}-1\\0\\2\\1\end{pmatrix}\right\}}Why: every solution is built from the free variables alone (the pivot variables are never independent of them), so factoring the free variables out of \mathbf x produces exactly the vectors that generate every possible solution.
-
5
Plug each vector back into A\mathbf x by hand and confirm you get \mathbf 0 — don't just trust the row reduction.
Example
A\begin{pmatrix}-2\\1\\0\\0\end{pmatrix} = \begin{pmatrix}1(-2)+2(1)-1(0)+3(0)\\ 2(-2)+4(1)+1(0)+0(0)\end{pmatrix} = \begin{pmatrix}0\\0\end{pmatrix}\ \checkmarkA\begin{pmatrix}-1\\0\\2\\1\end{pmatrix} = \begin{pmatrix}1(-1)+2(0)-1(2)+3(1)\\ 2(-1)+4(0)+1(2)+0(1)\end{pmatrix} = \begin{pmatrix}-1-2+3\\-2+2\end{pmatrix} = \begin{pmatrix}0\\0\end{pmatrix}\ \checkmarkWhy: this catches a row-reduction or back-substitution slip before it carries into any later use of \operatorname{Nul}(A), such as describing the full solution set of A\mathbf x=\mathbf b.
Common mistakes
- Forgetting that the right-hand side stays 0 through every row operation, then treating a later column as if it were an augmented column that needs its own consistency check.
- Reading the free variables off the ORIGINAL matrix's columns instead of the RREF's — a column with no pivot in A can still end up with one after row reduction, and vice versa.
- Building only one spanning vector when there are two or more free variables, instead of one vector per free variable.
- Mixing up which entries of the spanning vector come from a free variable's own coefficient (always 1 in its own slot) versus a pivot variable's formula.
- Skipping the final check and never confirming that A times each spanning vector actually comes out to \mathbf 0.