# ExpIF#

class brainpy.dyn.ExpIF(size, sharding=None, keep_size=False, mode=None, name=None, spk_fun=InvSquareGrad(alpha=100.0), spk_dtype=None, spk_reset='soft', detach_spk=False, method='exp_auto', init_var=True, scaling=None, V_rest=-65.0, V_reset=-68.0, V_th=-55.0, V_T=-59.9, delta_T=3.48, R=1.0, tau=10.0, V_initializer=ZeroInit, noise=None)[source]#

Exponential integrate-and-fire neuron model.

Model Descriptions

In the exponential integrate-and-fire model [1], the differential equation for the membrane potential is given by

$\begin{split}\tau\frac{d V}{d t}= - (V-V_{rest}) + \Delta_T e^{\frac{V-V_T}{\Delta_T}} + RI(t), \\ \text{after} \, V(t) \gt V_{th}, V(t) = V_{reset} \, \text{last} \, \tau_{ref} \, \text{ms}\end{split}$

This equation has an exponential nonlinearity with “sharpness” parameter $$\Delta_{T}$$ and “threshold” $$\vartheta_{rh}$$.

The moment when the membrane potential reaches the numerical threshold $$V_{th}$$ defines the firing time $$t^{(f)}$$. After firing, the membrane potential is reset to $$V_{rest}$$ and integration restarts at time $$t^{(f)}+\tau_{\rm ref}$$, where $$\tau_{\rm ref}$$ is an absolute refractory time. If the numerical threshold is chosen sufficiently high, $$V_{th}\gg v+\Delta_T$$, its exact value does not play any role. The reason is that the upswing of the action potential for $$v\gg v +\Delta_{T}$$ is so rapid, that it goes to infinity in an incredibly short time. The threshold $$V_{th}$$ is introduced mainly for numerical convenience. For a formal mathematical analysis of the model, the threshold can be pushed to infinity.

The model was first introduced by Nicolas Fourcaud-Trocmé, David Hansel, Carl van Vreeswijk and Nicolas Brunel [1]. The exponential nonlinearity was later confirmed by Badel et al. [3]. It is one of the prominent examples of a precise theoretical prediction in computational neuroscience that was later confirmed by experimental neuroscience.

Two important remarks:

• (i) The right-hand side of the above equation contains a nonlinearity that can be directly extracted from experimental data [3]. In this sense the exponential nonlinearity is not an arbitrary choice but directly supported by experimental evidence.

• (ii) Even though it is a nonlinear model, it is simple enough to calculate the firing rate for constant input, and the linear response to fluctuations, even in the presence of input noise [4].

References

Examples

There is a simple usage example:

import brainpy as bp

neu = bp.dyn.ExpIF(1, )

# example for section input
inputs = bp.inputs.section_input([0., 5., 0.], [100., 300., 100.])

runner = bp.DSRunner(neu, monitors=['V'])
runner.run(inputs=inputs)

bp.visualize.line_plot(runner.mon['ts'], runner.mon['V'], show=True)


Model Parameters

 Parameter Init Value Unit Explanation V_rest -65 mV Resting potential. V_reset -68 mV Reset potential after spike. V_th -30 mV Threshold potential of spike. V_T -59.9 mV Threshold potential of generating action potential. delta_T 3.48 Spike slope factor. R 1 Membrane resistance. tau 10 Membrane time constant. Compute by R * C. tau_ref 1.7 Refractory period length.

Model Variables

 Variables name Initial Value Explanation V 0 Membrane potential. input 0 External and synaptic input current. spike False Flag to mark whether the neuron is spiking. refractory False Flag to mark whether the neuron is in refractory period. t_last_spike -1e7 Last spike time stamp.
Parameters:
update(x=None)[source]#

The function to specify the updating rule.