HH Model PDE (errors)
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi I'm pretty new at MATLAB, and I'm trying to solve a system of PDEs involving the cable equation using pdepe function. However I get an error saying:
"Unable to meet integration tolerances without reducing the step size below the smallest value allowed" and that time integration failed. I was wondering if there is any way around this or if there is a way to estimate the PDEs recursively or through another method. Here is the code I have written for it:
function HH
m = 0;
x = linspace(-30,30,150);
t = linspace(0,200,50);
sol = pdepe(m,@pde_eqn,@pde_initial,@pde_bc,x,t);
V = sol(:,:,1);
%produce Figure 8.12B
figure(2)
set(gca,'fontsize',14)
hold on
plot(x, V(1,:),'k', 'linewidth', 2);
plot(x, V(50,:),'k--', 'linewidth', 2);
plot(x, V(150,:),'k:', 'linewidth', 2);
axis([0 15 -80 40])
xlabel('Position (cm)')
ylabel('Membrane voltage (mV)')
legend('t=0 msec', 't=50 msec', 't=150 msec')
str1(1) = {'B'};
text(-2.5,60,str1, 'Fontsize', 40)
end
function [c,b,s] = pde_eqn(x,t,u,DuDx)
E_Na = 52.4;
E_K = -72.1;
E_L = -49.2;
g_Na = 120;
g_K = 36;
g_L = 0.3;
c_m = 1.0;
Ri = 35;
Re = 20;
a_m = @(x)(0.1*(x+40)/(1-exp(-0.1*(x+40))));
b_m = @(x)(4*exp(-0.0556*(x+65)));
a_n = @(x)(0.01*(x+55)/(1-exp(-0.1*(x+55))));
b_n = @(x)(0.125*exp(-0.0125*(x+65)));
a_h = @(x)(0.07*exp(-0.05*(x+65)));
b_h = @(x)(1/(1+exp(-0.1*(x+35))));
c = [1;1;1;1];
b = [1/(c_m*(Ri+Re)); 0; 0; 0].*DuDx;
s = [(1/c_m)*(g_Na*u(2)^3*u(4)*(u(1)-E_Na)+g_K*u(3)^4*(u(1)-E_K)+g_L*(u(1)-E_L)); a_m(u(1))*(1-u(2))-b_m(u(1))*u(2); a_n(u(1))*(1-u(3))-b_n(u(1))*u(3); a_h(u(1))*(1-u(4))-b_h(u(1))*u(4)];
end
function value = pde_initial(x)
a_mi = @(y)(0.1*(y+40)/(1-exp(-0.1*(y+40))));
b_mi = @(y)(4*exp(-0.0556*(y+65)));
a_ni = @(y)(0.01*(y+55)/(1-exp(-0.1*(y+55))));
b_ni = @(y)(0.125*exp(-0.0125*(y+65)));
a_hi = @(y)(0.07*exp(-0.05*(y+65)));
b_hi = @(y)(1/(1+exp(-0.1*(y+35))));
value = [-65; a_mi(0)/(a_mi(0)+b_mi(0)); a_ni(0)/(a_ni(0)+b_ni(0)); a_hi(0)/(a_hi(0)+b_hi(0))];
end
function [pl, ql, pr, qr] = pde_bc(xl,ul,xr,ur,t)
pl=[0;0;0;0];
ql=[1;1;1;1];
pr=[0;0;0;0];
qr=[1;1;1;1];
end
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu PDE Solvers finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!