ArrowHead[top_,bot_,len_,wid_] := Module[{x1,x2,u1,u2,nm,e1,e2,f1,f2},
    x1=First[top] ; x2 = Last[top] ; u1=First[bot]; u2=Last[bot];
    nm=Sqrt[(x1-u1)^2 + (x2-u2)^2] ; e1=(x1-u1)/nm; e2=(x2-u2)/nm; f1=-e2; f2=e1;  
    Polygon[{{x1,x2},{x1 - len e1 + (wid/2) f1, x2 - len e2 + (wid/2) f2},
                     {x1 - len e1 - (wid/2) f1, x2 - len e2 - (wid/2) f2}}]]; 
Arrow[pnt_,vec_,hdsize_]:={Line[{pnt,pnt+vec}],ArrowHead[pnt+vec,pnt,hdsize,hdsize/1.5]}; 

VectorField[expr_,xdom_,ydom_,hdsize_,scale_] :=
  Table[Arrow[{First[xdom],First[ydom]}, scale expr, hdsize ], xdom, ydom]; 
PhasePortrait[A_] := Show[Graphics[ VectorField[A.{x,y},
  {x,-2,2,0.5},{y,-2,2,0.5},0.07,0.10]],Frame->True, FrameTicks->None,AspectRatio->1];

HyperbolicA:=PhasePortrait[{{-2,0},{0,-3}}]; 
HyperbolicB:=PhasePortrait[{{-2,0},{0, 3}}]; 
HyperbolicC:=PhasePortrait[{{ 2,0},{0, 3}}];
HyperbolicD:=PhasePortrait[{{ 2,1},{0, 2}}]; 

PParabolicA:=PhasePortrait[{{ 0,0},{0,-2}}]; 
PParabolicB:=PhasePortrait[{{ 0,0},{0, 2}}]; 

Parabolic  :=PhasePortrait[{{ 0,0},{1, 0}}]; 

EllipticA  :=PhasePortrait[{{ -2,1},{-1,-1}}]; 
EllipticB  :=PhasePortrait[{{ 1,1},{-1,1}}]; 
EllipticC  :=PhasePortrait[{{ 0,1},{-1,0}}]; 

Show[GraphicsArray[{{ HyperbolicA, HyperbolicB, HyperbolicC},
               { PParabolicA, PParabolicB, Parabolic},
               { EllipticA  , EllipticB  , EllipticC}}] ]; 
