Spike Response Model 完整代码
时间: 2023-07-03 20:31:29 浏览: 138
Spike Response Model(SRM)是一种神经元模型,可以用来模拟神经元的行为。以下是一个SRM的Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义SRM模型参数
tau_m = 10 # 膜电位时间常数
tau_s = 3 # 突触后电流时间常数
Vreset = -70 # 复位电位
Vth = -40 # 阈值电位
Vspike = 20 # 发放电位
# 定义刺激输入
T = 1000 # 模拟时间
dt = 0.1 # 时间步长
time = np.arange(0, T, dt)
I = np.zeros_like(time)
I[time < 500] = 10 # 500毫秒内有刺激输入
# 定义SRM主函数
def SRM(I):
V = np.zeros_like(time) # 膜电位
s = np.zeros_like(time) # 突触后电流
spikes = [] # 保存发放时间
for i in range(1, len(time)):
dV = (-(V[i-1]-Vreset) + s[i-1] + I[i]) / tau_m # 计算膜电位变化率
V[i] = V[i-1] + dV*dt # 更新膜电位
ds = -s[i-1] / tau_s # 计算突触后电流变化率
if V[i] >= Vth: # 判断是否发放动作电位
V[i] = Vspike # 更新膜电位为发放电位
s[i] += 1 # 发放后增加突触后电流
spikes.append(time[i]) # 保存发放时间
s[i] += ds*dt # 更新突触后电流
return V, spikes
# 运行SRM模型
V, spikes = SRM(I)
# 绘制结果
plt.figure(figsize=(8, 6))
plt.plot(time, V, label='Membrane potential')
plt.plot(spikes, np.ones_like(spikes)*Vspike, 'ro', label='Spikes')
plt.xlabel('Time (ms)')
plt.ylabel('Membrane potential (mV)')
plt.legend()
plt.show()
```
上述代码实现了一个简单的SRM模型,并根据输入的刺激产生了相应的膜电位响应。您可以修改模型参数和刺激输入来观察不同的神经元响应。
阅读全文