# 14 In-Class Assignment: Fundamental Spaces¶

## 2. Four Fundamental Subspaces¶

### The four fundamental subspaces¶

• Columnspace, $$\mathcal{C}(A)$$

• Nullspace, $$\mathcal{N}(A)$$

• Rowspaces, $$R(A)$$

• All linear combinations of rows

• All the linear combinations of the colums of $$A^\top$$, $$\mathcal{C}(A^\top)$$

• Nullspace of $$A^\top$$, $$\mathcal{N}(A^\top)$$ (the left nullspace of $$A$$)

### Where are these spaces for a $$m\times n$$ matrix $$A$$?¶

• $$\mathcal{R}(A)$$ is in $$R^n$$

• $$\mathcal{N}(A)$$ is in $$R^n$$

• $$\mathcal{C}(A)$$ is in $$R^m$$

• $$\mathcal{N}(A^\top)$$ is in $$R^m$$

### Calculating basis and dimension¶

#### For $$\mathcal{R}(A)$$¶

• If $$A$$ undergoes row reduction to row echelon form $$B$$, then $$\mathcal{C}(B)\neq \mathcal{C}(A)$$, but $$\mathcal{R}(B) = \mathcal{R}(A)$$ (or $$\mathcal{C}(B^\top) = \mathcal{C}(A^\top))$$

• A basis for the rowspace of $$A$$ (or $$B$$) is the first $$r$$ rows of $$B$$

• So we row reduce $$A$$ and take the pivot rows and transpose them

• The dimension is also equal to the rank $$r$$

#### For $$\mathcal{N}(A)$$¶

• The bases are the special solutions (one for every free variable, $$n-r$$)

• The dimension is $$n- r$$

#### For $$\mathcal{C}(A) = \mathcal{R}(A^\top)$$¶

• Apply the row reduction on the transpose $$A^\top$$.

• The dimension is the rank $$r$$

#### For $$\mathcal{N}(A^\top)$$¶

• It is also called the left nullspace, because it ends up on the left (as seen below)

• Here we have $$A^\top y = 0$$

• $$y^\top(A^\top)^\top = 0^\top$$

• $$y^\top A = 0^\top$$

• This is (again) the special solutions for $$A^\top$$ (after row reduction)

• The dimension is $$m - r$$

## 3. Practice Example:¶

Consider the linear transformation defined by the following matrix $$A$$.

$\begin{split}A = \left[ \begin{matrix} 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 1 \\ 1 & 2 & 3 & 1 \end{matrix} \right] \end{split}$
%matplotlib inline
import matplotlib.pylab as plt
import numpy as np
import sympy as sym
sym.init_printing()

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-97c04e533e83> in <module>
----> 1 get_ipython().run_line_magic('matplotlib', 'inline')
2 import matplotlib.pylab as plt
3 import numpy as np
4 import sympy as sym
5 sym.init_printing()

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
2342                 kwargs['local_ns'] = self.get_local_scope(stack_depth)
2343             with self.builtin_trap:
-> 2344                 result = fn(*args, **kwargs)
2345             return result
2346

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/decorator.py in fun(*args, **kw)
230             if not kwsyntax:
231                 args, kw = fix(args, kw, sig)
--> 232             return caller(func, *(extras + args), **kw)
233     fun.__name__ = func.__name__
234     fun.__doc__ = func.__doc__

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
185     # but it's overkill for just that one bit of state.
186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
188
189         if callable(arg):

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/IPython/core/magics/pylab.py in matplotlib(self, line)
97             print("Available matplotlib backends: %s" % backends_list)
98         else:
---> 99             gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui)
100             self._show_matplotlib_backend(args.gui, backend)
101

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/IPython/core/interactiveshell.py in enable_matplotlib(self, gui)
3511         """
3512         from IPython.core import pylabtools as pt
-> 3513         gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
3514
3515         if gui != 'inline':

~/REPOS/MTH314_Textbook/MakeTextbook/envs/lib/python3.9/site-packages/IPython/core/pylabtools.py in find_gui_and_backend(gui, gui_select)
278     """
279
--> 280     import matplotlib
281
282     if gui and gui != 'auto':

ModuleNotFoundError: No module named 'matplotlib'


Question: What is the reduced row echelon form of $$A$$? You can use sympy.

#Put your answer to the above question here.


Question: Now let’s calculate the row space of $$A$$. Note that the row space is defined by a linear combination of the non-zero row vectors in the reduced row echelon matrix:

Question: What is the rank of matrix $$A$$? You should know the rank by inspecting the reduced row echelon form. Find a numpy or sympy function that you can use to verify your answer?

## Put code here to verify your answer.


Question: Using the reduced row echelon form define the leading variables in terms of the free variables for the homogeneous equation.

Question: The solution to the above question defines the nullspace of $$A$$ (aka the Kernel). Use the sympy.nullspace function to verify your answer.

# Put your code here


Question: Now let’s calculate the range of $$A$$ (column space of $$A$$). Note that the range is spanned by the column vectors of $$A$$. Transpose $$A$$ and calculate the reduced row echelon form of the transposed matrix like we did above.

## Put your code here


Question: The nonzero row vectors of the above solution will give a basis for the range (or $$\mathcal{C}(A)$$). Write the range of $$A$$ as a linear combination of these nonzero vectors:

Question: Finally, using the reduced row echelon form for $$A^\top$$ define the leading variables in terms of the free variables and define the null space of $$A^\top$$.