DE.07 Eigenvectors and Eigenvalues for Linear Systems
TUTORIALS

Needs["Graphics`Colors`"];
Needs["Graphics`FilledPlot`"];

If[MemberQ[{"Global`","Graphics`Common`GraphicsCommon`","Vector3D`"}, 
    Context[ScaleFactor]],Remove["*`ScaleFactor"]];
<<"Graphics`Legend`";
<<"Graphics`Common`GraphicsCommon`";
Remove["*`ScaleFactor"];
Graphics`Colors`GosiaGreen=RGBColor[0, 0.392187, 0];
Off[General::spell];
Off[General::spell1];
Off[ParametricPlot3D::ppcom];
Off[ParametricPlot::ppcom];
Off[Plot::plnr];
Needs["Calculus`Master`"];
Off[Unique::"usym"];
SetOptions[Limit,Analytic->True];

CMView = {2.7, 1.6, 1.2};

Off[Graphics::gpt]

New Vector Drawers

(* :Title:  NewVectorDraw  *)
(* :Author: Bruce Carpenter *)
(* :Summary:  Construct 2 and 3 dimensional vectors,
     arrows, and arrowheads as graphics 
     objects.
*)
(* :Date:  Copyright 1997, Math Everywhere, Inc. 
*)
(*  :Drawbacks:  Since the vectors are drawn out of 
     context, the shapes of the arrowheads are only 
     correct with AspectRatio set to Automatic.
*)
BeginPackage["Vector3D`","Graphics`Colors`"];

Axes3D::usage = "Axes3D[a, b] creates a Graphics3D object of cartesian axes with x, y, and z running from -a/3 to a, and with axes labels b units beyond the tips of the axes.  Axes3D[a] is Axes3D[a, a/8].";

Perpend::usage = "Perpend[a] returns a unit vector which is perpendicular to the vector a.";

Arrow::usage = "Arrow[a] produces a 2 or 3 dimensional vector from the origin to a. Arrow[a, Tail -> tail] gives a vector from tail to a.";
	
Vector::usage = "Vector[a, b] gives a 2D or 3D vector from a to b.";

ArrowHead::usage = "ArrowHead[a, vec] produces an arrowhead with its tip placed at the point a, pointing in the direction of the vector vec.";

Tail::usage = "Tail -> point puts the tail of the vector at point.";

Norm::usage = "Norm[vec] returns the Euclidean length of vec.";

Normalize::usage = "Normalize[vec] returns a unit vector in the direction of vec, provided vec is nonzero.";

Aperture::usage = "Aperture is the ratio of the radius of the base to the length of the head of a vector.";

TipSize::usage = "TipSize specifies an absolute size for the inner tip length of the head of a vector.";

TipRatio::usage = "TipRatio is the ratio of the inner length of the arrowhead to the length of the shaft of a vector.";

HeadRatio::usage = "HeadRatio is the ratio of the outer length of the arrowhead to the length of the shaft of a vector.";

HeadSize::usage = "HeadSize specifies an absolute size for the head of a vector.";

ScaleFactor::usage = "ScaleFactor specifies the amount to scale a vector in length and may be either a number or a pure function.";

ZeroVectorPointSize::usage = "ZeroVectorPointSize is the size of the point used to represent a zero vector.";

Options[Vector] = Options[Arrow] = Options[ArrowHead] =
{HeadRatio -> 0.18, TipRatio -> 0.14, Aperture -> 0.3, ScaleFactor -> 1, HeadType -> Polygon, ShaftQ -> True, EdgesQ -> True, VectorColor -> RGBColor[0,0,1], ShaftWidth -> 0.005, ZeroVectorPointSize -> 0.01};
		
Begin["`Private`"];

SetOptions[ParametricPlot,AspectRatio -> Automatic];
SetOptions[Plot,AspectRatio -> Automatic];
SetOptions[Graphics,AspectRatio -> Automatic];

Axes3D[u_,v_] := 
      Graphics3D[{
            {Blue,Line[{{-u/3,0,0},{u,0,0}}]},
                    Text["x",{u + v,0,0}],
            {Blue,Line[{{0,-u/3,0},{0,u,0}}]},
                    Text["y",{0, u + v,0}],
            {Blue,Line[{{0,0,-u/3},{0,0,u}}]},
                    Text["z",{0,0,u + v}]}]; 
Axes3D[u_] := Axes3D[u,u/8];
				
Norm[a_?VectorQ] := N[Sqrt[a.a]];

Normalize[a_?VectorQ] := If[a.a == 0, a, a/Norm[a]];

Perpend[a_?VectorQ] := Normalize[{a[[2]],-a[[1]]}]/;Length[a]==2
Perpend[a_?VectorQ] := Normalize[If[a[[1]]==0,{1,0,0},{0,a[[3]],-a[[2]]}]]/;Length[a]==3

Base3D = Table[{Cos[2 k Pi/8.], Sin[2 k Pi/8.]},{k,0,8}]; 

Vector[from_?VectorQ, to_?VectorQ, opts___] := Module[
   {sq, sw, ht, hs, hr, tr, ap, sf, vc, zvps, diff = to - from, tip},
   {sq, sw, ht, hs, hr, ts, tr, ap, sf, vc, zvps} = {ShaftQ, ShaftWidth, HeadType, HeadSize, HeadRatio, TipSize, TipRatio, Aperture, ScaleFactor, VectorColor, ZeroVectorPointSize} /. {opts} /. Options[Vector];
   If[from==to, Return[Graphics[{PointSize[zvps],vc,Point[from]}]]];
   diff = If[NumberQ[N[sf]], sf diff, sf[diff]];
   tip = from + diff;
   If[NumberQ[hs], hr = hs/Norm[diff]; tr = 0.75 hr];
   If[NumberQ[ts], tr = ts/Norm[diff]];
   Graphics[{If[sq,{vc,Thickness[sw],Line[{from,tip - tr diff}]},{}],
      With[{trans = ap hr Norm[diff] Perpend[diff]},
      {vc, Thickness[sw], ht[{tip,
                   (tip - hr diff + trans),
                   (tip - tr diff),
                   (tip - hr diff - trans),tip}]}]}]
] /; Length[from]==Length[to]==2

Vector[from_?VectorQ, to_?VectorQ, opts___] := Module[
   {sq, eq, sw, hs, hr, tr,ap, sf, vc, zvps, diff = to - from, tip},
   {sq, eq, sw, hs, hr, ap, sf, vc, zvps} = {ShaftQ, EdgesQ, ShaftWidth, HeadSize, HeadRatio, Aperture, ScaleFactor, VectorColor, ZeroVectorPointSize} /. {opts} /. Options[Vector];
   If[from==to, Return[Graphics3D[{PointSize[zvps],vc,Point[from]}]]];
   diff = If[NumberQ[N[sf]], sf diff, sf[diff]];
   tip = from + diff;
   If[NumberQ[hs], hr = hs/Norm[diff]];
   tr = hr/2;
   Graphics3D[{If[sq,{vc,Thickness[sw],Line[{from,tip-tr diff}]},{}], If[eq, {}, EdgeForm[]], {SurfaceColor[vc],
      With[{temp = Perpend[diff]},
      Polygon[Append[#,tip]]& /@ Partition[(tip - hr diff + #)&/@((ap hr Norm[diff] Base3D) . {temp,Normalize[Cross[temp,diff]]}),2,1]]}}]
] /; Length[from]==Length[to]==3


Arrow[a_, Tail->b_, opts___] := Vector[b,a+b,opts]

Arrow[a_, opts___] := Vector[Table[0,{Length[a]}],a,opts]

ArrowHead[a_, b_, opts___] := Vector[a-b,a,ShaftQ->False,opts];

End[];

EndPackage[];
Null

VectorField and Phase Lines

(*  :Title: VectorAndPhase.m  *)

(*  :Author:  Bill Davis  *)

(*  :Dates:  about March, 1996 *)

(*  :Drawbacks:  I wish someone serious would come and turn these into
                 Really carefully done packages.  *)

BeginPackage["PhaseStuff`","Vector3D`",
		"Utilities`FilterOptions`"];

PhaseLine::usage = "PhaseLine[fcn,{var,a,b},tint,pos]
	makes a vertical phase line for the function, fcn, of the variable, var,
	for the variable going from a to b, with 
	a color given by tint,  at the x-coordinate pos.";
	
PhaseLine3D::usage = "PhaseLIne3D[fcn,{var,a,b},tint,loc]
	makes a vertical phase line for the function, fcn, of the variable, var,
	for the variable going from a to b, with 
	a color given by tint, and base point at loc = {x,y}";
	
VectorField::usage = "VectorField[{function,{var1,a,b,space1},{var2,c,d,space2}]
	will make a vector field of normalized vectors, colored by
	magnitude, for the function of the variables on the
	range {r1,r2} with spacing between points given by 
	{space1, space2}.  If a single function of a single variable is given,
	the vector field {1,f} will be plotted.";
	
StikPikXZ::usage = "StikPikXZ[picture,a:_0] takes a 2 dimensional
	Mathematica picture and embeds it on the XZ plane at y = a.  
	Some optional characteristics of the graphs are lost in the 
	process.  StikPikYZ and StikPikXZ are similar.";
	
StikPikYZ::usage = "StikPikYZ[picture,a:_0] takes a 2 dimensional
	Mathematica picture and embeds it on the XZ plane at y = a.  
	Some optional characteristics of the graphs are lost in the 
	process.  StikPikYZ and StikPikXZ are similar.";
	
StikPikXY::usage = "StikPikXY[picture,a:_0] takes a 2 dimensional
	Mathematica picture and embeds it on the XZ plane at y = a.  
	Some optional characteristics of the graphs are lost in the 
	process.  StikPikYZ and StikPikXZ are similar.";
	
Begin["`Private`"];	

PhaseLine[fcn_,{var_,a_,b_},tint_,pos_:0] := 
	Module[{len,len1,k,zset,zero,zero1,signs,stick,dots,pointers},
	zset = Solve[fcn==0,var];
	zero = If[Length[zset]==0,{},var/.zset];
	zero = Sort[zero];
	zero = Select[zero,((# >= a)&&(# <= b))&];
	zero1 = Sort[Union[zero,{a,b}]];
	len = Length[zero];
	len1 = Length[zero1];
	signs = Table[Sign[fcn/.var->((zero1[[k+1]] + zero1[[k]])/2)],
		{k,1,len1-1}];
	stick = {Thickness[0.007],Line[{{pos,a},{pos,b}}]};
	dots = Point[{pos,#}]&/@zero;
	dots = Join[{PointSize[0.05],tint},dots];
	heads = Table[MakeHead[zero1[[k]],zero1[[k+1]],pos,
		signs[[k]],b-a,tint],{k,1,len1-1}];
	Return[{Graphics[Join[{tint},stick,dots]],heads}]
		]
		
MakeHead[a_,b_,c_,s_,slen_,tint_] := Module[{u,v,w},
	u = Min[2(b-a),3/4 slen];
	Return[ArrowHead[{c,a(.5-s/5)+b(.5+s/5)},
		{0,s u},VectorColor->tint]]]
		
PhaseLine3D[fcn_,{var_,a_,b_},tint_,pos_:{0,0}] := 
	Module[{len,len1,k,zset,zero,zero1,signs,stick,dots,pointers},
	zset = Solve[fcn==0,var];
	zero = If[Length[zset]==0,{},var/.zset];
	zero = Sort[zero];
	zero = Select[zero,((# >= a)&&(# <= b))&];
	zero1 = Sort[Union[zero,{a,b}]];
	len = Length[zero];
	len1 = Length[zero1];
	signs = Table[Sign[fcn/.var->((zero1[[k+1]] + zero1[[k]])/2)],
		{k,1,len1-1}];
	stick = {Thickness[0.007],Line[{{pos[[1]],pos[[2]],a},
		{pos[[1]],pos[[2]],b}}]};
	dots = Point[{pos[[1]],pos[[2]],#}]&/@zero;
	dots = Join[{PointSize[0.03],tint},dots];
	heads = Table[MakeHead3D[zero1[[k]],zero1[[k+1]],pos,
		signs[[k]],b-a,tint],{k,1,len1-1}];
	Return[{Graphics3D[Join[{tint},stick,dots]],heads}]
		]
		
MakeHead3D[a_,b_,c_,s_,slen_,tint_] := Module[{u,v,w},
	u = Min[2(b-a),1/2 slen];
	Return[ArrowHead[{c[[1]],c[[2]],a(.5-s/5)+b(.5+s/5)},
		{0,0,s u},VectorColor->tint]]]
		
		
VectorField[function_List,{var1_,a_,b_,sp1_:1},{var2_,c_,d_,sp2_:1}] := 
	Module[{i,j,U,V,UU,VV,ulow,uhigh,vlow,vhigh,maxval,minval,
		lengths,directions,locations,mlen},
	mlen = Min[sp1,sp2];
	normf[uu_,vv_] = Sqrt[function[[1]]^2+function[[2]]^2]/.
		{var1->uu,var2->vv};
	lengths = Table[N[normf[U,V]],{U,a,b,sp1},{V,c,d,sp2}];
	maxval = Max[lengths]; minval = Min[lengths];
	If[minval == maxval,maxval += 1];
	locations = Table[{uu,vv},{uu,a,b,sp1},
		{vv,c,d,sp2}];
	directions = Table[If[N[normf[U,V]]==0,{0,0},
		mlen (function/.{var1->U,var2->V})/(1.3 N[normf[U,V]])],
			{U,a,b,sp1},{V,c,d,sp2}];
	{UU,VV} = Dimensions[directions][[{1,2}]];
	Return[Table[Arrow[directions[[i,j]],
			Tail->locations[[i,j]],Aperture->1,
			HeadRatio->.4,ShaftWidth->0.008, VectorColor->
			RGBColor[(lengths[[i,j]] - minval)/(maxval-minval),0,
				(maxval -lengths[[i,j]])/(maxval-minval)]],{i,UU},{j,VV}]]
		]
		
VectorField[function_,{var1_,a_,b_,sp1_:1},{var2_,c_,d_,sp2_:1}] :=
	VectorField[{1,function},{var1,a,b,sp1},{var2,c,d,sp2}]
	
	
Needs["Utilities`FilterOptions`"]

FixOptions[a_] := Module[{picture = a, opt3},
If[Options[picture] != {}, 
	opt3 = FilterOptions[Graphics3D,#]&/@Options[picture];
	(* Fix things that might carry 2D characteristics. *)
	opt3 = opt3//. {(AxesLabel -> _) ->(AxesLabel -> None),
			(PlotRange->_) -> (PlotRange->Automatic),
			(PlotRegion -> _) -> (PlotRegion -> Automatic),
			(Ticks -> _) -> (Ticks -> Automatic)};
	picture = Apply[List,picture];
	picture[[-1]] = opt3;
	picture = Apply[Graphics3D,picture]];
	Return[picture]
	]

StikPikXZ[picture_,a_:0] := Module[{PIK3 = picture},
	PIK3 = PIK3//.{Graphics->Graphics3D,
		{u_?NumberQ,v_?NumberQ}:>{u,a,v}};
	PIK3 = FixOptions[PIK3];
	Return[PIK3]
		]


StikPikYZ[picture_,a_:0] := Module[{PIK3 = picture},
	PIK3 = PIK3//.{Graphics->Graphics3D,
		{u_?NumberQ,v_?NumberQ}:>{a,u,v}};
	PIK3 = FixOptions[PIK3];
	Return[PIK3]
		]


StikPikXY[picture_,a_:0] := Module[{PIK3 = picture},
	PIK3 = PIK3//.{Graphics->Graphics3D,
		{u_?NumberQ,v_?NumberQ}:>{u,v,a}};
	PIK3 = FixOptions[PIK3];
	Return[PIK3]
		]
		
End[];

EndPackage[];
Null

ThreeAxes[u,v]

ThreeAxes[u_,v_] := 
      Graphics3D[{
            {Blue,Line[{{-u,0,0},{u,0,0}}]},
                    Text["x",{u + v,0,0}],
            {Blue,Line[{{0,-u,0},{0,u,0}}]},
                    Text["y",{0, u + v,0}],
            {Blue,Line[{{0,0,0},{0,0,u}}]},
                    Text["z",{0,0,u + v}]}]; 
ThreeAxes[u_] := ThreeAxes[u,u/8];
ThreeAxes::usage = "ThreeAxes[a,b] makes a standard cartesian axis graphics object
	with x, y, and z running from -a to a, and with axis
	labels b units beyond the tips of the axes.  ThreeAxes[a]
	is ThreeAxes[a,a/8].";

Crisscross

Clear[x];
crisscross = Plot[{Cos[x],Sin[x]},{x,Pi/8,3 Pi/8},
    PlotStyle->{{RGBColor[1,0,0],Thickness[0.02]}},
    Axes->None,AspectRatio->1/3,
    DisplayFunction->Identity];

T.1) The matrix exponential (E^(A t)): 
         A short cut to coming up with formulas

Here's a random coefficient matrix for a random linear system:

\(A\  = 
      \ {{Random[Real, {\(-2\), 2}], Random[Real, {\(-2\), 2}]}, 

        \ \ \ \ \ {Random[Real, {\(-2\), 2}], Random[Real, {\(-2\), 2}]}}; 

    Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

With random starter data on {x[0], y[0]}:

{xstarter, ystarter} = {Random[Real, {-2, 2}], 
        Random[Real, {-2, 2}]}

Formulas for the solution pair {x[t], y[t]} of this linear system with this starter data are:

Clear[eigenvector, eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]; {eigenvector[1], eigenvector[2]} = Chop[Eigenvectors[A]]; \(Clear[x, y, x1, y1, x2, y2, t, C1, C2]; 
    
{x1[t_], y1[t_]} = Chop[eigenvector[1]\ Exp[eigenvalue[1]\ t]]; 

    \({x2[t_], y2[t_]} = Chop[eigenvector[2]\ Exp[eigenvalue[2]\ t]]; \)\){x[t_], y[t_]} = C1 {x1[t], y1[t]} + C2 {x2[t], y2[t]}; starter = {xstarter, ystarter}; starterequation = {x[0], y[0]} == starter; Csols = Solve[starterequation]; {x[t_], y[t_]} = 
      Chop[ComplexExpand[{x[t], y[t]} /. 
            Csols[[1]]]]

That's a lot of algebra.
Mathematica has an instruction involving a new idea called the matrix exponential. 
This instruction  will reproduce this formula for you in one line of typing. 
Here you go:

\(Clear[x, y, t]; 

    	{x[t_], y[t_]}\  = \ 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]\)

Use it and love it.

T.2)  Quick eigenvalue analysis

T.2.a) Eigenvalues indicate sucking swirlers

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == \ 

          \ \ \ \ \ {0.5\ x[t]\  - \ 1.7\ y[t], \ 2.8\ x[t]\  - \ 2.3\ y[t]})
        \); 
ColumnForm[Thread[linearsystem]]\)

You read off the coefficient matrix A:

A = {{0.5, -1.7}, {2.8, -2.3}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

The presence of I  = (Sqrt[-1]) tells you both eigenvectors are swirlers. The presence of the negative number -0.9 tells you that both eigenvectors are also sucking swirlers.

The upshot:
The trajectories in this system spiral toward {0, 0}.  No matter what the starter data on solutions {x[t], y[t]} of this system, you are guaranteed that 
          x[t] -> 0  and  y[t] -> 0  as t -> ∞
but they wiggle a lot on their way.
In fact, you can know the essence of what are used to make up solution pairs {x[t], y[t]} just by looking at the eigenvalues.

For instance here's a formula for {x[t], y[t]} starting at a random point.

{xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]}; \(Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]
        \)

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

T.2.b) Eigenvalues that indicate two suckers

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == \ 

          \ \ \ \ \ {\(-2.3\)\ x[t]\  + \ 0.7\ y[t], \ 
            1.8\ x[t]\  - \ 4.3\ y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

You read off the coefficient matrix A:

A = {{-2.3, 0.7}, {1.8, -4.3}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

Both negative, with no imaginary component. The eigenvectors are both suckers.

The upshot:
The trajectories in this system hustle their buns toward {0, 0} and they don't spiral. 
 
No matter what the starter data on solutions {x[t], y[t]} of this system, you are guaranteed that 
          x[t] -> 0  and  y[t] -> 0 as  t -> ∞
but they don't wiggle much on their way.

In fact, you can know the essence of what are used to make up solution pairs  {x[t], y[t]}  just by looking at the eigenvalues.

For instance, here's a formula for {x[t], y[t]}  starting at a random point.

\({xstarter, ystarter} = {Random[Real, {\(-3\), 3}], 
        Random[Real, {\(-3\), 3}]}; 
Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]\)

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

T.2.c) Eigenvalues that indicate a propeller and a sucker

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {\(-0.5\)\ x[t]\  + \ 1.7\ y[t], \ 2.8\ x[t]\  - \ 2.3\ y[t]})\); 
    
ColumnForm[Thread[linearsystem]]\)

You read off the coefficient matrix A:

A = {{-0.5, 1.7}, {2.8, -2.3}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

Mixed signs. One eigenvector is a sucker and the other is a propeller.

The upshot:
The trajectories in this system hustle their buns toward the line determined by the propelling eigenvector which shows up as eigenvector[2] here:

Clear[eigenvector]; {eigenvector[1], eigenector[2]} = Chop[Eigenvectors[A]]

And they don't spiral.  
You are guaranteed that all trajectories eventually try to merge with the line through {0, 0} determined by the propelling eigenvector: eigenvector[2].

In fact, you can know the essence of what are used to make up solution pairs {x[t], y[t]} just by looking at the eigenvalues.

For instance, here's a formula for {x[t], y[t]} starting at a random point.

{xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]}; \(Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]\){xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]};

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

T.2.d) Eigenvalues indicate propelling swirlers

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {0.5\ x[t]\  + \ 6.7\ y[t], \ \(-2.8\)\ x[t]\  + \ 2.3\ y[t]})\); 
    
ColumnForm[Thread[linearsystem]]\)

You read off the coefficient matrix A:

A = {{0.5, 6.7}, {-2.8, 2.3}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

The presence of I = (Sqrt[-1]) tells you both eigenvectors are swirlers. The presence of the positive number 1.4 
tells you that both eigenvectors are also propelling swirlers.

The upshot:
The trajectories in this system spiral away from {0, 0}.  No matter what the starter data on solutions {x[t], y[t]} of this system, you are guaranteed that eventually {x[t], y[t]} will try to run off the screen with increasingly wild oscillation.

In fact, you can know the essence of what are used to make up solution pairs {x[t], y[t]} just by looking at the eigenvalues.

For instance, here's a formula for {x[t], y[t]} starting at a random starting point.

{xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]}; \(Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]
        \)

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

T.2.e) Eigenvalues that indicate pure swirlers

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {0.5\ x[t]\  - \ 1.7\ y[t], \ 3.6\ x[t]\  - \ 0.5\ y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

You read off the matrix A:

A = {{0.5, -1.7}, {3.6, -0.5}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

The presence the lone I  = (Sqrt[-1]) term tells you both eigenvectors are pure swirlers. 

The upshot:
The trajectories in this system oscillate on ellipses centered at {0, 0}.

In fact, you can know the essence of what are used to make up solution pairs {x[t], y[t]} just by looking at the eigenvalues.

For instance, here's a formula for {x[t], y[t]} starting at a random point.

{xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]}; \(Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]
        \)

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

T.2.f) Eigenvalues that indicate two propellers

The given linear system is:

\(Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {3.5\ x[t]\  - \ 0.4\ y[t], \ 0.6\ x[t]\  + \ 2.3\ y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

You read off the matrix A:

A = {{3.5, -0.4}, {0.6, 2.3}}; MatrixForm[A]

You ask Mathematica for the eigenvalues of A:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

What information about the trajectories do you get from this calculation?

Almost everything you want. 
Take another look:

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

Both positive. The eigenvectors are both propellers.

The upshot:
The trajectories in this system hustle their buns off the screen and they don't spiral. 
Eventually all the trajectories will try to merge with the line through {0, 0} determined by the dominant propeller which shows up as eigenvector[1] in:

{eigenvector[1], eigenvector[2]} = Eigenvectors[A]

In fact, you can know the essence of what are used to make up solution pairs {x[t], y[t]} just by looking at the eigenvalues.

For instance, here's a formula for {x[t], y[t]} starting at a random point.

{xstarter, ystarter} = {Random[Real, {-3, 3}], 
        Random[Real, {-3, 3}]}; \(Clear[x, y, t]; 
    
{x[t_], y[t_]} = 
      Chop[ComplexExpand[Expand[MatrixExp[A\ t] . {xstarter, ystarter}]]]
        \)

When you look at these formulas, you can tell almost everything you need to know simply by looking at the eigenvalues of the coefficient matrix A:

Eigenvalues[A]

In fact, you can know the essence of what are used to make up x[t] and y[t] just by looking at the eigenvalues.

T.3)  Traces, determinants and the cheat sheet chart - 
         print it and put it in your wallet

T.3.a.i)

Given a linear system with given numbers  a,  b, c and d:

\(Clear[x, y, t, a, b, c, d]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {a\ x[t]\  + \ b\ y[t], \ c\ x[t]\  + \ d\ y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

Your response is to write down the coefficient matrix A for this system:

A = {{a, b}, {c, d}}; MatrixForm[A]

Now calculate the eigenvalues of A:

Eigenvalues[A]

Two quantities stand out:
           (a  +  d) and a d  -  b c
Folks have special names for these quantities.  They say
           trace of A  =  a  +  d
and 
           determinant of A  =  a d  -  b c.

{trace = a + d, det = Det[A]}

You can easily express the eigenvalues of A in terms of the trace of A and the determinant of A:

ExpandAll[Eigenvalues[A]] == 
      ExpandAll[{(1/2) (trace - (Sqrt[(trace^2) - 4 det])), 
          (1/2) (trace + (Sqrt[(trace^2) - 4 det]))}]

So the two eigenvalues of A are given by the formulas:
        (1/2) (trace + (Sqrt[(trace^2) - 4 det])) 
and 
         (1/2) (trace - (Sqrt[(trace^2) - 4 det])).

These formulas make it possible for you to calculate the eigenvalues of a coefficient matrix with pencil and paper or with a cheap pocket calculator.

Lots of reference books have charts, of the type you will see below, that help you to see what kind of linear system you are dealing with once you know the trace and the determinant.
In this problem, you will participate in building one of these charts. To start building the chart, you go with trace and determinant axes and then you plot the curve
              (trace^2) - 4 determinant = 0:

cutoff = 
      Plot[((trace^2)/4), {trace, -5, 5}, 
        PlotStyle -> {{Red, Thickness[0.01]}}, 
        AxesLabel -> {"trace", "det"}, 
        PlotRange -> {-6, 6}, DisplayFunction -> Identity]; 
    \(cutofflabel = 
      Graphics[Text[
          FontForm[
            \*""\!\(trace\^2\)-4 det == 0"", {"Times", 10}], {3.0, 
            \(-4.0\)}]]; 

    \(pointer = 
      Arrow[{2, 1} - {3.0, \(-3.6\)}, Tail -> {3.0, \(-3.6\)}]; \)\)Show[cutoff, cutofflabel, pointer, 
      DisplayFunction -> $DisplayFunction];

And then you annote this cheat sheet plot as follows:

twosuckercutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{-5, 0}, {0, 0}}]}]; twosuckerlabel = 
      Graphics[Text[
          FontForm[" Two pure \n suckers", {"Times", 10}], {-4, 
            1}]]; twopropcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {5, 0}}]}]; twoproplabel = 
      Graphics[Text[
          FontForm[" Two pure \n propellers", {"Times", 10}], {4, 
            1}]]; propswirlcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {0, 6}}]}]; propswirllabel = 
      Graphics[Text[
          FontForm[" Two\n propelling \n swirlers", {"Times", 10}], {
            2, 4}]]; pureswirlerlabel = 
      Graphics[Text[FontForm[" p\n u\n r ", {"Times", 12}], {0, 7}]]; 
    suckswirlcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {0, 6}}]}]; suckswirllabel = 
      Graphics[Text[
          FontForm["Two\n sucking\n swirlers", {"Times", 10}], {
            -2, 4}]]; negdetcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{-5, 0}, {5, 0}}]}]; negdetlabel = 
      Graphics[Text[
          FontForm["Pure sucker & pure propeller", {"Times", 10}], {
            0, -1.5}]]; pureswirlerlabel = 
      Graphics[Text[
          FontForm[
            "Two pure swirlers on the positive vertical axis", {
              "Times", 10}], {0, 6.5}]]; chart = 
      Show[cutoff, cutofflabel, pointer, twosuckercutoff, twosuckerlabel, 
        twopropcutoff, twoproplabel, propswirlcutoff, propswirllabel, 
        suckswirlcutoff, suckswirllabel, negdetcutoff, negdetlabel, 
        pureswirlerlabel, DisplayFunction -> $DisplayFunction];

Some folks even carry a copy of this chart in their wallets.
How do folks use this chart?

Here it is for a sample linear system:

\(a\  = \ \(-1.4\); 
b\  = \ 0.9; 
c\  = \ 0.4; 
d\  = \ \(-0.5\); 

    A\  = \ {{a, b}, {c, d}}; 
Clear[x, y, t]; 

    ColumnForm[Thread[{\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]}]]\)

You calculate 
        trace = a + d
and 
        determinant = a d - b c
by hand. And then you plot the resulting point 
       {trace, determinant}
on the chart:

trace = a + d; det = a d - b c; chartpointpoint = 
      Graphics[{Magenta, PointSize[0.04], Point[{trace, det}]}]; Show[chart, chartpointpoint];

This tells you that the given linear system has two pure suckers. All trajectories hustle towards {0, 0} as time goes on.

Another:

\(a\  = \ \(-1.4\); 
b\  = \ \(-3.0\); 
c\  = \ 2.1; 
d\  = \ 1.4; 

    A\  = \ {{a, b}, {c, d}}; 
Clear[x, y, t]; 

    ColumnForm[Thread[{\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]}]]\)\(trace\  = \ a\  + \ d; 
det\  = \ a\ d\  - \ b\ c; 

    chartpointpoint\  = \ 
      Graphics[{HotPink, PointSize[0.04], Point[{trace, det}]}]; 

    Show[chart, chartpointpoint]; \)

This landed on the vertical axis. And this tells you that this linear system has two pure swirlers. Solutions are sine waves.

Here is the same thing for some random linear systems:

\(a\  = \ Random[Real, {\(-2\), 2}]; 
b\  = \ Random[Real, {\(-2\), 2}]; 
    
c\  = \ Random[Real, {\(-2\), 2}]; 
d\  = \ Random[Real, {\(-2\), 2}]; 
    
A\  = \ {{a, b}, {c, d}}; 
Clear[x, y, t]; 

    ColumnForm[Thread[{\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]}]]\)\(trace\  = \ a\  + \ d; 
det\  = \ a\ d\  - \ b\ c; 

    chartpointpoint\  = \ 
      Graphics[{HotPink, PointSize[0.04], Point[{trace, det}]}]; 

    Show[chart, chartpointpoint]; 
\)

Neat cheat sheet.
Print one up and put it in your wallet.

T.3.a.ii)

Explain why the chart is correct.

Two sucking swirlers explanation:

Here are some sample points {trace, det} that plot out in the two swirling sucker region of the chart:

\(Clear[trace, k]; 

    trace[k_] := \(trace[k] = Random[Real, {\(-4\), \(-0.1\)}]\); 
    samplepoints = 
      Table[{trace[k], 
          trace[k]\^2\/4 + Random[Real, {0, 5 - trace[k]\^2\/4}]}, {k, 1, 
          100}]; samplepointplot = 
      ListPlot[samplepoints, PlotStyle -> {Banana, PointSize[0.03]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      AxesLabel -> {"trace", "det"}, 
      DisplayFunction -> $DisplayFunction]; \)

The two sucking whirlers region corresponds to the case that
         trace of A < 0,
         determinant of A > 0, and
        (((trace of A))^2) < 4 determinant of A.
Explanation:
The eigenvalues of A are
          p + I q = (1/2) (trace + (Sqrt[(trace^2) - 4 det]))
and
          p - I q = (1/2) (trace - (Sqrt[(trace^2) - 4 det])).
Because 
          det > 0
and
          (trace^2) - 4 det < 0, 
you see q is not 0. This gives you the whirl. 
Because trace < 0, you see that p < 0. This gives you the suck.

Two pure swirlers explanation:

Here are some sample points {trace, det} that plot out in the two pure swirler region of the chart:

samplepoints = Table[{0, Random[Real, {0, 6}]}, {k, 1, 10}]; 
    samplepointplot = 
      ListPlot[samplepoints, PlotStyle -> {Green, PointSize[0.04]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      AxesLabel -> {"trace", "det"}, 
      DisplayFunction -> $DisplayFunction];

The two pure swirler region corresponds to the case that
         trace of A = 0,
and 
         determinant of A > 0.
Explanation:
The eigenvalues of A are   
         p + I q = (1/2) (trace + (Sqrt[(trace^2) - 4 det])) 
and
         p - I q = (1/2) (trace - (Sqrt[(trace^2) - 4 det])).

Because 
        trace = 0,
        p + I q = (1/2) (0 + (Sqrt[0 - 4 det]))
and
        p - I q = (1/2) (0 - (Sqrt[0 - 4 det])).
And because det  >  0,
        p + I q = (1/2) (0 + 2 I (Sqrt[Abs])[det]) 
and
        p - I q = (1/2) (0 - 2 I (Sqrt[Abs])[det])
 
This gives you the swirl. Because p = 0, there is no suck or propel.

Two propelling swirlers explanation:

Here are some sample points {trace, det} that plot out in the two propelling swirlers region of the chart:

\(Clear[trace, k]; trace[k_] := \(trace[k] = Random[Real, {0.1, 4}]\); 
    samplepoints = 
      Table[{trace[k], 
          trace[k]\^2\/4 + Random[Real, {0, 5 - trace[k]\^2\/4}]}, {k, 1, 
          100}]; samplepointplot = 
      ListPlot[samplepoints, PlotStyle -> {Goldenrod, PointSize[0.03]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      AxesLabel -> {"trace", "det"}, 
      DisplayFunction -> $DisplayFunction]; \)

The two propelling whirlers region corresponds to the case that
          trace of A > 0,
          determinant of A > 0, and
         (((trace of A))^2) < 4 determinant of A.
Explanation:
The eigenvalues of A are
           p + I q = (1/2) (trace + (Sqrt[(trace^2) - 4 det])) 
and
           p - I q = (1/2) (trace - (Sqrt[(trace^2) - 4 det])).

Because 
         (trace^2) - 4 det < 0, 
you see q is not 0. This gives you the whirl. 
Because trace > 0, you see that p > 0. This gives you the propulsion.

Two pure suckers explanation:

Here are some sample points {trace, det} that plot out in the two pure sucker region of the chart:

\(Clear[trace, k]; 

    trace[k_] := \(trace[k] = Random[Real, {\(-5\), \(-0.3\)}]\); 
    samplepoints = 
      Table[{trace[k], Random[Real, {0, trace[k]\^2\/4}]}, {k, 1, 100}]; 
    samplepointplot = 
      ListPlot[samplepoints, 
        PlotStyle -> {ManganeseBlue, PointSize[0.03]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      DisplayFunction -> $DisplayFunction]; \)

The two pure suckers region corresponds to the case that
          trace of A < 0,
          determinant of A > 0, and
         (((trace of A))^2) > 4 determinant of A.
Explanation:
  
The eigenvalues of A are
         (1/2) (trace - (Sqrt[(trace^2) - 4 det])) 
and
         (1/2) (trace + (Sqrt[(trace^2) - 4 det])).

Because 
        (trace^2) - 4 det > 0, 
you see that neither eigenvalue involves I = (Sqrt[-1]). So there is no whirl.
Because det > 0, you are guaranteed that
        0 < (Sqrt[(trace^2) - 4 det]) < (Sqrt[(trace^2)]) = -trace.

This guarantees that both eigenvalues
       (1/2) (trace - (Sqrt[(trace^2) - 4 det])) < 0
       (1/2) (trace + (Sqrt[(trace^2) - 4 det])) < 0.
The upshot: Both eigenvalues are negative. And so the linear system has two pure suckers.

Two pure propellers explanation:

Here are some sample points {trace, det} that plot out in the two pure propeller region of the chart:

\(Clear[trace, k]; 
trace[k_] := \(trace[k] = Random[Real, {0.3, 5}]\); 
    samplepoints = 
      Table[{trace[k], Random[Real, {0, trace[k]\^2\/4}]}, {k, 1, 100}]; 
    samplepointplot = 
      ListPlot[samplepoints, 
        PlotStyle -> {MediumTurquoise, PointSize[0.03]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      DisplayFunction -> $DisplayFunction]; \)

The two pure propellers region corresponds to case that
          trace of A > 0,
          determinant of A > 0, and
         (((trace of A))^2) > 4 determinant of A.
Explanation:
  
The eigenvalues of A are
         (1/2) (trace - (Sqrt[(trace^2) - 4 det])) 
and
         (1/2) (trace + (Sqrt[(trace^2) - 4 det]))
        

Because 
        (trace^2) - 4 det > 0, 
you see that neither eigenvalue involves I = (Sqrt[-1]). So there is no whirl.
Because det > 0, you are guaranteed that
       0 < (Sqrt[(trace^2) - 4 det]) < (Sqrt[(trace^2)]) = trace.

This guarantees that both eigenvalues
       (1/2) (trace - (Sqrt[(trace^2) - 4 det])) > 0
       (1/2) (trace + (Sqrt[(trace^2) - 4 det])) > 0.
The upshot: Both eigenvalues are positive. And so this linear system has two pure propellers.

One pure propeller and one pure sucker explanation:

Here are some sample points {trace, det} that plot out in the the one pure propeller and one pure sucker region of the chart:

\(Clear[trace, k]; 

    trace[k_] := \(trace[k] = Random[Real, {\(-5\), 5}]\); 
    samplepoints = Table[{trace[k], Random[Real, {\(-4\), 0}]}, {k, 1, 100}]; 
    samplepointplot = 
      ListPlot[samplepoints, PlotStyle -> {WarmGray, PointSize[0.03]}, 
        DisplayFunction -> Identity]; 
    Show[samplepointplot, chart, PlotRange -> All, 
      DisplayFunction -> $DisplayFunction]; \)

The one pure propeller and one pure sucker region corresponds to the case that
          determinant of A < 0.
Explanation:
  
The eigenvalues of A are
         (1/2) (trace - (Sqrt[(trace^2) - 4 det])) 
and
         (1/2) (trace + (Sqrt[(trace^2) - 4 det])).

Because det < 0, you are gauanteed that
         (trace^2) - 4 det > 0,
so that neither eigenvalue involves I = (Sqrt[-1]). So there is no whirl.
Also because det < 0, you are guaranteed that
        (Sqrt[(trace^2) - 4 det]) > (Sqrt[(trace^2)]) = Abs[trace].
This tells you that A has one negative eigenvalue - namely
        (1/2) (trace - (Sqrt[(trace^2) - 4 det])).
This guarantees one pure sucker.
And because the other eigenvalue
        (1/2) (trace + (Sqrt[(trace^2) - 4 det]))
 is automatically positive, this guarantees one pure propeller.

T.4)  How do you pronounce the words "eigenvector" and "eigenvalue"?  
        What about the algebra behind calculating them?

T.4.a)

How do you pronounce the words "eigenvector" and "eigenvalue"?

The words "eigenvector" and "eigenvalue" are bastardized words. "Eigen" comes from German, "vector"  and "value" come from English. You pronounce "eigen" as if it were German and you pronouce "vector" and "value" as usual.
"Eigen" is pronounced I - gen with a hard g as in "garden" or "geezer," not the soft g as in "general" or "genetics." 
The German word "eigen" corresponds to the English word "own."

T.4.b.i) Calculating eigenvalues and eigenvectors.

Here is a matrix:

A = {{1.7, 0.6}, {-1.3, -3.1}}; MatrixForm[A]

Here's Mathematica's calculation of the eigenvalues of A:

Eigenvalues[A]

Here's Mathematica's calculation of the eigenvectors of A:

Eigenvectors[A]

What's the algebra behind calculating eigenvectors and eigenvalues?

Answer:

Designate the unknown eigenvector by
         {xeigenvect, yeigenvect}
and designate the eigenvalue attached to this unknown eigenvector by the name eigenval.
The algebraic relationship is
          A.{xeigenvect, yeigenvect} = eigenval {xeigenvect, yeigenvect}:

Clear[xeigvect, yeigvect, eigenval];
eigenequation = 
	A.{xeigvect, yeigvect} == eigenval {xeigvect, yeigvect};
ColumnForm[Thread[eigenequation]]

There are three unknowns here, but only two equations. 
To nail down all three unknowns, you need one more equation.  This extra equation will try to make {xeigenvect, yeigenvect} into a unit vector:

extraequation = (xeigvect^2) + (yeigvect^2) == 1

Now solve the three equations:

Solve[{eigenequation, extraequation}]

Compare:

Eigenvalues[A]

Eigenvectors[A]

Perfect.
An algebraic mess by hand, but easy by machine.
The output seems to confirm that when you go with decimal entries in A, then Mathematica spits out unit eigenvectors.

Try another:

A = {{5.22, 0.64}, {0.71, 9.59}}; MatrixForm[A]

\(Clear[xeigvect, yeigvect, eigenval]; 

    eigenequation\  = \ 
      A . {xeigvect, yeigvect}\  == \ eigenval\ {xeigvect, yeigvect}; 

    ColumnForm[Thread[eigenequation]]\)

extraequation = (xeigvect^2) + (yeigvect^2) == 1

Solve[{eigenequation, extraequation}]

Compare:

Eigenvalues[A]

Eigenvectors[A]

Pity those poor devils in outdated courses who spend a lot of their time solving for eigenvectors and eigenvalues by pencil and paper.

T.4.b.ii)

Look at this calculation of the eigenvectors and eigenvalues of this matrix:

\(A = {{3.24, 2.64}, {\(-2.84\), 4.29}}; 
MatrixForm[A]\)\(Clear[xeigvect, yeigvect, eigenval]; 

    eigenequation\  = \ 
      A . {xeigvect, yeigvect}\  == \ eigenval\ {xeigvect, yeigvect}; 

    ColumnForm[Thread[eigenequation]]\)

extraequation = (xeigvect^2) + (yeigvect^2) == 1

Solve[{eigenequation, extraequation}]

Compare:

Eigenvalues[A]

The eigenvalues check.

Eigenvectors[A]

The eigenvectors don't check.
What gives?

Answer:

Mathematica has done the algebra slightly differently than shown above.  This will happen anytime the number
       I = (Sqrt[-1]) 
pops up.  Both calculations are correct and equally reliable.

T.4.b.iii)

Should you worry about the calculation of eigenvectors and eigenvalues by hand?

Only if a professor requires you to.
Or if you enjoy self-inflicted pain. 
The cheat sheet problem above gives as easy a hand path as there is.

T.5)  When you get only one eigenvector, go with approximate formulas

T.5.a.i)

When you come across this linear system:

\(Clear[x, y, t]; 

    originalsystem\  = \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == 
          \ {1.2\ x[t], \ 1.2\ x[t]\  + \ 1.2\ y[t]})\); 

    ColumnForm[Thread[originalsystem]]\)

you immediately write down the coefficient matrix:

A = {{1.2, 0}, {1.2, 1.2}}; MatrixForm[A]

You ask Mathematica for the eigenvectors and eigenvalues of A:

Clear[eigenvector]; {eigenvector[1], eigenvector[2]} = Chop[Eigenvectors[A]]

Clear[eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]

This is a problem because the two calculated eigenvectors are in fact just one eigenvector.
Reason: They point in opposite directions.
Take a look:

\(Clear[Field, x, y]; 
Field[x_, y_] = A . {x, y}; 

    \({xlow, xhigh} = {\(-15\), 15}; \)\){ylow, yhigh} = {-15, 15}; jump = ((xhigh - xlow)/12); flowplot = 
      Table[Arrow[Field[x, y], Tail -> {x, y}, VectorColor -> Blue, 
          ScaleFactor -> 0.25, HeadSize -> 1.5], {x, xlow, xhigh, 
          jump}, {y, ylow, yhigh, jump}]; scaler = 15; sizer = 4; eigenplot = {
        Arrow[eigenvector[1], Tail -> {0, 0}, VectorColor -> Red, 
          ScaleFactor -> scaler, HeadSize -> sizer], 
        Arrow[-eigenvector[1], Tail -> {0, 0}, 
          VectorColor -> Red, ScaleFactor -> scaler, 
          HeadSize -> sizer], 
        Arrow[eigenvector[2], Tail -> {0, 0}, VectorColor -> Red, 
          ScaleFactor -> scaler, HeadSize -> sizer], 
        Arrow[-eigenvector[2], Tail -> {0, 0}, 
          VectorColor -> Red, ScaleFactor -> scaler, 
          HeadSize -> sizer]}; originalflow = 
      Show[flowplot, eigenplot, Axes -> True, 
        AxesLabel -> {"x", "y"}, PlotRange -> All, 
        PlotLabel -> "Original Flow"];

Just one eigenvector. 
But there seems to be a phantom swirler at work here.
Use the cheat sheet chart and the idea of approximation to get an idea about why this happened.

cutoff = 
      Plot[((trace^2)/4), {trace, -5, 5}, 
        PlotStyle -> {{Red, Thickness[0.01]}}, 
        AxesLabel -> {"trace", "det"}, 
        PlotRange -> {-6, 6}, DisplayFunction -> Identity]; 
    \(cutofflabel = 
      Graphics[Text[
          FontForm[
            \*""\!\(trace\^2\)- 4 det == 0"", {"Times", 10}], {3.0, 
            \(-4.0\)}]]; 

    \(pointer = 
      Arrow[{2, 1} - {3.0, \(-3.6\)}, Tail -> {3.0, \(-3.6\)}]; \)\)twosuckercutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{-5, 0}, {0, 0}}]}]; twosuckerlabel = 
      Graphics[Text[
          FontForm[" Two pure \n suckers", {"Times", 10}], {-4, 
            1}]]; twopropcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {5, 0}}]}]; twoproplabel = 
      Graphics[Text[
          FontForm[" Two pure \n propellers", {"Times", 10}], {4, 
            1}]]; propswirlcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {0, 6}}]}]; propswirllabel = 
      Graphics[Text[
          FontForm[" Two\n propelling \n swirlers", {"Times", 10}], {
            2, 4}]]; pureswirlerlabel = 
      Graphics[Text[FontForm[" p\n u\n r ", {"Times", 12}], {0, 7}]]; 
    suckswirlcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{0, 0}, {0, 6}}]}]; suckswirllabel = 
      Graphics[Text[
          FontForm["Two\n sucking\n swirlers", {"Times", 10}], {
            -2, 4}]]; negdetcutoff = 
      Graphics[{Blue, Thickness[0.01], Line[{{-5, 0}, {5, 0}}]}]; negdetlabel = 
      Graphics[Text[
          FontForm["Pure sucker & pure propeller", {"Times", 10}], {
            0, -1.5}]]; pureswirlerlabel = 
      Graphics[Text[
          FontForm[
            "Two pure swirlers on the positive vertical axis", {
              "Times", 10}], {0, 6.5}]]; chart = 
      Show[cutoff, cutofflabel, pointer, twosuckercutoff, twosuckerlabel, 
        twopropcutoff, twoproplabel, propswirlcutoff, propswirllabel, 
        suckswirlcutoff, suckswirllabel, negdetcutoff, negdetlabel, 
        pureswirlerlabel, DisplayFunction -> $DisplayFunction];

Calculate the trace and the determinant of the given coefficient matrix   A and plot {trace, det} on the chart:

\({{a, b}, {c, d}}\  = \ A; 
Clear[x, y, t]; 

    ColumnForm[Thread[{\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]}]]\)\(trace\  = \ a\  + \ d; 
det\  = \ a\ d\  - \ b\ c; 

    chartpointpoint\  = \ 
      Graphics[{Magenta, PointSize[0.04], Point[{trace, det}]}]; 

    Show[chart, chartpointpoint]; \)

Now you can see why the the flow plot came out the way it did. The given linear system is on the border between having two swirling propellers and two pure propellers. The swirl you see in the flow comes from the influence of the propelling swirlers from nearby linear systems. 
You can tweak the given linear system slightly to get a nearby linear system with two propelling swirlers.
Here's how:

tweaker = {{0, -Random[Real, {0, 0.01}]}, {0, 0}}; tweakedA = A + tweaker; MatrixForm[tweakedA]

Compare with the original coefficient matrix   A:

MatrixForm[A]

A and tweakedA are almost the same.
Compare the original system with the system resulting from tweakedA:

ColumnForm[Thread[{x'[t], y'[t]}  ==  A . {x[t], y[t]}]]ColumnForm[
      Thread[{x'[t], y'[t]}  ==  tweakedA . {x[t], y[t]}]]

The two linear systems are almost the same.
Check the eigenvalues of tweakedA:

Eigenvalues[tweakedA]

Propelling swirlers. That gives you a pretty good idea of why you saw the swirl in the original flow.

T.5.a.ii)

Stay with the same set-up as in part i). 
You are out of luck if you want to come up with formulas for trajectories for the original linear system:

\(Clear[x, y, t]; 
ColumnForm[Thread[originalsystem]]\)

Reason: The coefficient matrix for this system doesn't have two genuinely different eigenvectors.
But you can do the next best thing, you can come up with high quality approximate formulas for the trajectories.
How?

This answer should come as no surprise.
Take the tweaked linear system:

ColumnForm[
      Thread[{x'[t], y'[t]}  ==  tweakedA . {x[t], y[t]}]]

This nearby system has everything you need to calculate solution formulas:

Eigenvalues[tweakedA]Chop[Eigenvectors[tweakedA]]

If you want a high quality approximate formula for a trajectory in the original linear system starting at the sample starting point
         {x[0], y[0]}  =  {-0.2,  0.9}
you go after the formula for the solution of the tweaked system with the same starting point and plot:

\({xstarter, ystarter} = {Random[Real, {\(-2\), 2}], 
        Random[Real, {\(-2\), 2}]}; 
\(Clear[eigenvector, eigenvalue]; 
    \)\){eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[tweakedA]]; {eigenvector[1], eigenvector[2]} = Chop[Eigenvectors[tweakedA]]; 
    \(Clear[x, y, approxx, approxy, x1, y1, x2, y2, t, C1, C2]; 
    
{x1[t_], y1[t_]} = Chop[eigenvector[1]\ Exp[eigenvalue[1]\ t]]; 

    \({x2[t_], y2[t_]} = Chop[eigenvector[2]\ Exp[eigenvalue[2]\ t]]; \)\){x[t_], y[t_]} = C1 {x1[t], y1[t]} + C2 {x2[t], y2[t]}; starter = {xstarter, ystarter}; starterequation = {x[0], y[0]} == starter; Csols = Solve[starterequation]; {approxx[t_], approxy[t_]} = 
      Chop[ComplexExpand[{x[t], y[t]} /. 
            Csols[[1]]]]\(endtime = 2.5; 

    approxtrajectoryplot = 
      ParametricPlot[{approxx[t], approxy[t]}, {t, 0, endtime}, 
        PlotStyle -> {{Thickness[0.015], CadmiumOrange}}, 
        DisplayFunction -> Identity]; 

    starterplot = 
      Graphics[{Red, PointSize[0.04], Point[{xstarter, ystarter}]}]; 

    Show[approxtrajectoryplot, originalflow, starterplot, 
      PlotRange -> {{xlow - 5, xhigh + 5}, {ylow - 5, yhigh + 5}}, 
      DisplayFunction -> $DisplayFunction]; \)

These are all approximations and very good ones at that!
Reason: They  go with the flow very well.

T.5.a.iii)

Is it humanly possible to come up with exact formulas for trajectories for the original linear system above?

Yes, with great algebraic agony. 
If you're really driven to see how to do it, you can consult Boyce and DePrima's print book "Elementary Differential Equations and Boundary Value Problems," 5th Edition, Wiley, New York, 1992. Look in section 7.7.

T.5.a.iv)

But isn't an exact formula always better than an approximation?

Not necessarily.
Often approximate formulas are very much as legitimate as exact formulas.
Reason:
The constants in linear systems usually come from experimental measurements which have built-in errors.
Look at the linear system studied above:

\(Clear[x, y, t]; 

    ColumnForm[Thread[{\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]}]]\)

When you approximated this linear system with:

ColumnForm[
      Thread[{x'[t], y'[t]}  ==  tweakedA . {x[t], y[t]}]]

you went with a linear system that could have resulted from more precise measurements of the constants.

T.6) The complex exponential and Euler's formula
       (E^((p  +  I q) t)) =  
        (E^(p t)) (Cos[q t] + I Sin[q t])

T.6.a.i)

Look at these partial expansions of
         Cos[x],  Sin[x] and  (E^x)
in powers of x:

cosexpansion = Normal[Series[Cos[x], {x, 0, 8}]]

sinexpansion = Normal[Series[Sin[x], {x, 0, 8}]]

eexpansion = Normal[Series[(E^x), {x, 0, 8}]]

Notice that the terms in the expansion of 
         (E^x)
seem to have been lifted from the expansions of
         Cos[x] and Sin[x]. 
Use complex numbers to explain this phenomenom.

Activate the complex (imaginary) number I = (Sqrt[-1]):

I

(I^2)

Now replace x by (I x) in the expansion of  (E^x):

Normal[Series[(E^x), {x, 0, 10}]] /. x -> I x

Embedded in this is the expansion of Cos[x]:

Normal[Series[Cos[x], {x, 0, 10}]]

You can also see I times the expansion of Sin[x]:

Expand[I Normal[Series[Sin[x], {x, 0, 10}]]]

In fact:

k = Random[Integer, {15, 20}]; Normal[Series[(E^x), {x, 0, k}]] /. x -> I x

Normal[Series[Cos[x], {x, 0, k}]] + 
      Expand[I Normal[Series[Sin[x], {x, 0, k}]]]

T.6.a.ii)

Euler's formula
         (E^(I x)) = Cos[x] + I Sin[x]
is so basic that it is programmed into Mathematica:

\(Clear[x]; 
ComplexExpand[E\^\(I\ x\)]\)

What's the story behind this basic formula?

You have already seen the whole story. 
When you take the expansion of 
          (E^x)
in powers of x and change x to (I x), you get the expansion of 
         Cos[x]
plus I times the expansion of 
         Sin[x] 
in powers of x.
That's why the whole world agrees that
         (E^(I x)) = Cos[x] + I Sin[x].

T.6.a.iii)

For a real number x, you are pretty confident about calculating  (E^x).  
But if z = x + I y is a complex number, then how can you make sense of 
        ((E )^z) = (E^( x  +  I y))

Just write
         z = x + I y
and use normal laws of exponents:
         ((E )^z) = 
        (E^( x  +  I y)) =  
          ((E )^x) (E^(I y)) = 
            ((E )^x) (Cos[y] + I Sin[y])
So
         ((E )^(x + I y)) = ((E )^x) (Cos[y]+I Sin[y])
Not much to it.
And Mathematica agrees:

\(Clear[x, y]; 
ComplexExpand[E\^\(x + I\ y\)]\)

T.6.a.iv)

Here's a linear system:

\(A\  = \ {{\(-0.2\), \(-1.3\)}, {0.9, \ 0.4}}; 
Clear[x, y, t]; 

    linearsystem\  = \ 
\ \ \ 
      \(({\(x'\)[t], \(y'\)[t]}\  == \ A . {x[t], y[t]})\); 

    ColumnForm[Thread[linearsystem]]\)

With random starter data on {x[0], y[0]}:

{xstarter, ystarter} = {Random[Real, {-2, 2}], 
        Random[Real, {-2, 2}]}

Here's its solution formula in complex exponential notation:

Clear[eigenvector, eigenvalue]; {eigenvalue[1], eigenvalue[2]} = Chop[Eigenvalues[A]]; \({eigenvector[1], eigenvector[2]} = Chop[Eigenvectors[A]]; 


    Clear[x, y, x1, y1, x2, y2, t, C1, C2]; 
    
{x1[t_], y1[t_]} = Chop[eigenvector[1]\ Exp[eigenvalue[1]\ t]]; 

    \({x2[t_], y2[t_]} = Chop[eigenvector[2]\ Exp[eigenvalue[2]\ t]]; \)\)\({x[t_], y[t_]} = C1\ {x1[t], y1[t]} + C2\ {x2[t], y2[t]}; 


    starter = {xstarter, ystarter}; 

    \(starterequation = {x[0], y[0]} == starter; \)\)\(Csols = Solve[starterequation]; 

    
{x[t_], y[t_]} = {x[t], y[t]} /. 
        Csols[[1]]\)

How do you put this in real form showing off the sines and cosines which are embedded in this complex exponential?

Take another look at {x[t], y[t]}:

{x[t], y[t]}

Let Mathematica hit this complex formula with Euler's formula
               ((E )^(a  +  I b)) = 
        ((E )^a) Cos[b] + I ((E )^a) Sin[b]:

Chop[ComplexExpand[{x[t], y[t]}]]

There you go.

T.6.a.v)

Here's the derivative with respect to t of
          f[t] = (E^((p  +  I q) t)):

Clear[f, p, q, t];
f[t_] = (E^((p + I q) t));
f'[t]

Explain where this comes from.

Answer:

Let Mathematica hit the formula for  f[t]  = (E^((p  +  I q) t)) with Euler's formula
           ((E )^(a  +  I b)) = 
        ((E )^a) Cos[b] + I ((E )^a) Sin[b]:

ComplexExpand[f[t]]

Differentiate with respect to  t:

Expand[
      (∂_t)((E^(p t)) Cos[q t]) + 
        I (∂_t)((E^(p t)) Sin[q t])]

Compare:

ComplexExpand[(E^((p + I q) t)) (p + I q)]

This is the same as:

f'[t]