> OK so I can solve the equation but now I am having trouble plotting the > solution! I would like to produce a surface plot with colors defined by p and > animate it. That is plot the value of p at all x and z, over time (t). My > code to get p is below but I really have no idea how to plot this. Anyone > know the best way to go about this?
A quick search on "matplotlib surface plot" (since you're already using matplotlib) led me to http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html#surface-plots Perhaps that's something you can use? Your statement 'colors defined by p' leads more to using contour plots instead, and variants thereof: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.contourf I assume with "animate it", you just want to show every plot, continuously updating it. With matplotlib, that may be a bit slow, but you could save each figure to disk and then use some tool to put them into a movie (mpeg, wmv, animated gif, anything) if this is something you want to present to other people. Evert > thanks, > D > > -------- Original Message -------- > Subject: Re: [Tutor] Solve wave equation > Date: Thu, 23 Feb 2012 15:24:45 +0000 > From: David Craig <dcdavem...@gmail.com> > To: tutor@python.org > > Hooray it works, > thanks > > On 02/23/2012 01:39 PM, Ken Oliver wrote: > > Do you really want dt = 1**-4 or would 10**-4 be better > > > > -----Original Message----- > >> From: David Craig > <dcdavem...@gmail.com> > > >> Sent: Feb 23, 2012 7:57 AM > >> To: > tutor@python.org > > >> Subject: [Tutor] Solve wave equation > >> > >> Hi, > >> I am trying to write some code that will solve the 2D wave equation by > >> the finite difference method, but it just returns an array full of zeros > >> and NaN's. Not sure where I am going wrong, the code is attached so if > >> could someone point me in the right direction I'd appreciate this. > >> Thanks > >> D > > > > . > > > > # 2D Finite Distance Wave Equation. > from pylab import * > from numpy import math > > ion() > > # Set up variables. > nx = 100 > nz = 100 > nsteps = 300 > c = 3500 > dt = 10**-4 > h = 1 > t = arange(0,nsteps,dt) > > > > # Define source as a spike. > s = zeros(nsteps) > s[1] = 1 > s[2] = 2 > s[3] = 1 > > # Position source. > xs = 50 > zs = 50 > ##plot(t,s) > ##show() > > # Set up pressure field. > p=empty([nx,nz,nsteps]) > > for t in range(0,nsteps-1): > > for z in range(0,nz-1): > > for x in range(0,nx-1): > > p[x,z,t] = 0 > > > # Solve wave equation > > for t in range(2,nsteps-1): > > for z in range(1,nz-1): > > for x in range(2,nx-1): > > p[xs,zs,t] = s[t] > k = (c*dt/h)**2 > > p[x,z,t] = 2*p[x,z,t-1] - p[x,z,t-2] + > k*(p[x+1,z,t-1]-4*p[x,z,t-1]+p[x-1,z,t-1]+p[x,z+1,t-1]+p[x,z-1,t-1]) > > > #Plot somehow > > draw() > > #close() > > > > > > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor