352 - Topic 12 - Linear Systems of DEs

969 days ago by dwatson

Solving Linear Differential Equation Systems using Eigenvalues and Eigenvectors

John Travis

Mississippi College

When solving linear systems of differential equations, the collection of equations can be written in the form

$Y^\prime = A Y$

If one assumes that there are solutions that behave like "straight lines" that pass through the origin in the phase plane, then in a vector form the solution must look something like

$Y = r(t) V$

where $r(t)$ is a monotonic function with range $(-\infty,0)$ or $(0,\infty)$ and $V$ is a "direction" vector.

If we presume $r(t) = c e^{\lambda t}$ then

$A (c e^{\lambda t}V) = A Y = Y^\prime = \lambda c e^{\lambda t}V = \lambda Y$

Cancelling $c e^{\lambda t}$ on both sides gives

$AV =  \lambda V $

or

$ 0 = (\lambda I - A)V$

Therefore, the differential equation has a non-trivial straight-line solution of the form $c e^{\lambda t}V$ provided

$\left |{\lambda I - A}\right | = 0$

%hide %auto # Enter the 2x2 matrix corresponding to the desired linear system of DEs... var('t,x,y') A = matrix(QQ,[[-1,2],[0,3]]) #html('For the linear system of differential equations given by') html('$Y^\prime = %s Y$'%str(latex(A))) # Determine eigenvalues and eigenvectors for the given matrix A Eigen = A.eigenmatrix_right() Vecs = Eigen[1].transpose() n=len(Eigen) html('<OL>') for k in range(n): lam = Eigen[0][k][k] V = Vecs[k] soln = e^(lam*t)*V html('<LI> Eigenvalue = $%s$'%str(lam)+' with eigenvector $%s^T$'%str(latex(V))+' yields solution $%s$'%str(latex(soln))) A0 = A[0][0]*x+A[0][1]*y A1 = A[1][0]*x+A[1][1]*y G = plot_vector_field((A0,A1),[x,-2,2],[y,-2,2]) G += line([(0,0),Vecs[0]],thickness=4)+line([(0,0),Vecs[1]],thickness=4) G += line([(0,0),-Vecs[0]],thickness=4)+line([(0,0),-Vecs[1]],thickness=4) G.show(aspect_ratio=true) # plot the straight line solutions using the vectors given. 
       
# Create an interact where the user can adjust components of A and watch the eigensystem (and straight-line solutions) change dynamically 
       
var('t,x,y') A = matrix(QQ,[[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1],[31,-19,-12,6,0]]) Eigen = A.eigenmatrix_right() Vecs = Eigen[1].transpose() n=len(Eigen) for k in range(n): print Eigen[k][k] show(Eigen) show(Vecs) 
       
(1.162456196701477?, 0, 0, 0, 0)
(1.162456196701477?, -2.247383148246649? - 0.1954680715434827?*I,
-2.247383148246649? + 0.1954680715434827?*I, 1.666155049895911? -
1.569792375745458?*I, 1.666155049895911? + 1.569792375745458?*I)

                                
                            
(1.162456196701477?, 0, 0, 0, 0)
(1.162456196701477?, -2.247383148246649? - 0.1954680715434827?*I, -2.247383148246649? + 0.1954680715434827?*I, 1.666155049895911? - 1.569792375745458?*I, 1.666155049895911? + 1.569792375745458?*I)