HH神经元模型

1、HH神经元的电路图。
在这里插入图片描述
在这里插入图片描述

电池表示特定离子的平衡电势,电阻器反映通道对特定离子的渗透性。
电容代表的就是细胞膜,存储电荷,起到了电容的作用。
在这里插入图片描述
在这个公式中IL代表的是泄露电流,图中它的电路中就是一个电阻R和一个电源的分路,而Ik代表的是各个离子的电流,图中它所代表的电路是一个可变电阻R和一个电源,如RNa和Rk,Ic代表的通过电容器的电流,下面这个公式代表的是。
电流是指在单位时间里通过导体任一横截面的电量。

I = dq/dt = C(du/dt)
用这个公式计算瞬时电压变化。
电导g:在数值上等于电阻的倒数,导电率。
在这里引入3个门控变量,m、h、n,其中m和h控制的是Na离子的流通,而n控制的是K离子的流通。在这里,m、n、h所代表的就是某离子通道某时刻打开的概率,由不允许到允许转换的速率为αi(t),由允许到不允许状态转换的速率为βi(t),

各个门控变量的变化导数。
在这里插入图片描述

参数初始化,因为门控系数和当时的膜电势有关:
在这里插入图片描述
然后,根据门控系数和初始化的参数,求得当时电流。
在这里插入图片描述
步骤:
1、设置参数,包括平衡电势、电容、电阻、静息电位、最大电导、dt以及仿真时长
2、循环开始
更新α和β
若i为1,利用上述参数得到初始化mnh
根据mnh更新电导
计算各通道电流,得到-∑Ik(t)+I(t)
更新膜电势
根据膜电势更新mnh

HH方程python实现

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
# 参数定义 可参考
# 平衡电位
E_Na = 115.0  # [mV]
E_K = -12.0  # [mV]
E_L = 10.6  # [mV]

# 最大电导
g_Na = 120.0  # [mS]
g_K = 36.0  # [mS]
g_L = 0.3  # [mS]

dt = 0.01  # [ms]
T = 40  # [ms]

img = cv.imread('t1.png')
stimu1us1 = img[:, :, 0]
stim1 = np.array([])
for i in range(0, 2):
    stim1 = np.hstack((stim1, stimu1us1[i]))
stim1 = stim1 / 25
t = np.arange(0,len(stim1), 1) # 循环次数,时间
V = np.zeros(len(stim1))
n = np.zeros(len(stim1))
m = np.zeros(len(stim1))
h = np.zeros(len(stim1))

I_E = 0.0
V[0] = 0.0
h[0] = 0.59 # K离子通道系数
m[0] = 0.05 # Na离子通道系数
n[0] = 0.31 # Na离子通道系数

# 在10ms是注入10mA的电流,然后15ms再次置电流为0
for i in range(1, len(stim1)):  # 把上一个输出作为神经元的下一次输入
    if i == 1000:
        I_E = 10.0
    if i == 1500:
        I_E = 0.0

    # Calculate the alpha and beta functions (代码同上)
    # 计算α和β,分别代表从不允许到允许转换的速率和从允许到不允许转换的速率
    alpha_n = (0.1 - 0.01 * V[i - 1]) / (np.exp(1 - 0.1 * V[i - 1]) - 1)
    alpha_m = (2.5 - 0.1 * V[i - 1]) / (np.exp(2.5 - 0.1 * V[i - 1]) - 1)
    alpha_h = 0.07 * np.exp(-V[i - 1] / 20.0)

    beta_n = 0.125 * np.exp(-V[i - 1] / 80.0)
    beta_m = 4.0 * np.exp(-V[i - 1] / 18.0)
    beta_h = 1 / (np.exp(3 - 0.1 * V[i - 1]) + 1)

    # Calculate the time constants and steady state values
    # 打开通道的比例随时间变化
    tau_n = 1.0 / (alpha_n + beta_n)
    # 表示通道多久能打开
    inf_n = alpha_n * tau_n

    tau_m = 1.0 / (alpha_m + beta_m)
    inf_m = alpha_m * tau_m

    tau_h = 1.0 / (alpha_h + beta_h)
    inf_h = alpha_h * tau_h

    # 更新n,m,h
    n[i] = (1 - dt / tau_n) * n[i - 1] + (dt / tau_n) * inf_n
    m[i] = (1 - dt / tau_m) * m[i - 1] + (dt / tau_m) * inf_m
    h[i] = (1 - dt / tau_h) * h[i - 1] + (dt / tau_h) * inf_h

    # 公式四
    # 更新膜电位方程
    I_Na = g_Na * (m[i] ** 3) * h[i] * (V[i - 1] - E_Na)
    I_K = g_K * (n[i] ** 4) * (V[i - 1] - E_K)
    I_L = g_L * (V[i - 1] - E_L)

    # dv = -(I_Na + I_K + I_L - I_E)
    dv = stim1[i] - (I_Na + I_K + I_L)   # 变化
    V[i] = V[i - 1] + dv * dt
print(len(m))
print(m)
plt.clf()
plt.subplot(1, 3, 1)
plt.plot(t, V)
# 膜电位变化
plt.title('Membrane potential')
plt.subplot(1, 3, 2)
plt.plot(t, n)
plt.plot(t, m)
plt.plot(t, h)
plt.title('Gating variables')
plt.legend(['n', 'm', 'h'])
plt.subplot(1, 3, 3)
plt.plot(t, g_Na * h * m ** 3)
plt.plot(t, g_K * n ** 4)
plt.title('Ionic currents')
plt.legend(['Na', 'K'])
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值