Darstellung von APs < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:50 Di 13.11.2007 | Autor: | Inyd |
Wir sollen Aktionspotentiale in Abhängigkeit der Zeit t unter berücksichtigung diverser Ionenströme darstellen, ich hab, denk ich mal soweit alles richtig, bis auf die Schleife, da stimmt etwas mit der Dimension oder so nicht.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
function uebung2
clear all;
%Parameter:
dt = 0.1; %ms
tend = 50; %ms --> beliebig erweiterbar
t = 0:dt:tend; %ms
EL = -18; %mV
ENa = 55; %mV
EK = -73; %mV
EA = -75; %mV
gL = [mm] 0.003*10^3; [/mm] %mS/mm²
gNa = [mm] 1.2*10^3; [/mm] %mS/mm²
gK = [mm] 0.2*10^3; [/mm] %mS/mm²
gA = [mm] 0.477*10^3; [/mm] %mS/mm²
cm = 10; % MOhm
V(1)=EL;
[mm] [minf,taum]=asym_tau_M(V(1));
[/mm]
m(1) = minf;
[mm] [hinf,tauh]=asym_tau_H(V(1));
[/mm]
h(1) = hinf;
[mm] [ninf,taun]=asym_tau_N(V(1));
[/mm]
n(1) = ninf;
[mm] [ainf,taua]=asym_tau_A(V(1));
[/mm]
a(1) = ainf;
[mm] [binf,taub]=asym_tau_B(V(1));
[/mm]
b(1) = binf;
INa(1)=gNa*m*m*m*h*(V(1)-ENa);
IK(1)=gK*n*n*n*n*(V(1)-EK);
IA(1)=gA*a*a*a*b*(V(1)-EA);
IL(1)=gL*(V(1)-EL);
IM(1)=IL(1)+INa(1)+IK(1)+IA(1);
IE(1)= 0;
for i=2:length(t)
dv = (-IM(i-1)+IE(i-1))*dt/cm;
V(i)= V(i-1)+ dv;
[mm] [minf,taum]=asym_tau_M(V(i));
[/mm]
[mm] [hinf,tauh]=asym_tau_H(V(i));
[/mm]
[mm] [ninf,taun]=asym_tau_N(V(i));
[/mm]
[mm] [ainf,taua]=asym_tau_A(V(i));
[/mm]
[mm] [binf,taub]=asym_tau_B(V(i));
[/mm]
dm = (-minf(i-1)+m(i-1)*dt/taum);
m(i)= m(i-1)+dm;
dh = (-hinf(i-1)+h(i-1)*dt/tauh);
h(i)= h(i-1)+dh;
dn = (-ninf(i-1)+n(i-1)*dt/taun);
n(i)= n(i-1)+dn;
da = (-ainf(i-1)+a(i-1)*dt/taua);
a(i)= a(i-1)+da;
db = (-binf(i-1)+b(i-1)*dt/taub);
b(i)= b(i-1)+db;
IM(i)=(IL(i-1)+INa(i-1)+IK(i-1)+IA(i-1));
end
figure;
plot(t,IM);
hold on;
xlabel('t in ms');
ylabel('IM in nA');
title('Strom an der Elektrode');
end
die Fehlermeldung lautet:
??? Attempted to access IE(2); index out of bounds because numel(IE)=1.
Error in ==> uebung2 at 48
dv = (-IM(i-1)+IE(i-1))*dt/cm;
|
|
|
|
Hallo,
du schreibst:
> IM(i)=(IL(i-1)+INa(i-1)+IK(i-1)+IA(i-1));
aber in der Schleife werden die Werte IL, INa, IK, IA für höhere Indizes gar nicht berechnet. D.h., der erste Durchlauf geht noch gut, weil da i-1=1 ist, aber im nächsten Durchlauf ist i-1=2 und IL(2) gibt es gar nicht.
Ach ja, IE wird ja auch direkt am Anfang der Schleife benötigt.
Also musst du alle 5 fünf Werte beim jedem Durchlauf berechnen.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 18:30 Di 13.11.2007 | Autor: | Inyd |
Hab das jetz so geändert:
function uebung2
clear all;
%Parameter:
dt = 0.1; %ms
tend = 25; %ms --> beliebig erweiterbar
t = 0:dt:tend; %ms
EL = -18; %mV
ENa = 55; %mV
EK = -73; %mV
EA = -75; %mV
gL = [mm] 0.003*10^3; [/mm] %mS/mm²
gNa = [mm] 1.2*10^3; [/mm] %mS/mm²
gK = [mm] 0.2*10^3; [/mm] %mS/mm²
gA = [mm] 0.477*10^3; [/mm] %mS/mm²
cm = 10; % MOhm
V(1)=EL;
[mm] [minf,taum]=asym_tau_M(V(1));
[/mm]
m(1) = minf;
[mm] [hinf,tauh]=asym_tau_H(V(1));
[/mm]
h(1) = hinf;
[mm] [ninf,taun]=asym_tau_N(V(1));
[/mm]
n(1) = ninf;
[mm] [ainf,taua]=asym_tau_A(V(1));
[/mm]
a(1) = ainf;
[mm] [binf,taub]=asym_tau_B(V(1));
[/mm]
b(1) = binf;
INa(1)=gNa*m(1)*m(1)*m(1)*h(1)*(V(1)-ENa);
IK(1)=gK*n(1)*n(1)*n(1)*n(1)*(V(1)-EK);
IA(1)=gA*a(1)*a(1)*a(1)*b(1)*(V(1)-EA);
IL(1)=gL*(V(1)-EL);
IM(1)=IL(1)+INa(1)+IK(1)+IA(1);
IE(1)= 0;
for i=2:length(t)
IE(i-1)= 0;
dv = (-IM(i-1)+IE(i-1))*dt/cm;
V(i)= V(i-1)+ dv;
[mm] [minf,taum]=asym_tau_M(V(i));
[/mm]
[mm] [hinf,tauh]=asym_tau_H(V(i));
[/mm]
[mm] [ninf,taun]=asym_tau_N(V(i));
[/mm]
[mm] [ainf,taua]=asym_tau_A(V(i));
[/mm]
[mm] [binf,taub]=asym_tau_B(V(i));
[/mm]
dm = (-minf+m(i-1)*dt/taum);
m(i)= m(i-1)+dm;
dh = (-hinf+h(i-1)*dt/tauh);
h(i)= h(i-1)+dh;
dn = (-ninf+n(i-1)*dt/taun);
n(i)= n(i-1)+dn;
da = (-ainf+a(i-1)*dt/taua);
a(i)= a(i-1)+da;
db = (-binf+b(i-1)*dt/taub);
b(i)= b(i-1)+db;
INa(i)=gNa*m(i)*m(i)*m(i)*h(i)*(V(i)-ENa);
IK(i)=gK*n(i)*n(i)*n(i)*n(i)*(V(i)-EK);
IA(i)=gA*a(i)*a(i)*a(i)*b(i)*(V(i)-EA);
IL(i)=gL*(V(i)-EL);
IM(i)=(IL(i-1)+INa(i-1)+IK(i-1)+IA(i-1));
end
figure;
plot(t,IM);
hold on;
xlabel('t in ms');
ylabel('IM in nA');
title('Strom an der Elektrode');
end
Nun wird zwar etwas geplottet, was aber leider falsch ist. Ich bekomm nen Graphen der entlang der y-achse gegen 10 hoch 8 läuft und keine Aktionspotentiale. Hab das Gefühl, dass in der for-schleife mit den "i"s noch was nicht stimmt.
|
|
|
|
|
Hallo,
rein äußerlich sieht der Code aber ok aus. Ich sehe, wo du dich auf die Ergebnisse vom letzten Durchlauf beziehst und das Skript läuft durch.
Vielleicht schaust du nochmal, ob deine Berechnung richtig ist, denn von der Materie habe ich nicht den blassesten Schimmer...
Mehr kann ich leider nicht sagen.
Gruß
Martin
|
|
|
|