% % heafib.m Steve Cox, 2/1/07 % % solve the active fiber problem via sparse hybrid euler % % usage: heafib(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: heafib(.0001,.5,200,.01,1,2,15,.001,-20) % function heafib(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 = -6; % mV vNa = 127; % mV vCl = 3; % mV GK = 36; % mS/(cm)^2 GNa = 40; % mS/(cm)^2 GL = 0.3; % mS/(cm)^2 GK = GK/GL; GNa = GNa/GL; tau = Cm/GL; lam2 = a/2/R2/GL; e = ones(N,1); v = 0*e; % initial conditions n = 0.3177*e; m = 0.0529*e; h = 0.5961*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 -10 100]) 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 = .01*(10-v)./(exp(1-v/10)-1); function val = bn(v) val = .125*exp(-v/80); function val = am(v) val = .1*(25-v)./(exp(2.5-v/10)-1); function val = bm(v) val = 4*exp(-v/18); function val = ah(v) val = 0.07*exp(-v/20); function val = bh(v) val = 1./(exp(3-v/10)+1);