Ask Your Question

Visualize vector field with singularities

asked 2012-09-29 05:36:27 -0500

sagefan gravatar image

updated 2012-09-29 09:01:07 -0500

What's the best way to plot vector fields with singularities, for example if I take

var('x1 x2')

I get the following ugly plot:


Is it possible to exclude a region around the singularities?

There are some nice mathematica plots for a similar example in the answers to this question:

edit retag flag offensive close merge delete



There is certainly room for improvement in the `plot_vector_field` function. If someone implemented a way to customize the arrows based on the properties of the underlying vector you could easily color or filter out arrows who length was larger than a given upper bound which is what is done in one of the answers on the mathematica stack exchange.

benjaminfjones gravatar imagebenjaminfjones ( 2012-09-29 12:49:47 -0500 )edit would seem relevant.

kcrisman gravatar imagekcrisman ( 2012-09-29 15:03:39 -0500 )edit

Yeah, that would do the trick. I left a comment on the ticket, maybe it'll spur someone into wrapping that mpl function :)

benjaminfjones gravatar imagebenjaminfjones ( 2012-09-30 11:33:57 -0500 )edit

2 answers

Sort by ยป oldest newest most voted

answered 2012-09-30 05:52:33 -0500

sagefan gravatar image

Just a first step:

var('x1 x2 v1 v2')

xmin = -2
xmax = 3
ymin = -2
ymax = 2

E= E1-E2

limit = 0.8
EE = (lambda x,y: norm(E(x,y)) < limit and E(x,y)[0] or 0,lambda x,y: norm(E(x,y)) < limit and E(x,y)[1] or 0)
vector_field = plot_vector_field(EE,(x1,xmin,xmax),(x2,ymin,ymax))


edit flag offensive delete link more



Yeah, massaging the data before plotting does work. It would be nice if this could be achieved in a simpler way that separates the styling and scaling of arrows from the data.

benjaminfjones gravatar imagebenjaminfjones ( 2012-09-30 11:37:18 -0500 )edit

answered 2012-09-29 08:32:55 -0500

achrzesz gravatar image
sage: maxima('E1:[x1,x2]/sqrt(x1^2+y^2)^3');         
sage: maxima('E2:subst(x1-1,x1,E1)');                
sage: maxima('E:E1-E2');                             
sage: maxima('plotdf(E,[x1,x2],[x1,-1,2],[x2,-1,1])')

Every click in the obtained vector field gives you a new trajectory

edit flag offensive delete link more


Here all arrows seem to have the same length.

sagefan gravatar imagesagefan ( 2012-09-29 09:00:27 -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

1 follower


Asked: 2012-09-29 05:36:27 -0500

Seen: 619 times

Last updated: Sep 30 '12