Neuronal Dynamics:Two dimensions model 实验结果展示

该文展示了使用Python对Morris-Lecar和FitzHugh-Nagumo模型的仿真结果,探讨了这两个神经元模型中u和w随时间变化的图像。在不同参数设置下,模型表现出不同的动态行为,如稳定点、振荡等。通过代码实现,模拟了电生理学中的复杂动力学现象。

一、演示效果和代码

本次实验以Morris-Lecar model 和 FitzHugh-Nagumo model两种模型为例研究了模型w,u随t变化的图像。
输出结果如下(蓝色线为 d u d t = 0 \frac{du}{dt}=0 dtdu=0,绿色线为 d w d t = 0 \frac{dw}{dt}=0 dtdw=0,黑色的线为(u,w)随时间t的变化轨迹曲线):

代码如下:

import numpy as np
import matplotlib.pyplot as plt
class two_dimensions_model():
    #type=0 is Morris-Lecar model
    #type=1 is FitzHugh-Nagumo model
    def __init__(self):
        self.C=20
        self.Vl=-50
        self.V1=100
        self.V2=-70
        self.gl=2
        self.g1=4
        self.g2=8
        self.u1=0
        self.u2=15
        self.u3=10
        self.u4=10
        self.tw=0.1
        self.type=0
        self.b0=0
        self.b1=1
        self.I=0
    def m0u(self,u):
        return (1+np.tanh((u-self.u1)/self.u2))/2
    def w0u(self,u):
        return (1+np.tanh((u-self.u3)/self.u4))/2
    def tu(self,u):
        return self.tw/np.cosh((u-self.u3)/2/self.u4)
    def dudt(self,u,w):
        if self.type==0:
            return 1/self.C*(-self.g1*self.m0u(u)*(u-self.V1)-self.g2*w*(u-self.V2)-self.gl*(u-self.Vl)+self.I)
        elif self.type==1:
            return  u-u*u*u/3-w+self.I
    def dwdt(self,u,w):
        if self.type==0:
            return -(w-self.w0u(u))*self.tu(u)
        else:
            return self.b0+self.b1*u-w
    def plot_u_w_0_line(self,a,b,max_dif=0.1):
        x, y = np.meshgrid(a, b)
        x = x.T
        y = y.T
        imax = len(x)
        jmax = len(x[0])
        u = [[0 for j in range(jmax)] for i in range(imax)]
        w = [[0 for j in range(jmax)] for i in range(imax)]
        for i in range(imax):
            for j in range(jmax):
                i0 = x[i][j]
                j0 = y[i][j]
                u[i][j] = self.dudt(i0, j0)
                w[i][j] = self.dwdt(i0, j0)
        u1 = []
        w1 = []
        u2 = []
        w2 = []
        for i in range(imax):
            minu = np.min(np.abs(u[i]))
            minw = np.min(np.abs(w[i]))
            if minu < max_dif:
                j = np.where(minu == np.abs(u[i]))
                u1.append(x[i][j])
                w1.append(y[i][j])
            if minw < max_dif:
                j = np.where(minw == np.abs(w[i]))
                u2.append(x[i][j])
                w2.append(y[i][j])
        plt.plot(u1, w1, color="b")
        plt.plot(u2, w2, color="g")
    def plot_vector(self, a, b):
        x, y = np.meshgrid(a, b)
        x = x.T
        y = y.T
        imax = len(x)
        jmax = len(x[0])
        u = [[0 for j in range(jmax)] for i in range(imax)]
        w = [[0 for j in range(jmax)] for i in range(imax)]
        for i in range(imax):
            for j in range(jmax)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

for-nothing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值