# 2
#
#
# See the exercise "CardiacDynamics.pdf" from CardiacDynamics.html
# in http://www.physics.cornell.edu/~myers/teaching/ComputationalMethods/ComputerExercises/
#
#
import scipy, scipy.optimize, scipy.integrate
import pylab
#
# ----------------------------------------------------------------------
#
# (1.1) Cardiac dynamics
#
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
#
# Part (a)
#
# ----------------------------------------------------------------------
#
def V_nullcline(v):
"""
Returns the value of w(v) giving the V-nullcline of the Fitzhugh-Nagumo
equations
"""
pass
#
def W_nullcline(v, gamma, beta):
"""
Returns the value of w(v) giving the W-nullcline of the Fitzhugh-Nagumo
equations
"""
pass
#
def V_nullclineArray(v0=-2.0, v1=2.0):
"""Generate a curve in the (v,w) plane representing the V-nullcline.
Return two arrays:
the set of v points for the curve, and the set of w points.
The v points should lie between the specified arguments v0 and v1,
set by default to generate the nullcline between -2 and 2."""
pass
#
def W_nullclineArray(gamma, beta, v0=-1.5, v1=0.5):
"""Generate a curve in the (v,w) plane representing the W-nullcline.
Return two arrays:
the set of v points for the curve, and the set of w points.
The v points should lie between the specified arguments v0 and v1,
set by default to generate the nullcline between -1.5 and 0.5."""
pass
#
def PlotNullclines(gamma, beta):
"""Plot the V- and W-nullclines for specified gamma and beta.
Optionally also find the fixed point (vstar, wstar) for the
specified gamma and beta, and plot the (vstar, wstar) as a point
along with the nullclines.
Using pylab, multiple calls to pylab.plot() can be used to
plot the various curves in one figure. To plot only the
nullclines, you may want to include a call to pylab.show() in
this function, but you may want to remove it later when plotting
nullclines along with trajectories.
"""
pass
#
def FindFixedPoint(gamma, beta):
"""
Find and return the fixed point (vstar, wstar) for specified values of
gamma and beta, by finding the intersection of the V- and W-nullclines.
Use scipy.optimize.brentq to use Brent's method for finding the
root of a specified function. In this case the function is the
difference between the two nullclines:
def NullclineIntersection(v, gamma, beta):
return -
where both and are
both represented as functions of v.
Since both nullclines are functions of v, finding a root of the
function NullclineIntersection() will yield the value of vstar.
Finding wstar from vstar is trivial.
vstar = scipy.optimize.brentq(NullClineIntersection, -2, 2.,
args=(gamma,beta))
will attempt to find a root to the specified function between the
points v=-2 and v=2, using gamma and beta as additional arguments
in the evaluation of the NullclineIntersection() function
"""
pass
#
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
def dydt(y, t, eps, gamma, beta):
"""dydt(y, t, eps, gamma, beta) returns the instantaneous time
derivative of the FitzHugh-Nagumo v and w variables, as a two-element
list or scipy array, for use with the scipy odeint function"""
pass
#
def RunFitzNag(y0, t=50., eps=0.2, gamma=0.8, beta=0.7):
"""RunFitzNag(y0, t, eps, gamma, beta) integrates the FitzHugh-Nagumo
equations starting at state y0, up to time t, with parameters
eps, gamma, and beta, using the scipy.integrate.odeint function.
Return the trajectory provided by odeint."""
pass
#
def Stimulate(delta, eps=0.2, gamma=0.8, beta=0.7):
"""Stimulate(delta, eps, gamma, beta) stimulates the FitzHugh-Nagumo
model, starting at the resting state (vstar, wstar), by increasing
vstar by delta. The model should subsequently be integrated for
sufficient time to allow the resting state to be reached. Stimulate
should used pylab.plot to generate a plot of the resulting trajectory
(although not necessarily executing pylab.show() since it is
useful to plot many stimulations on the same graph).
You can use scipy.transpose or slicing to extract the list of v's and
w's from the trajectory returned by RunFitzNag: e.g.
vs = ytraj[:,0] or vs = scipy.transpose(ytraj)[0]"""
pass
#
def MultiStimulate(eps=0.2, gamma=0.8, beta=0.7):
"""Stimulate along a line delta = [0,0.01,...,1.0],
starting at (vstar + delta, wstar) with parameters eps, gamma, beta:
plot the trajectories along with the nullclines
"""
pass
#
# Copyright (C) Cornell University
# All rights reserved.
# Apache License, Version 2.0