(Mondal, et. al, 2019): Fractional-order FitzHugh-Rinzel bursting neuron model

Implementation of the paper:

  • Mondal, A., Sharma, S.K., Upadhyay, R.K. et al. Firing activities of a fractional-order FitzHugh-Rinzel bursting neuron model and its coupled dynamics. Sci Rep 9, 15721 (2019). https://doi.org/10.1038/s41598-019-52061-4

[1]:
import brainpy as bp

import matplotlib.pyplot as plt
[2]:
def run_model(model, inputs, length):
    runner = bp.DSRunner(model, monitors=['V'], inputs=inputs)
    runner.run(length)
    return runner

Parameter set 1

[3]:
dt = 0.1
Iext = 0.3125
duration = 4000
neuron_pars = dict(a=0.7, b=0.8, c=-0.775, d=1., delta=0.08, mu=0.0001,
                   w_initializer=bp.init.Constant(-0.1),
                   y_initializer=bp.init.Constant(0.1))
[4]:
alphas = [1.0, 0.98, 0.95]

plt.figure(figsize=(9, 10))
for i, alpha in enumerate(alphas):
    neuron = bp.neurons.FractionalFHR(1,
                                      alpha=alpha,
                                      num_memory=4000,
                                      **neuron_pars)
    runner = run_model(neuron, inputs=['input', Iext], length=duration)

    plt.subplot(len(alphas), 1, i+1)
    plt.plot(runner.mon.ts, runner.mon.V[:, 0])
    plt.title(r'$\alpha$=' + str(alphas[i]))
    plt.ylabel('V')
plt.xlabel('Time [ms]')
plt.show()
WARNING:jax._src.lib.xla_bridge:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
../_images/neurons_2019_Fractional_order_FHR_model_6_4.png

Parameter set 2

[5]:
Iext = 0.4
duration = 3500
neuron_pars = dict(a=0.7, b=0.8, c=-0.775, d=1., delta=0.08, mu=0.0001)
[6]:
alphas = [1.0, 0.92, 0.85, 0.68]

plt.figure(figsize=(12, 10))
for i, alpha in enumerate(alphas):
    neuron = bp.neurons.FractionalFHR(1,
                                      alpha=alpha,
                                      num_memory=4000,
                                      **neuron_pars)
    runner = run_model(neuron, inputs=['input', Iext], length=duration)

    plt.subplot(len(alphas), 1, i+1)
    plt.plot(runner.mon.ts, runner.mon.V[:, 0])
    plt.title(r'$\alpha$=' + str(alphas[i]))
    plt.ylabel('V')
plt.xlabel('Time [ms]')
plt.show()
../_images/neurons_2019_Fractional_order_FHR_model_9_4.png

Parameter set 3

[7]:
Iext = 3
duration = 500
neuron_pars = dict(a=0.7, b=0.8, c=-0.775, d=1., delta=0.08, mu=0.18)
[8]:
alphas = [1.0, 0.99, 0.97, 0.95]

plt.figure(figsize=(12, 10))
for i, alpha in enumerate(alphas):
    neuron = bp.neurons.FractionalFHR(1,
                                      alpha=alpha,
                                      **neuron_pars)
    runner = run_model(neuron, inputs=['input', Iext], length=duration)

    plt.subplot(len(alphas), 1, i+1)
    plt.plot(runner.mon.ts, runner.mon.V[:, 0])
    plt.title(r'$\alpha$=' + str(alphas[i]))
    plt.ylabel('V')
plt.xlabel('Time [ms]')
plt.show()
../_images/neurons_2019_Fractional_order_FHR_model_12_4.png

Parameter set 4

[9]:
Iext = 0.3125
duration = 3500
neuron_pars = dict(a=0.7, b=0.8, c=1.3, d=1., delta=0.08, mu=0.0001)
[10]:
alphas = [1.0, 0.85, 0.80]

plt.figure(figsize=(9, 10))
for i, alpha in enumerate(alphas):
    neuron = bp.neurons.FractionalFHR(1,
                                      alpha=alpha,
                                      num_memory=3000,
                                      **neuron_pars)
    runner = run_model(neuron, inputs=['input', Iext], length=duration)

    plt.subplot(len(alphas), 1, i+1)
    plt.plot(runner.mon.ts, runner.mon.V[:, 0])
    plt.title(r'$\alpha$=' + str(alphas[i]))
    plt.ylabel('V')
plt.xlabel('Time [ms]')
plt.show()
../_images/neurons_2019_Fractional_order_FHR_model_15_3.png

Parameter set 5

[11]:
Iext = 0.3125
duration = 2500
neuron_pars = dict(a=0.7, b=0.8, c=-0.908, d=1., delta=0.08, mu=0.002)
[12]:
alphas = [1.0, 0.98, 0.95]

plt.figure(figsize=(9, 10))
for i, alpha in enumerate(alphas):
    neuron = bp.neurons.FractionalFHR(1, alpha=alpha, **neuron_pars)
    runner = run_model(neuron, inputs=['input', Iext], length=duration)

    plt.subplot(len(alphas), 1, i+1)
    plt.plot(runner.mon.ts, runner.mon.V[:, 0])
    plt.title(r'$\alpha$=' + str(alphas[i]))
    plt.ylabel('V')
plt.xlabel('Time [ms]')
plt.show()
../_images/neurons_2019_Fractional_order_FHR_model_18_3.png