# Plotting the effects of a linear transformation on a grid

I am a student taking a first undergraduate course in linear algebra, and I would like to play around with plots of transformations of the type $T:\mathbb{R}^2\rightarrow\mathbb{R}^2$. I already know a bit of python, so I'm not looking for anyone to write a program for me, but I would really appreciate some tips/general outline of how to do things.

1) First I want to make a grid that I can plot, and then transform by multiplying it with a matrix. Where's the best way to start? Should I use parametric_plot, or maybe it can be done with just a list of vector([x,y])'s?

2) Second I want to run the grid through a linear transformation. If I could just plot vectors and offset them (not having them start at the origin), I would only only have to iterate over a list of vectors to get the transformed vectors, but I'm not sure if this is a smart way to do it.

Basically, is there a straight forward way to do this? It doesn't seem like it should be very difficult, if someone could give a rough outline of how to do this it would be greatly appreciated.

Thanks.

edit retag close merge delete

Sort by ยป oldest newest most voted

I would advise to work with a list of vectors and make loops as you suggested, this is a smart way. You can write a function grid(v1, v2) (plus fancy parameters) and apply it to grid(M*v1, M*v2) for some matrix M.

About Sage, i would start by:

sage: M = matrix(QQ, [[1,1],[1,0]])
sage: V = VectorSpace(QQ, 2)
sage: v1, v2 = V.basis()


So that my vectors live in a safe place (you can of course replace QQ with another field if needed, typically if you want to draw rotations using sinus and cosinus). Then, after defining a grid() function that returns a Graphics() object built as a sum of lines(), i would write:

sage: grid(v1, v2, color='blue') + grid(M*v1, M*v2, color='red')


To get something like that picture:

Do not hesitate to ask for details about the grid() function if needed.

more

I am new to sage, Can you share details about how can i implement grid function ?.

( 2014-01-22 20:15:48 -0600 )edit

You can try something like:

def grid(v1,v2,endpoints=[-5,5,-5,5], color='blue'):
G = Graphics()
for i in range(endpoints[0], endpoints[1]):
for j in range(endpoints[2], endpoints[3]):
G += line([i*v1 + j*v2, (i+1)*v1 + j*v2], color=color, aspect_ratio=1)
G += line([i*v1 + j*v2, i*v1 + (j+1)*v2], color=color, aspect_ratio=1)
return G


and then use as:

grid(vector([0,1]),vector([1,0]))

( 2014-12-13 12:12:36 -0600 )edit