Brian2学习——单个神经元模拟

单个神经元模拟

Brian2官方文档为例,先模拟一个简单的单神经元行为,其电压微分方程为:
d v d t = 1 − v τ \frac{dv}{dt} = \frac{1-v}{\tau} dtdv=τ1v
代码实现如下,设置阈值电压为0.8,复位电压为0,不应期为5ms,时间常数 τ \tau τ为10ms,具体每行代码的解释见注释。

from brian2 import *
import matplotlib.pyplot as plt

# Starts a new scope for magic functions
start_scope()

tau = 10*ms

# 方程两端的单位必须统一
# :1 表示v的单位,是国际单位
# (unless refractory)表示有不应期
eqs = '''
dv/dt = (1-v)/tau : 1 (unless refractory)
'''

# 第一个变量时神经元数量,第二个变量是微分方程
# threshold 是阈值电压,reset是复位电压,refractory是不应期时间,method是数值积分方法
G = NeuronGroup(1, eqs, threshold='v>0.8', reset='v=0', refractory=5*ms, method='exact')
# record表示距离NeuronGroup中的神经元范围,True表示全部,也可用range表示
M = StateMonitor(G, 'v', record=True)
# 脉冲监测器
spikemon = SpikeMonitor(G)

# 第0个神经元的v信号的初始值
print('Before v = %s' % G.v[0])

# 开始仿真
run(50*ms)

# 获取所有发放脉冲的时间
print('Spike times: %s' % spikemon.t[:])

# 绘制神经元电压-时间图像
plot(M.t/ms, M.v[0])
# 绘制脉冲发放时间
# ls:line style, c:color, lw: line width
for t in spikemon.t:
    axvline(t/ms, ls='--', c='C1', lw=3)
xlabel('Time (ms)')
ylabel('v')

plt.show()

得到结果如下:

在这里插入图片描述

终端输出为:

Before v = 0.0
Spike times: [16. 37.] ms
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值