Hi folks

I have implemented a model of a neuron using Hodgkin Huxley equations in
both R and MatLab. My preference is to work with R but R is not giving me
the correct results. I also can't use ode45 as it just seems to go into an
indefinite loop. However, the MatLab implementation work fine with the same
equations, parameters and initial values and ode45. Below is my R and
MatLab implementations.

I'd really appreciate any help.

R
==

rm(list=ls())

library(deSolve)

ST <-  function(time, init, parms) {
  with(as.list(c(init, parms)),{

    #functions to calculate activation m and inactivation h of the currents
    #Axon
    mNax <- function(v) 1/(1+exp(-(v+24.7)/5.29))
    taumNa <- function(v) 1.32-(1.26/(1+exp(-(v+120)/25)))
    hNax <- function(v) 1/(1+exp((v+48.9)/5.18))
    tauhNa <- function(v)
0.67/(1+exp(-(v+62.9)/10))*(1.5+(1/(1+exp((v+34.9)/3.6))));
    mKx <- function(v) 1/(1+exp(-(v+14.2)/11.8))
    taumK <- function(v) 7.2-(6.4/(1+exp(-(v+28.3)/19.2)))


    # Currents as product of maximal conducatance(g), activation(m) and
inactivation(h)
    # Driving force (v-E) where E is the reversal potential of the
particular ion

    # AB axon
    iNa_axon_AB <-
gNa_axon_AB*mNa_axon_AB^3*hNa_axon_AB*(v_axon_AB-ENa_axon_AB)
    iK_axon_AB <- gK_axon_AB*mK_axon_AB^4*(v_axon_AB-EK_axon_AB)
    iLeak_axon_AB <- gLeak_axon_AB*(v_axon_AB-ELeak_axon_AB)

    # AB Axon equations
    dv_axon_AB <- (0 -iNa_axon_AB -iK_axon_AB -iLeak_axon_AB)/C_axon_AB
    dmNa_axon_AB <- (mNax(v_axon_AB)-mNa_axon_AB)/taumNa(v_axon_AB)
    dhNa_axon_AB <- (hNax(v_axon_AB)-hNa_axon_AB)/tauhNa(v_axon_AB)
    dmK_axon_AB <- (mKx(v_axon_AB)-mK_axon_AB)/taumK(v_axon_AB)

    list(c(dv_axon_AB,dmNa_axon_AB, dhNa_axon_AB, dmK_axon_AB
))

  })}
## Set initial state
init = c(v_axon_AB=-55,mNa_axon_AB=1,hNa_axon_AB=0,mK_axon_AB=1
)
## Set parameters
# AB

gNa_axon_AB=300e-3
gK_axon_AB=52.5-3
gLeak_axon_AB=0.0018e-3

# AB Axon Reversal potentials
ENa_axon_AB=50
EK_axon_AB=-80
ELeak_axon_AB=-60

C_axon_AB=1.5e-3


I=0

parms =
c(ENa_axon_AB,EK_axon_AB,ELeak_axon_AB,gNa_axon_AB,gK_axon_AB,gLeak_axon_AB,C_axon_AB)
## Set integrations times
times = seq(from=0, to=5000, by = 0.05);

out<-ode(y=init, times=times, func=ST, parms=parms, method="lsoda")
plot(out)
o<-data.frame(out)

plot(o$v_axon_AB,type='l')


MatLab
======

File: init.m
clear all
close all
clc

global c_axon_AB ...
    gNa_axon_AB gK_axon_AB gLeak_axon_AB ...
    ENa_axon_AB EK_axon_AB ELeak_axon_AB I

T_MAX = 5000; % ms
step = 0.05;

gNa_axon_AB=300e-3;
gK_axon_AB=52.5-3;
gLeak_axon_AB=0.0018e-3;

% AB Axon Reversal potentials
ENa_axon_AB=50;
EK_axon_AB=-80;
ELeak_axon_AB=-60;

c_axon_AB=1.5e-3;

I=0;

x0 = [-55, 0, 1, 0];

simulate(T_MAX, step, x0)
% c_axon_AB, gNa_axon_AB, gK_axon_AB, gLeak_axon_AB, ENa_axon_AB,
EK_axon_AB, ELeak_axon_AB, I,



File: simulate.m
============

function[] = simulate(T_MAX, step,  x0)
%c_axon_AB, gNa_axon_AB, gK_axon_AB, gLeak_axon_AB, ENa_axon_AB,
EK_axon_AB, ELeak_axon_AB, I,
close all
clc
global c_axon_AB ...
    gNa_axon_AB gK_axon_AB gLeak_axon_AB ...
    ENa_axon_AB EK_axon_AB ELeak_axon_AB I

tspan=0:step:T_MAX;

%Sx0 = [-55, 0, 1, 0];
% x0 = [v_axon_AB mNa_axon_AB hNa_axon_AB mK_axon_AB]

[t,x] = ode45(@integrate, tspan, x0);

v_axon_AB = x(1);

vars = getVariables(t,x0);


figure
set(gcf,'numbertitle','off','name','AB - Membrane potential')
plot(t,v_axon_AB)
title('v axon')


function out = mNax(v)
out = 1/(1+exp(-(v+24.7)/5.29));

function out = taumNa(v)
out = 1.32-(1.26/(1+exp(-(v+120)/25)));

function out = hNax(v)
out = 1/(1+exp((v+48.9)/5.18));

function out = tauhNa(v)
out = 0.67/(1+exp(-(v+62.9)/10))*(1.5+(1/(1+exp((v+34.9)/3.6))));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function out = mKx(v)
out = 1/(1+exp(-(v+14.2)/11.8));

function out = taumK(v)
out = 7.2-(6.4/(1+exp(-(v+28.3)/19.2)));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function xdot = integrate(t,x)
global c_axon_AB ...
    gNa_axon_AB gK_axon_AB gLeak_axon_AB ...
    ENa_axon_AB EK_axon_AB ELeak_axon_AB I

v_axon_AB = x(1);
mNa_axon_AB = x(2);
hNa_axon_AB = x(3);
mK_axon_AB = x(4);

iNa_axon = gNa_axon_AB*mNa_axon_AB^3*hNa_axon_AB*(v_axon_AB-ENa_axon_AB);
iK_axon = gK_axon_AB*mK_axon_AB^4*(v_axon_AB-EK_axon_AB);
iLeak_axon = ELeak_axon_AB*(v_axon_AB-ELeak_axon_AB);

dv_axon_AB = (0 -iNa_axon -iK_axon -iLeak_axon)/c_axon_AB;

dmNa_axon_AB = (mNax(v_axon_AB)-mNa_axon_AB)/taumNa(v_axon_AB);
dhNa_axon_AB = (hNax(v_axon_AB)-hNa_axon_AB)/tauhNa(v_axon_AB);
dmK_axon_AB = (mKx(v_axon_AB)-mK_axon_AB)/taumK(v_axon_AB);

xdot = [dv_axon_AB dmNa_axon_AB dhNa_axon_AB dmK_axon_AB]';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function out = getVariables(t,x)
global c_axon_AB ...
    gNa_axon_AB gK_axon_AB gLeak_axon_AB ...
    ENa_axon_AB EK_axon_AB ELeak_axon_AB I


v_axon_AB = x(1);
mNa_axon_AB = x(2);
hNa_axon_AB = x(3);
mK_axon_AB = x(4);

iNa_axon =
gNa_axon_AB.*mNa_axon_AB.^3.*hNa_axon_AB.*(v_axon_AB-ENa_axon_AB);
iK_axon = gK_axon_AB.*mK_axon_AB.^4.*(v_axon_AB-EK_axon_AB);
iLeak_axon = gLeak_axon_AB.*(v_axon_AB-ELeak_axon_AB);

out = [iNa_axon iK_axon iLeak_axon ];



Regards
Jannetta

-- 

===================================
Web site: http://www.jannetta.com
Email: janne...@henning.org
===================================

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to