Fundamental Subspaces: Row Space, Column Space and Null Space
Every m × n matrix A has four fundamental subspaces: the column space Col(A) in ℝm (all combinations of the columns), the row space Row(A) in ℝn, the null space Null(A) = {x : Ax = 0} in ℝn, and the left null space Null(AT) in ℝm; if A has rank r, their dimensions are r, r, n − r and m − r. In brief: for A = [[1, 2, 1, 4], [2, 4, 0, 2], [1, 2, 3, 10]] (rank 2), a basis of the column space is (1, 2, 1), (1, 0, 3), and a basis of the null space is (−2, 1, 0, 0), (−1, 0, −3, 1).
The four subspaces describe exactly when Ax = b is solvable and how the solutions are structured. This guide shows how to read bases from the reduced row echelon form, how the dimensions fit together, the orthogonality relations, and how to test whether a vector lies in a subspace, with worked examples and a table.
What are the four subspaces?
- Column space Col(A): all linear combinations of the columns of A; it equals the set of vectors b for which Ax = b is solvable.
- Row space Row(A): all combinations of the rows; it equals Col(AT).
- Null space Null(A): all solutions of Ax = 0.
- Left null space Null(AT): all y with yTA = 0, that is, the linear relations among the rows.
Each is a subspace (closed under addition and scalar multiples).
How do you find bases?
Reduce A to its RREF R. Then:
- A basis of Col(A): the columns of the original matrix A that correspond to the pivot columns of R (row operations change the column space, so take the columns of A, not of R).
- A basis of Row(A): the nonzero rows of R (row operations do not change the row space).
- A basis of Null(A): solve Rx = 0, set each free variable to 1 in turn (the others 0), and read off the vectors.
- A basis of Null(AT): reduce AT in the same way, or record the row operations that produce a zero row.
Example 1: all four subspaces
A = [[1, 2, 1, 4], [2, 4, 0, 2], [1, 2, 3, 10]]. As in the previous articles, the RREF is R = [[1, 2, 0, 1], [0, 0, 1, 3], [0, 0, 0, 0]]. The pivots are in columns 1 and 3, so r = 2; the free variables are x2 and x4.
- Col(A) has the basis (1, 2, 1) and (1, 0, 3), the columns 1 and 3 of A. It is a plane in ℝ3.
- Row(A) has the basis (1, 2, 0, 1) and (0, 0, 1, 3), a plane in ℝ4.
- Null(A): x1 = −2x2 − x4, x3 = −3x4. With x2 = 1, x4 = 0 we get (−2, 1, 0, 0); with x2 = 0, x4 = 1 we get (−1, 0, −3, 1). Check the second: A times it = (−1 − 3 + 4, −2 + 0 + 2, −1 − 9 + 10) = (0, 0, 0) ✓.
- Null(AT): the row operations gave R2 − 2R1 and R3 − R1 summing to zero, i.e. R2 + R3 − 3R1 = 0. So y = (−3, 1, 1) spans the left null space. Check: yTA = (−3 + 2 + 1, −6 + 4 + 2, −3 + 0 + 3, −12 + 2 + 10) = 0 ✓.
Example 2: an invertible matrix
For an invertible n × n matrix, Col(A) = Row(A) = ℝn and the null spaces are {0}. The rank is n.
How are the subspaces related?
The dimensions satisfy dim Col(A) = dim Row(A) = r (the column rank equals the row rank), dim Null(A) = n − r, dim Null(AT) = m − r. The rank–nullity theorem states that n = r + (n − r). In addition, the row space is orthogonal to the null space and, together, they make up ℝn: every vector of ℝn splits uniquely as a row space part plus a null space part. Likewise, the column space is orthogonal to the left null space in ℝm. The reason: each equation in Ax = 0 says that x is perpendicular to a row of A.
Example 3: checking orthogonality
(1, 2, 0, 1) · (−2, 1, 0, 0) = −2 + 2 = 0 and (0, 0, 1, 3) · (−1, 0, −3, 1) = −3 + 3 = 0, so the row space basis is orthogonal to the null space basis. Also (1, 2, 1) · (−3, 1, 1) = 0 and (1, 0, 3) · (−3, 1, 1) = 0: the columns are orthogonal to the left null vector. Dimensions: 2 + 2 = 4 = n and 2 + 1 = 3 = m ✓.
How do you test membership?
The vector b lies in Col(A) exactly when Ax = b is solvable, equivalently when b is orthogonal to the left null space: y · b = 0 for the vectors y of Null(AT). A vector x lies in Null(A) when Ax = 0, and in Row(A) when it is orthogonal to the null space.
Example 4: solvability by the left null space
For A of Example 1 and y = (−3, 1, 1): b = (1, 2, 1) gives y · b = −3 + 2 + 1 = 0, so Ax = b is solvable (it is the first column). The vector b = (3, 2, 5) gives y · b = −9 + 2 + 5 = −2 ≠ 0, so Ax = b has no solution.
Example 5: the general solution structure
For b = (4, 2, 10), the fourth column of A, the system Ax = b is solvable, consistent with y · b = −12 + 2 + 10 = 0. A particular solution is x = (1, 0, 3, 0) (check: 1 + 3 = 4, 2 + 0 = 2, 1 + 9 = 10 ✓), and the general solution is (1, 0, 3, 0) + s(−2, 1, 0, 0) + t(−1, 0, −3, 1): a particular solution plus the null space.
Table of the four subspaces
| Subspace | Lives in | Dimension | Basis from | Example |
|---|---|---|---|---|
| Col(A) | ℝm | r | pivot columns of A | dim 2 in ℝ3 |
| Row(A) | ℝn | r | nonzero rows of R | dim 2 in ℝ4 |
| Null(A) | ℝn | n − r | free variables | dim 2 |
| Null(AT) | ℝm | m − r | row relations | dim 1 |
Where does the idea come from?
The picture of four subspaces and their orthogonality was popularized by Gilbert Strang in his textbooks as the “big picture” of linear algebra, building on the fundamental theorem of linear algebra. The underlying notions, rank and null space (kernel), were developed in the nineteenth century by Sylvester, Frobenius and others in the study of linear systems.
Which mistakes are common?
Taking the pivot columns of the RREF as the column space basis
The RREF has different columns than A. Use the columns of the original matrix at the pivot positions.
Taking the zero rows into the row space basis
Only nonzero rows of R are in the basis; zero rows do not add anything.
Mixing up the ambient spaces
Col(A) lives in ℝm (the number of rows), and Null(A) in ℝn (the number of columns).
Forgetting the particular solution
The solution set of Ax = b ≠ 0 is a shifted null space: a particular solution plus Null(A), and not Null(A) itself.