% % heafib.m Steve Cox, 2/1/07 % % solve the active fiber with I_A problem via sparse hybrid euler % % usage: heafibA(a,ell,N,dt,t1,t2,T,Iapp,pinc) % % a = fiber radius (cm) % ell = fiber length (cm) % N = number of compartments % dt = timestep (ms) % t1 = start of current pulse (ms) % t2 = end of current pulse (ms) % T = stopping time (ms) % Iapp = size of current pulse (micro amps) % pinc = number of time steps between plots % if pinc > 0 then 3D full % if pinc < 0 then 2D movie % % example: heafibA(.0001,.5,200,.03,1,2,10,.002,10) % function heafibA(a,ell,N,dt,t1,t2,T,Iapp,pinc) Cm = 1; % micro F / cm^2 R2 = 0.034; % k Ohm cm dx = ell/N; % patch length A = 2*pi*a*dx; % patch surface area x = dx/2:dx:ell-dx/2; % vector of patch midpoints vK = -72; % mV vA = -75; vNa = 55; % mV vCl = -17; % mV GK = 20; % mS/(cm)^2 GNa = 120; % mS/(cm)^2 GA = 47.7*(1+4*x'); GL = 0.3; % mS/(cm)^2 GK = GK/GL; GA = GA/GL; GNa = GNa/GL; tau = Cm/GL; lam2 = a/2/R2/GL; Vr = -68; e = ones(N,1); v = Vr*e; % initial conditions n = an(v(1))*e/(an(v(1))+bn(v(1))); m = am(v(1))*e/(am(v(1))+bm(v(1))); h = ah(v(1))*e/(ah(v(1))+bh(v(1))); a = ainf(v(1))*e; b = binf(v(1))*e; B = spdiags([-e 2*e -e], -1:1, N, N)/dx/dx; B(1,1) = 1/dx/dx; B(N,N) = 1/dx/dx; B = dt*lam2*B/tau; dB = diag(B); t = 0; tcnt = 0; if pinc > 0 plot3(x,t*ones(N,1),v) hold on end vcnt = 1; while (t <= T) t = t + dt; Istim = Iapp*(t>t1)*(t 0 plot3(x,t*ones(N,1),v) else plot(x,v) axis([0 ell -80 60]) hold on drawnow end end end if pinc > 0 xlabel('x (cm)','fontsize',16) ylabel('t (ms)','fontsize',16) zlabel('v (mV)','fontsize',16) end hold off return function val = an(v) val = .02*(v+45.7)./(1-exp(-(v+45.7)/10)); function val = bn(v) val = .25*exp(-0.0125*(v+55.7)); function val = am(v) val = 0.38*(v+29.7)./(1-exp(-(v+29.7)/10)); function val = bm(v) val = 15.2*exp(-0.0556*(v+54.7)); function val = ah(v) val = 0.266*exp(-0.05*(v+48)); function val = bh(v) val = 3.8./(1+exp(-(v+18)/10)); function val = ainf(v) val = 0.0761*exp(0.0314*(v+94.22))./(1+exp(0.0346*(v+1.17))); val = val.^(1/3); function val = taua(v) val = 0.3632 + 1.158./(1+exp(0.0497*(v+55.96))); function val = binf(v) val = 1./(1+exp(0.0688*(v+53.3))); val = val.^4; function val = taub(v) val = 1.24 + 2.678./(1+exp(0.0624*(v+50)));