Ask Your Question

Plotting the effects of a linear transformation on a grid

asked 2013-11-03 02:13:24 -0500

J.Abe. gravatar image

updated 2013-11-03 02:18:16 -0500

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.


edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2013-11-03 02:45:59 -0500

tmonteil gravatar image

updated 2013-11-03 03:08:01 -0500

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.

edit flag offensive delete link more


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

sairahul gravatar imagesairahul ( 2014-01-22 20:15:48 -0500 )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:

tmonteil gravatar imagetmonteil ( 2014-12-13 12:12:36 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2013-11-03 02:13:24 -0500

Seen: 397 times

Last updated: Nov 03 '13