我正在尝试实施Izhikevich模型的尖峰神经元。这种神经元的公式非常简单:
v [n + 1] = 0.04 * v [n] ^ 2 + 5 * v [n] + 140 - u [n] + I
u [n + 1] = a *(b * v [n] - u [n])
其中v是膜电位,u是恢复变量。
如果 v 超过30,则重置为 c , u 重置为 u + d
鉴于这样一个简单的等式,我不会指望任何问题。但是,虽然图表应该看起来像,但我得到的只是:
我完全不知道我做错了什么,因为没有什么可错的。我已经寻找其他实现,但我正在寻找的代码总是隐藏在某个地方的DLL中。但是我很确定我正在完成作者(2)的Matlab代码正在做的事情。这是我的完整R代码:
v = -70
u = 0
a = 0.02
b = 0.2
c = -65
d = 6
history <- c()
for (i in 1:100) {
if (v >= 30) {
v = c
u = u + d
}
v = 0.04*v^2 + 5*v + 140 - u + 0
u=a*(b*v-u);
history <- c(history, v)
}
plot(history, type = "l")
对于曾经实施Izhikevich模型的人,我缺少什么?
有用的链接: (1)http://www.opensourcebrain.org/projects/izhikevichmodel/wiki (2)http://www.izhikevich.org/publications/spikes.pdf
所以事实证明我读错了公式。显然v'意味着新的v = v + 0.04 * v ^ 2 + 5 * v + 140 - u + I.我的老师会把它写成v'= 0.04 * v ^ 2 + 6 * v + 140 - u + I.我非常感谢你帮我指出这一点。
答案 0 :(得分:1)
看看下面R中实现Izhikevich模型的代码。它产生以下R图:
常规尖峰细胞:
和R代码:
# Simulation parameters
dt = 0.01 # ms
simtime = 500 # ms
t = 0
# Injection current
I = 15
delay = 100 # ms
# Model parameters (RS)
a = 0.02
b = 0.2
c = -65
d = 8
# Params for chattering cell (CH)
# c = -50
# d = 2
# Initial conditions
v = -80 # mv
u = 0
# Input current equation
current = function()
{
if(t >= delay)
{
return(I)
}
return (0)
}
# Model state equations
deltaV = function()
{
return (0.04*v*v+5*v+140-u+current())
}
deltaU = function()
{
return (a*(b*v-u))
}
updateState = function()
{
v <<- v + deltaV()*dt
u <<- u + deltaU()*dt
if(v >= 30)
{
v <<- c
u <<- u + d
}
}
# Simulation code
runsim = function()
{
steps = simtime / dt
resultT = rep(NA, steps)
resultV = rep(NA, steps)
for (i in seq(steps))
{
updateState()
t <<- dt*(i-1)
resultT[i] = t
resultV[i] = v
}
plot(resultT, resultV,
type="l", xlab = "Time (ms)", ylab = "Membrane Potential (mV)")
}
runsim()
一些注意事项: