7.4 Invariant Subspaces
staying inside a region
1Reading¶
Material related to this page, as well as additional exercises, can be found in ALA 8.4 and 10.4.
2Learning Objectives¶
By the end of this page, you should know:
- the definition and some examples of invariant subspaces
- the invariant subspaces spanned by the eigenvectors of the matrix
- the different invariant subspaces of a complete matrix and how they relate to the behavior of linear dynamical systems
3Definition and Examples¶
Invariant subspaces of linear maps play a key role in dynamical systems, linear iterative systems (like Markov chains, which we’ll see next lecture), and control systems. Perhaps not surprisingly, the theory of invariant subspaces is built on eigenvalues and eigenvectors.
We start by defining an invariant subspace with respect to a linear transformation.
Intuitively, an invariant subspace is like Vegas: what happens in stays in ! Let’s see some simple examples before developing a more general theory.
4Subspaces Spanned by the Eigenvectors¶
Since we will focus on cases where , our linear transformations will be defined by matrices : . In this case, we can characterize 1-d invariant subspaces very clearly.
We won’t formally prove this result, but instead give a hint as to why it might be true. Suppose for linearly independent eigenvectors of . Then any can be written as
for . Then
and hence is invariant under the map . The challenge is to show the other direction, that if is invariant under then must be spanned by eigenvectors of . We refer interested readers to proof of Thm 8.3 in ALA 8.4.
4.1Plot for Example 5¶
An interactive 3d plot is given below along with the python code that illustrate the primary vectors and the subspace in Example 5. The orthogonal vectors are () and () that span the 2d invariant subspace (in ). The axis of rotation is (). We used Plotly to plot the below figure, which is a nice tool to plot interactive figures on google colab/jupyter notebook.
import numpy as np
import plotly.graph_objects as go
import ipywidgets as widgets
from IPython.display import display
## Define the orthogonal vectors and the axis of rotation
# Orthogonal vectors
v1 = np.array([-1/2, -1/2, 1]) # v2 in the exercise
v2 = np.array([np.sqrt(3)/2, -np.sqrt(3)/2, 0]) # v3 in the exercise
axis = np.array([1, 1, 1]) # axis of rotation: # v1 in the exercise
# Define the plane
u = np.linspace(-1, 1, 10)
v = np.linspace(-1, 1, 10)
U, V = np.meshgrid(u, v)
X = U * v1[0] + V * v2[0]
Y = U * v1[1] + V * v2[1]
Z = U * v1[2] + V * v2[2]
# Create the 3D plot
fig = go.Figure()
# Add vectors to the plot without markers
fig.add_trace(go.Scatter3d(x=[0, v1[0]], y=[0, v1[1]], z=[0, v1[2]],
mode='lines', line=dict(color='red', width=8)))
fig.add_trace(go.Scatter3d(x=[0, v2[0]], y=[0, v2[1]], z=[0, v2[2]],
mode='lines', line=dict(color='green', width=8)))
fig.add_trace(go.Scatter3d(x=[0, axis[0]], y=[0, axis[1]], z=[0, axis[2]],
mode='lines', name='axis', line=dict(color='blue', width=8)))
# Add the plane
fig.add_trace(go.Surface(x=X, y=Y, z=Z, colorscale=[[0, 'cyan'], [1, 'cyan']], opacity=0.5, showscale=False))
# Add arrowheads (cones) at the end of the vectors
fig.add_trace(go.Cone(x=[v1[0]], y=[v1[1]], z=[v1[2]],
u=[v1[0]], v=[v1[1]], w=[v1[2]],
colorscale=[[0, 'red'], [1, 'red']], sizemode='absolute', sizeref=0.3, anchor="tail", showscale=False, showlegend=False))
fig.add_trace(go.Cone(x=[v2[0]], y=[v2[1]], z=[v2[2]],
u=[v2[0]], v=[v2[1]], w=[v2[2]],
colorscale=[[0, 'green'], [1, 'green']], sizemode='absolute', sizeref=0.3, anchor="tail", showscale=False, showlegend=False))
fig.add_trace(go.Cone(x=[axis[0]], y=[axis[1]], z=[axis[2]],
u=[axis[0]], v=[axis[1]], w=[axis[2]],
colorscale=[[0, 'blue'], [1, 'blue']], sizemode='absolute', sizeref=0.3, anchor="tail", showscale=False, showlegend=False))
# Set the layout
fig.update_layout(scene=dict(
xaxis=dict(range=[-1.5, 1.5]),
yaxis=dict(range=[-1.5, 1.5]),
zaxis=dict(range=[-1.5, 1.5]),
aspectmode='cube'),
width=700, height=700)
5Invariant Subspaces and Linear Dynamical Systems¶
Here we give a very brief preview of the role of invariant subspaces in dynamical systems. You will see this in much more detail in ESE 2100.
We call a subset invariant for if, whenever then the solution for all . It turns out, invariant subspaces of precisely characterize these subsets:
We will focus on the case of complete matrices with real eigenvalues and eigenvectors; extensions to the general case are similar, and rely on using Jordan blocks and taking Real/Imaginary parts of complex eigenvectors.
These subspaces are important, as they describe the long-term behavior of solutions with initial conditions within them. Before elucidating this observation, we make the following comments:
Remembering that to each eigenvalue/vector pair we can associate an eigenfunction , we can characterize the following long-term behavior of solutions to :
This theorem tells us from what subsets of we should pick initial conditions if we want our solutions to decay to zero (stable), not move (center), or blow up to infinity (unstable). This has very important applications in analyzing the behavior of dynamical systems, which we’ll explore in the case study.