Matlab:我的HH模型有问题

时间:2014-07-01 19:31:25

标签: matlab model

所以,我正试图从近亲皮质的第二层制作一个锥体神经元的模型。 matlab的代码如下:

function ydot = pII(t,y)

% Definition of constants:
% Type of current order for the respective vectors: 
% [NaP, NaIS, CaL, KdrIS, Kc, Kahp, Km, Kleak, Kncm]

% Reversal Potentials:        V = y(1), m1 = y(2), h1 = y(3), m2 = y(4), 
% m3 = y(5), m4 = y(6), m5 = y(7), m6 = y(8), h6 = y(9)

ENa = 55;
EK = -75;
ECa = 80;
El = -0.075;
INCM = 0;

Erest = -60.4617;

gNaIS = 250;
gKdrIS = 25;
gNaP = 2;
gCaL = 1.5;
gKc = 1960;
%gKahp = 0.5;
gKm = 35;
gKleak = 1;
%gNCM = 26;

% NaIS
% Amx represents Alpha_m, and Bmx, Beta_m 
Am1 = 800*10^3*(0.0172 - y(1))./(exp((0.0172 - y(1))/0.004) - 1);
Bm1 = 700*10^3*(y(1) - 0.0422)./(exp((y(1) - 0.0422)/0.005) - 1);
Ah1 = 320*exp((0.042 - y(1))/0.018);
Bh1 = (10^4)./(1 + exp((0.042 - y(1))/0.05));

% KdrIS
Am2 = 30*10^3*(0.0172 - y(1))./(exp((0.0172 - y(1))/0.005) - 1);
Bm2 = 450*exp((0.012 - y(1))/0.04);

% CaL
Am3 = 1.6*(10^3)./(1 + exp(-72*(y(1) - 0.065)));
Bm3 = 20*(10^3)*(y(1) - 0.0511)./(exp((y(1) - 0.0511)/0.005) - 1);

% Kc
%if (y(1) <= 0.05)
%    Am4 = exp(53.872*y(1) - 0.66835)/0.018975;
%    Bm4 = 2000*(exp((0.0065 - y(1))/0.027)) - Am4;
%end 
%if (y(1) > 0.05)
Am4 = 2000*exp((0.0065 - y(1))/0.027); 
Bm4 = 0;
%end

% Km 
Tm5 = 1./(3.3*exp((y(1) + 0.035)/0.04) + exp(-(y(1) + 0.035)/0.02));
m5inf = 1./(1 + exp(-(y(1) + 0.035)/0.005));

% NaP
Am6 = 0.091*10^6*(y(1) + 0.038)./(1 - exp(-(y(1) + 0.038)/0.005));
Bm6 = -0.062*10^6*(y(1) + 0.038)./(1 - exp((y(1) + 0.038)/0.005));
Tm6 = 1./(Am6 + Am6);
m6inf = 1./(1 + exp(-(y(1) + 0.0487)/0.0044));

Ah6 = (-2.88*y(1)-0.0491)./(1 - exp((y(1) - 0.0491)/0.00463));
Bh6 = (6.94*y(1) + 0.447)./(1 - exp(-(y(1) + 0.447)/0.00263));
Th6 = 1./(Ah6 + Bh6);
h6inf = 1./(1 + exp((y(1) + 0.0488)/0.00998));

%Currents:
NaIS = -gNaIS*(y(2).^3).*y(3).*(y(1) - ENa);
KdrIS = -gKdrIS*(y(4).^4).*(y(1) - EK);
CaL = -gCaL*(y(5).^2).*(y(1) - ECa);
Kc = -gKc*y(6).*(y(1) - EK);
Km = -gKm*y(7).*(y(1) - EK);
NaP = -gNaP*y(8).*y(9).*(y(1) - ENa);

ydot = [NaIS+KdrIS+CaL+Kc+Km+NaP;
        (Am1.*(1 - y(2))-Bm1.*y(2));    % mdot for NaIS
        (Ah1.*(1 - y(3))-Bh1.*y(3));    % hdot for NaIS
        (Am2.*(1 - y(4))-Bm2.*y(4));    % mdot for KdrIS
        (Am3.*(1 - y(5))-Bm3.*y(5));    % mdot for CaL
        (Am4.*(1 - y(6))-Bm4.*y(6));    % mdot for Kc
        (m5inf - y(7))./Tm5;            % mdot for Km
        (m6inf - y(8))./Tm6;            % mdot for NaP
        (h6inf - y(9))./Th6 ];          % hdot for NaP

问题是当我在命令行中执行此操作时:

[t,y] = ode45(@ pII,[0 2],[ - 60.4617; 0; 1; 0; 0; 0; 0; 0; 1]);

矩阵y返回NaN值。对不起,我对matlab很新,所以我想自己学习。据我所知,NaN意味着非数值,但我无法找到错误。

[编辑]:好的,我会尝试解释一下。

神经元膜的电压由所有离子电流的总和定义,即:      NaIS+KdrIS+CaL+Kc+Km+NaP 我在上面的代码中定义的每个电流,NaIS = ......, 这些电流中的每一个都取决于代码中已经定义的一些常数(例如,EK,gNaIS),并且还取决于其他变量(y(5),y(4),......)。其他变量也是根据衍生物定义的。 ODE系统的结果应该返回我(ydot)9个变量,第一个应该是膜电位,其余应该是0到1之间的概率。 此外,方程式Amx,Bmx,Tmx,Ahx,Bhx都是依赖于膜电位y(1)的概率

0 个答案:

没有答案