WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

exakte lösung impulsgleichung

 

ng83
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 15.05.2014, 14:09     Titel: exakte lösung impulsgleichung
  Antworten mit Zitat      
Hallo,

ich möchte die Hodgkin-huxley- Gleichung gern exakt lösen, habe bis jetzt aber nur approximative Algorithmen gesehen.

Meine Frage. Ist dies mit matlab möglich? Wie kann dies aussehen.
Ich habe leider keinen Ansatz, wie ich vorgehen soll.

Die AUsgangsgleichung lautet:

C*dv/dt=I-g(v-E)


Beim schriftlichen lösen würde ich Trennung der Variablen anwenden.

Habt ihr vllt. eine Idee, die mich weiterbringt?

Vielen lieben Dank für Eure Hilfe.

ng
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2014, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

Code:

Da die Gleichung nicht zu kompliziert ist, sollte das klappen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 19.05.2014, 07:46     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Hilfe. Lt. Mathworks gibt es ja verschiedene Möglichkeiten. Ich hätte jetzt spontan diese hier verwendet:
Code:


statt eqn wird hier einfach meine Gleichung reingeschrieben?

VG und Lieben dank.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.05.2014, 10:07     Titel:
  Antworten mit Zitat      
Hallo,

genau, aber vorher die symbolischen Variablen definieren.
Du kannst dich ja an den Beispielen in der Hilfe orientieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 19.05.2014, 21:38     Titel:
  Antworten mit Zitat      
Hallo,

hab jetzt mal probiert, bekomme es aber nicht hin.

Code:
V=-70;
m=am(V)/(am(V)+bm(V));%Init_werte der Gatevariablen
n=an(V)/(an(V)+bn(V));
h=ah(V)/(ah(V)+bh(V));

y0=[V;n;m;h];
tspan=[0,50];
ode=@(t,y)HH(t,y);
[time,V]=ode45(ode,tspan,y0);

ENa=55;%Umkehrpotential NA
EK=-72;
EL=-49;
gNabar=1.2;
gKbar=0.36;
gLbar=0.003;

I=0.1;
Cm=0.01;

V=y(1);
n=y(2);
m=y(3);
h=y(4);

gNa=gNabar*m^3*h;
gK=gKbar*n^4;
gL=gLbar;

INa=gNa*(V-ENa);
IK=gK*(V-EK);
IL=gL*(V-EL);

syms y(t);
y(t)=dsolve(diff(y)==((1/Cm)*(I-(INa+IK+IL))));

plot(t,y(t));


Dankeschön schonmal
LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.05.2014, 21:47     Titel:
  Antworten mit Zitat      
Hallo,

bitte möglichst reproduzierbaren Code liefern und sich auf das nötige beschränken, und vor allem: wenn etwas nicht funktioniert, dann sagen, was nicht funktioniert.

Du verwendest y in verschiedenen Zusammenhängen, wovon ich abraten würde.
In der DGL kommt y nur auf einer Seite und als Ableitung vor, sollte aber doch auf beiden vorkommen?
Eine Zuweisung y(t) = ... ist nicht sinnvoll, ich würde yloesung = ... verwenden.

Hier ein Beispiel mit deiner ursprünglichen DGL:
Code:
syms t I g v(t) C E
vloesung = dsolve(diff(v)== I-g*(v-E))


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 20.05.2014, 07:58     Titel:
  Antworten mit Zitat      
Hallo,

mein Code sieht folgendermaßen aus.

Code:
zeit=25;%ms
dt=0.1;
t=1:dt:zeit;

syms t I  v(t) C INa IK IL ;
vloesung = dsolve(diff(v)==((1/C)*(I-(INa+IK+IL))));
plot(t,v(t));
 


Die Fehlermeldung dazu:

Error using plot
Conversion to double from sym is not possible.

Error in odeMethode (line 40)
plot(t,v(t));

Hilft mir hier ein typecast oder wo liegt mein Fehler?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2014, 18:28     Titel:
  Antworten mit Zitat      
Hallo,

was du plotten willst, ist doch die Lösung. Also z.B.
Code:


plot arbeitet mit Double-Daten, d.h. du müsstest mit SUBS Werte einsetzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 20.05.2014, 20:09     Titel:
  Antworten mit Zitat      
Hallo Harald,
ok. mit
Code:


erhalte ich die folgende fehlermeldung:

Error using char
Cell elements must be character arrays.

Error in ezplot (line 159)
fmsg = char(f);

Error in sym/ezplot (line 46)
h = ezplot(fhandle(f));

Error in odeMethode (line 40)
ezplot(vloesung);

ich versteh es nicht, sorry. Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2014, 21:21     Titel:
  Antworten mit Zitat      
Hallo,

sorry - ich hatte das nicht vorher ausprobiert, und es kann ja auch nicht gehen:
bei mir kommt die Fehlermeldung
Zitat:
Error using sym/ezplot (line 45)
Plotting requires not more than 2 variables.

du nutzt also wohl ein älteres MATLAB?

Sinnvoll wäre also: vorher Werte für die Konstanten in der DGL definieren oder im Nachhinein welche einsetzen, so dass nur t als Variable übrig bleibt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 21.05.2014, 08:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es wie folgt gemacht:
Code:
clear all,
vloesung = dsolve('Dv=((1/C)*(I-gL*(v-EL)))','vloesung(0)=1','t'),%Dv=dv/dt
pretty(vloesung)

figure(1)
fplot('vloesung',[0 25 -70 30]),
grid on,
title('Lösung')


Ich bekomme die folgende Lösung:
EL*gL - C2*exp(-(gL*t)/C) + i)/gL , wobei C2 hier die Integrationskonstante sei.

und als Plot eine Gerade.

Ich glaube das ist es, denn die erste Ableitung entspricht ja dem ANstieg einer Geraden.

VG und herzlichen Dank für Deine Mühe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

warum denn jetzt wieder ganz anders als bisher?

Die Anfangsbedingung hat hier wohl keine Berücksichtigung gefunden (sonst wäre keine Integrationskonstante enthalten) und eine Gerade als Plot ist m.E. doch eher überraschend, da die Gleichung ja einen Exponentialterm enthält.

Vorschlag ist wie gesagt:
Zitat:
Sinnvoll wäre also: vorher Werte für die Konstanten in der DGL definieren oder im Nachhinein welche einsetzen, so dass nur t als Variable übrig bleibt.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 23.05.2014, 07:49     Titel:
  Antworten mit Zitat      
Hallo Harald,
das mit der Gerade hatte ich mir im Nachhinein auch nocheinmal überlegt. Ich war nur froh, dass es endlich funktioniert hat...probier es jetzt nochmal mit deinem Vorschlag. Es hat auch nicht mit der Vorabdefinition der Werte funktioniert...

VG Nicole
Private Nachricht senden Benutzer-Profile anzeigen
 
ng83
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 26.11.12
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 23.05.2014, 08:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

mein Code sieht wie folgt aus
Code:
clear all,
V=-70;
m=am(V)/(am(V)+bm(V));%Init_werte der Gatevariablen
n=an(V)/(an(V)+bn(V));
h=ah(V)/(ah(V)+bh(V));

ENa=55;
EK=-72;
EL=-49;
gNabar=1.2;
gKbar=0.36;
gLbar=0.003;

I=0.1;
C=0.01;

gNa=gNabar*m^3*h;
gK=gKbar*n^4;
gL=gLbar;
g=gNa+gK+gL;
E=ENa+EK+EL;

INa=gNa*(V-ENa);
IK=gK*(V-EK);
IL=gL*(V-EL);

syms t v(t)
vloesung = dsolve(diff(v)== I-gL*(v-EL))
ezplot(vloesung);


die Lösung, die Matlab ausgibt:
vloesung =

(C2*exp(-(3*t)/1000))/3 - 47/3

und als Plot wieder eine Gerade, aber keine Fehlermeldungen.
Die Matlab-Version ist R2012a.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.05.2014, 09:02     Titel:
  Antworten mit Zitat      
Hallo,

bitte der Übersichtlichkeit halber nicht benötigte Codeteile weglassen.

Es mag auf den ersten Blick aussehen wie eine Gerade, ist aber keine.
Ich würde noch die Anfangsbedingung setzen.

Code:
EL=-49;
gLbar=0.003;
I=0.1;
gL=gLbar;

syms t v(t)
vloesung = dsolve(diff(v)== I-gL*(v-EL), v(0)==1)
ezplot(vloesung, [0 10000]);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.