eshow:=proc(A)
 local fn,s,n,U,AU,NAU,con;
 with(plots):with(linalg):
 with(plottools):
 #Number of frames
 fn:=64:
 #Length of axes
 s:=1.5*max(A[1,1],A[1,2],A[2,1],A[2,2],1):
 #Sequence of unit vectors
 U:=seq(vector([cos((n-1)*2*Pi/fn), sin((n-1)*2*Pi/fn)]),n=1..fn):
 #Sequence of transformed vectors
 AU:=seq(multiply(A,U[n]),n=1..fn):
 #Sequence of norms of transformed vectors
 NAU:=seq(norm(AU[n]),n=1..fn):
 #Function to convert numbers to strings
 con:=x->convert(evalf(x,3),string):
 #Display a sequence of frames
 display(
  [seq(
  #Each frame consists of several plots
  display([
  #Plot the unit vector
  arrow([0,0],[U[n][1],U[n][2]],.03*s,.08*s,.1,color=blue),
  #Plot the transformed vector
  arrow([0,0],[AU[n][1],AU[n][2]],.03*s,.08*s,.1,color=red),
  #Plot some axes
  plot({[[-s,0],[s,0]],[[0,-s],[0,s]]},color=black),
  #Plot some text describing the vectors
  textplot([[1.1*s,.8*s,`A = matrix([[`
    .(A[1,1]).`,`.(A[1,2]).`],[`. (A[2,1]).`,`.(A[2,2]).`]])`],[1.25*s,.4*s,`u = (`.
    (con(U[n][1])).`,`.(con(U[n][2])).`)`],[1.25*s,0,`|u|=1`],[1.25*s,-.4*s,`Au = (`.
    (con(AU[n][1])).`,`.(con(AU[n][2])).`)`],[1.25*s,-.8*s,`|Au| =`.(con(NAU[n]))]],
    align=RIGHT,font=[TIMES,ROMAN,12]),
  #Plot some color blocks to key the text
  plot([[1.1*s,.4*s]],color=blue,style=point,symbol=BOX),
  plot([[1.1*s,-.4*s]],
    color=red,style=point,symbol=BOX)]),
  #Finish declaring the sequence
  n=1..fn)],
 #Options to apply to all frames
 insequence=true,view=[-s..3.5*s,-s..s],scaling=constrained,axes=none);
 end:
ÿ