Neuronal Dynamics:Hodgkin-Huxley model 实验结果展示

  • 一、演示效果和代码
  • 二、模型及参数
  • 三、输出解释

一、演示效果和代码

如下代码运行完之后会在本地产生一个显示输出内容的gif文件(4s一次切换)
效果如下,gif包含一页参数图和四页不同的输入-输出图,后文会详细介绍:

import numpy as np
import time
from matplotlib import pyplot as plt
from matplotlib.pyplot import *
import matplotlib.animation
rc('font',size=16)
rc('font',family='SimHei')
plt.rcParams['axes.unicode_minus'] = False
class Hodgkin_Huxley():def __init__(self):self.urest=-65self.u=-65# self.Ena=55# self.Ek=-77# self.El=-65# self.gna=40# self.gk=35# self.gl=0.3self.Ena = 50self.Ek = -77self.El = -54.4self.gna = 120self.gk = 36self.gl = 0.3self.input=0self.C=1self.m=self.amu()/(self.amu()+self.bmu())self.h=self.ahu()/(self.ahu()+self.bhu())self.n=self.anu()/(self.anu()+self.bnu())def anu(self):vm = -self.urest+self.ureturn 0.01*(10-vm)/(np.exp(1-vm/10)-1)def amu(self):vm = -self.urest+self.ureturn 0.1*(25-vm)/(np.exp(2.5-vm/10)-1)def ahu(self):vm = -self.urest+self.ureturn 0.07*np.exp(-vm/20)def bnu(self):vm = -self.urest+self.ureturn 0.125*np.exp(-vm/80)def bmu(self):vm = -self.urest+self.ureturn 4*np.exp(-vm/18)def bhu(self):vm = -self.urest+self.ureturn 1/(1+np.exp(3-vm/10))# def anu(self):#     return 0.02*(self.u-25)/(1-np.exp(-(self.u-25)/9))# def amu(self):#     return 0.182*(self.u+35)/(1-np.exp(-(self.u+35)/9))# def ahu(self):#     return 1/(1+np.exp(-(self.u+62)/6))# def bnu(self):#     return 0.002*(self.u-25)/(1-np.exp(-(self.u-25)/9))# def bmu(self):#     return 0.124*(self.u+35)/(1-np.exp(-(self.u+35)/9))# def bhu(self):#     return 4*np.exp((self.u+90)/12)/(1+np.exp(-(self.u+62)/6))def update(self,input,dt):self.input=inputIna = self.gna*pow(self.m,3)*self.h*(self.u-self.Ena)Ik = self.gk*pow(self.n,4)*(self.u-self.Ek)Il = self.gl*(self.u-self.El)du=(self.input-Ina-Ik-Il)/self.Cdm=self.amu()*(1-self.m)-self.bmu()*self.mdh=self.ahu()*(1-self.h)-self.bhu()*self.hdn=self.anu()*(1-self.n)-self.bnu()*self.n# print('参数:',self.u,self.m,self.h,self.n)# print('参数变化1',du,dm,dh,dn)# print('电流参数2',Ina,Ik,Il)self.u +=du*dtself.m +=dm*dtself.h +=dh*dtself.n +=dn*dt
def plot_line_pic(x,y,label='u-t变化图',ylim1=0,ylim2=0):plt.plot(x, y, '--r',linewidth=1.6, markeredgecolor='k', markersize=8)title(label,fontsize=40)if ylim1!=0 or ylim2!=0:ylim(ylim1,ylim2)
def caculate_data(in_list,dt_big = 0.1,dt_small = 0.001,all_time = 50):model = Hodgkin_Huxley()u_list = []m_list = []h_list = []n_list = []t_list = []for i in range(int(all_time / dt_big)):u_list.append(model.u)m_list.append(model.m)h_list.append(model.h)n_list.append(model.n)t_list.append(i * dt_big)for j in range(int(dt_big / dt_small)):model.update(in_list[i], dt_small)plt.subplot(222)plot_line_pic(t_list, in_list,'input-t变化图',-50,300)plt.subplot(221)plot_line_pic(t_list, u_list,'u-t变化图',-100,100)plt.subplot(234)plot_line_pic(t_list, m_list,'m-t变化图',0,1)plt.subplot(235)plot_line_pic(t_list, h_list,'h-t变化图',0,1)plt.subplot(236)plot_line_pic(t_list, n_list,'n-t变化图',0,1)
if __name__ == '__main__':model = Hodgkin_Huxley()u0_list = []mu_list = []hu_list = []nu_list = []mtu_list = []htu_list = []ntu_list = []for i in range(-100,50):u0_list.append(i)model.u=imu_list.append(model.amu()/(model.amu()+model.bmu()))hu_list.append(model.ahu()/(model.ahu()+model.bhu()))nu_list.append(model.anu()/(model.anu()+model.bnu()))mtu_list.append(1/(model.amu()+model.bmu()))htu_list.append(1/(model.ahu()+model.bhu()))ntu_list.append(1/(model.anu()+model.bnu()))global figfig,ax = plt.subplots(figsize=(28,16))def update(i):if i==0:plt.subplot(111)plt.cla()plt.subplot(231)plot_line_pic(u0_list,mu_list,'m-u变化图',0,1)plt.subplot(232)plot_line_pic(u0_list,hu_list,'h-u变化图',0,1)plt.subplot(233)plot_line_pic(u0_list,nu_list,'n-u变化图',0,1)plt.subplot(234)plot_line_pic(u0_list,mtu_list,'tm-u变化图')plt.subplot(235)plot_line_pic(u0_list,htu_list,'th-u变化图')plt.subplot(236)plot_line_pic(u0_list,ntu_list,'tn-u变化图')plt.suptitle('parameters',fontsize=60)elif i==1:dt_big = 0.1all_time = 50in_list=[]for i in range(int(all_time / dt_big)):if 10<=i*dt_big and i*dt_big<=10.5:in_list.append(250)else:in_list.append(0)plt.subplot(111)plt.cla()plt.suptitle('ouput sample1',fontsize=60)caculate_data(in_list,dt_big = 0.1, dt_small = 0.001, all_time = 50)elif i==2:dt_big = 0.1all_time = 50in_list=[]for i in range(int(all_time / dt_big)):if 10<=i*dt_big and i*dt_big<=40:in_list.append(50)else:in_list.append(0)plt.subplot(111)plt.cla()plt.suptitle('ouput sample2',fontsize=60)caculate_data(in_list,dt_big = 0.1, dt_small = 0.001, all_time = 50)elif i==3:dt_big = 0.1all_time = 50in_list=[]for i in range(int(all_time / dt_big)):if 10<=i*dt_big and i*dt_big<=40:in_list.append(250)else:in_list.append(0)plt.subplot(111)plt.cla()plt.suptitle('ouput sample3',fontsize=60)caculate_data(in_list,dt_big = 0.1, dt_small = 0.001, all_time = 50)elif i==4:dt_big = 0.1all_time = 50in_list=[]for i in range(int(all_time / dt_big)):if 10<=i*dt_big and i*dt_big<=20:in_list.append(-10)else:in_list.append(0)plt.subplot(111)plt.cla()plt.suptitle('ouput sample4',fontsize=60)caculate_data(in_list,dt_big = 0.1, dt_small = 0.001, all_time = 50)ani = matplotlib.animation.FuncAnimation(fig, update, frames=5,interval=4000, repeat=True)ani.save("Hodgkin_Huxley_model.gif", writer='imgemagick')

二、模型及参数

模型核心为以下四个式子:
Cmdudt=−gNam3h(u−VNa)−gKn4(u−VK)−gL(u−VL)+I(t)C_m\frac{du}{dt}=-g_{Na}m^3h(u-V_{Na})-g_Kn^4(u-V_K)-g_L(u-V_L)+I(t)Cm​dtdu​=−gNa​m3h(u−VNa​)−gK​n4(u−VK​)−gL​(u−VL​)+I(t)

dndt=αn(u)(1−n)−β(u)n\frac{dn}{dt}=α~n~(u)(1-n)-β(u)ndtdn​=α n (u)(1−n)−β(u)n

dmdt=αm(u)(1−m)−β(u)m\frac{dm}{dt}=α~m~(u)(1-m)-β(u)mdtdm​=α m (u)(1−m)−β(u)m

dhdt=αh(u)(1−h)−β(u)h\frac{dh}{dt}=α~h~(u)(1-h)-β(u)hdtdh​=α h (u)(1−h)−β(u)h

x(u),x=m,n,k为 :αx(u)αx(u)+βx(u)\frac{α_x(u)}{α_x(u)+β_x(u)}αx​(u)+βx​(u)αx​(u)​
τx(u),x=m,n,k为: 1αx(u)+βx(u)\frac{1}{α_x(u)+β_x(u)}αx​(u)+βx​(u)1​

书上给的参数是
Cm=1μF,Urest=-65mV

x Ex[mV] gx[mS/cm2]
Na 55 40
K -77 35
L -65 0.3
x αx(u/mV)[ms-1] βx(u/mV)[ms-1]
n 0.02(u-25)/[1-e-(u-25)/9] -0.002(u-25)/[1-e-(u-25)/9]
m 0.182(u+35)/[1-e-(u+35)/9] -0.124(u+35)/[1-e-(u+35)/9]
h 1/[1+e-(u+62)/6] 4e(u+90)/12/[1+e-(u+62)/6]

但是我感觉这个参数有问题,实际带入模型算不出来,会出错(尤其是n(u)和m(u)是常数,这显然有问题)
所以我采用了网络上找到的如下参数:
Cm=1μF,Urest=-65mV,V=u-Urest

x Ex[mV] gx[mS/cm2]
Na 50 120
K -77 36
L -54.4 0.3
x αx(u/mV)[ms-1] βx(u/mV)[ms-1]
n 0.01(10-V)/[e(10-u)/10-1] 0.125e-V/80
m 0.1(25-V)/[e(25-V)/10-1] 4e-V/18
h 0.07e-V/20 1/[e(30-V)/10+1]

三、输出解释


第一张图是根据上述式子计算出的x(x=m,h,n)和tx的图像

第二张图是模拟输入是一个冲击信号的时候输出的电压u以及各个参数m,n,h的变化
图像中u随时间t先升高后降低到静息电位以下的值然后缓慢恢复,模型结果符合结论

第三张图是模拟输入是一个较大的矩形脉冲信号的时候输出的电压u以及各个参数m,n,h的变化
图像中u随时间t进行阻尼振荡,模型结果符合结论

第四张图是模拟输入是一个很大的矩形脉冲信号的时候输出的电压u以及各个参数m,n,h的变化
图像中u先产生一个动作电位,由于输入很大,没有产生振动而是维持在一个较高的水平,知道输入消失,才下降至静息电位以下缓慢恢复,模型结果符合结论

第五张图是模拟输入是一个抑制类型的矩形脉冲信号的时候输出的电压u以及各个参数m,n,h的变化
图像中u先缓慢的下降到一定值,当足够长时间的抑制输入消失的时候,反弹产生了一个动作电位,模型结果符合结论

Neuronal Dynamics:Hodgkin-Huxley model 实验结果展示相关推荐

  1. [Neuronal Dynamics 笔记] I Foundations of Neuronal Dynamics - 2 The Hodgkin-Huxley Model

    The Hodgkin-Huxley Model 1. HH模型的电路结构 (1)电容 (2)电阻 (3)电池 2. 电流注入对模型产生的影响 (1)ICI_CIC​ (2)ILI_LIL​ (3)I ...

  2. [Neuronal Dynamics 笔记] I Foundations of Neuronal Dynamics - 1 Introduction

    Introduction 1. 神经元 1.1 神经元的组成 1.2 动作电位(action potential)/脉冲(spike) 1.3 膜电位 1.4 脉冲编码* (1) 频率编码 (2) 时 ...

  3. 2020研究生数学建模B题——汽油辛烷值建模 每一问的解决思路与实验结果展示

    ----------------------2021.10.18更新------------------------------           已恢复下载,同时更新论文的 百度网盘的方式下载 链 ...

  4. 2020年7月4日 随机过程大作业

    现在我知道了神经元模型主要是两种: 一个是Hodgkin–Huxley model ,特点是逼真,但计算量较大 另外一个是leaky integrate-and-fire model ,特点是计算量小 ...

  5. 人工神经网络和卷积神经网络_神经生理学和人工神经网络

    人工神经网络和卷积神经网络 I'm not a doctor in medicine, but I'm really fascinated by biology and especially how ...

  6. 【译】OpenDaylight控制器:YANG Schema和Model

    1. Schema 定义 绑定无关数据模式(BI Data Schema)描述了模块提供的数据结构.过程和通知. 该Schema基于YANG,但是为更好地适应Java类系统并支持Controller用 ...

  7. face - Cross-lingual Language Model Pretraining ---- XLM

    跨语言预训练模型(XLM) 摘要 Shared sub-word vocabulary 跨语言模型 代码生成跨语言句子表征 文章翻译 文章链接: Cross-lingual Language Mode ...

  8. 信息大脑如何从物理大脑中涌现?

    来源:集智俱乐部 作者:田洋  审校:梁金  编辑:邓一雪  导语 我们的大脑是一个处理信息的动力学系统.数百亿个神经元时刻接受内部和外部刺激,对这些信息进行编码处理,进而形成我们对世界的认知.大脑的 ...

  9. 大脑活动与认知: 热力学与信息论的联系

    来源:集智俱乐部 作者:Guillem Collell.Jordi Fauquet 译者:张澳 审校:刘培源 编辑:邓一雪 导语 信息和能量之间的关系已经在物理学.化学和生物学中得到了广泛的研究.然而 ...

最新文章

  1. sql 插入新数据 如何处理等字符_条码打印软件之如何在条码数据插入字符而不被扫描...
  2. 【Science】CMU机器学习系主任:八个关键标准判别深度学习任务成功与否
  3. mysql5.7的资源限制策略_MySQL-5.7密码策略及用户资源限制
  4. 2.JAVA-基础语法以及String的介绍
  5. [译]Windows 登录时间太长的案例
  6. 搭建一个项目的准备工作
  7. Ubuntu 下 svn 服务器的安装配置
  8. 《软件方法》读书笔记2
  9. 2019测试学习路线图,内附完整自学路线+视频+工具
  10. DEP和ASLR的原理与破解
  11. ERP管理web后台_数字化、Axure高保真智能化工厂管理系统原型(erp生产管理、仓库管理、采购管理、设备能源管理、计划管理)
  12. 浏览器如何禁用或启用Cookie
  13. 以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。
  14. 《计算机网络》学习笔记----第七版课后习题参考答案 第三章
  15. Flutter网络请求方式总结
  16. 标准电路——蜂鸣器Beep
  17. ubuntu 安装 LiveSuit 刷机工具
  18. 案例:客户满意度的综合统计分析
  19. 如何把控工作过程中的风险?
  20. 国外也卷:(Nature)大学教职有多难拿?要名校毕业,还要家里有人

热门文章

  1. python哥德巴赫猜想证明要求其中一个素数最小_第4-4章“哥德巴赫猜想”的验证(20分),浙大,版,Python,程序设计,题目,集第...
  2. 更改SQL Server数据库名、数据库文件名、逻辑文件名的方法
  3. 计算机相关名人,探寻计算机发展史上的名人足迹
  4. river歌曲表达的意思_英文歌曲_river是什么意思_沪江英语
  5. Vue-cli 微博注册登录系统
  6. 企业微信管理系统微盛SCRM分析
  7. app自动化测试——app自动化控制、常见控件定位方法
  8. 史上最美女程序员:手写代码把人类送上月球
  9. OpenAPI EAI API
  10. Python学习笔记(八)爬虫基础(正则和编解码)