# in a pylab environment # >> execfile('demo.py') import TypeX ion() figure() I = 0.0 dt = 0.5 # plot nullclines # v nullcline null_v = lambda v,I: v - (v**3)/3 + I v = arange(-3.0,3.0,0.1) # w nullcline Params = {'a': 1.25, 'tau': 15.6} null_w = lambda v,I: Params['a']*(v+0.7) subplot(211) # non-changing plot plot(v,null_w(v,I),'g:',lw=2,label='dw/dt=0') axis([-2.5,2.5,-2.0,3.0]) # initial v,w vw = (0.0,0.0) vhist = [0.0] whist = [0.0] thist = [0.0] # v,w at next time step def iterate(vw,I): global Params,dt v = vw[0] w = vw[1] v_next = v + TypeX.dudt(v,w, I)*dt w_next = w + TypeX.dwdt(v, w, Params)*dt return (v_next,w_next) l1, = plot(v,null_v(v,I),'r:',lw=2,label='dv/dt=0',scalex=False,scaley=False) l2, = plot([vw[0]],[vw[1]],'ko',lw=2,scalex=False,scaley=False,label='v,w') tex1 = figtext(0.5,0.8,'I=%.2f' % I,size=26) legend() l4, = plot(vhist,whist,'k-',lw=1,alpha=0.5,scalex=False,scaley=False) xlabel('v') ylabel('w') subplot(212) l3, = plot(thist,vhist,'b-',scalex=False,scaley=False,lw=2) xlabel('t [ms]') ylabel('v') axis([0.0,200.0,-2.0,2.0]) for I in [0.0]*100+list(arange(0.0,0.5,0.01))+[0.5]*200: vw = iterate(vw,I) vhist.append(vw[0]) whist.append(vw[1]) thist.append(thist[-1]+dt) l2.set_data([vw[0]],[vw[1]]) l4.set_data(vhist,whist) # recalc nullcline l1.set_ydata(null_v(v,I)) tex1.set_text('I=%.2f' % I) l3.set_data(thist,vhist) draw()