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

Differentialgleichungen

 

Anselm
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2009, 20:54     Titel: Differentialgleichungen
  Antworten mit Zitat      
Hallo,

ich versuche als Matlab-Neuling eine im Prinzip recht simple Differentialgleichung in Matlab umzusetzen, aber ich bekomme das nicht hin und finde keine passende Anleitung dazu. Sie hat die Form:

a(t)=k*a(t-1)

Es gibt eine Reihe von Zeitwerten. Jedem Zeitwert soll ein a-Wert zugeordnet sein, der sich aus dem vorigen a-Wert berechnet.

Zweck ist die Entwicklung von a zu berechnen und Grafisch darzustellen. Leider sind die Tutorials zu Differentialgleichungen eher auf das Lösen konzentriert und ohne Hintergrundwissen nur schwer zu verstehen. Wäre echt super wenn mir jemand einen Tipp geben könnte wie es geht, oder wo es für den Mathelaien ein Tutorium dafür gibt.

Viele Grüße
Anselm
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

das ist keine Differentialgleichung, sondern eine Differenzengleichung.

Wie wärs für den Anfang mit einer for-Schleife?

Code:
a = zeros(100,1); % vorbelegen
a(1) = 1; % Anfangswert festlegen
k = 0.99; % Parameter festlegen
for I = 2:100
a(I) = k * a(I-1);
end


Ich empfehle, einfach mal ein Tutorial durchzuarbeiten. Die Lösung für diese spezielle Aufgabe wird da nicht unbedingt drin sein, aber es sollte in dem Stadium auch mehr darum gehen, sich Konzepte zu erarbeiten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2009, 22:36     Titel:
  Antworten mit Zitat      
Vielen Dank! Das hilft mir sehr weiter. Jetzt wo ich weiß wie das ungefähr aussieht kann ich geeignete Tutorials erkennen und mir den rest hoffentlich selbst erarbeit Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Anselm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2009, 16:23     Titel:
  Antworten mit Zitat      
Ich habe folgendes gebastelt:

Code:
clear % gespeicherte Werte Löschen
b1=0.023; % Parameter festlegen
b2=0.04;
b3=0.0083;
g1=0.032;
g2=0.0013;
V=3;
K=0.048;
m=3;
alpha1=0.015;
alpha2=0.026;
tau1=30;
tau2=60;
CRH = zeros(300,1); % vorbelegen als Array + Länge
ACTH = zeros(300,1);
CORTISOL = zeros(300,1);
CRH(1) = 3.0030; % Anfangswerte festlegen
ACTH(1) = 5.3955;
CORTISOL(1) = 0.8451;


for t = 2:100
CRH(t) = CRH(t-1);
ACTH(t) = ACTH(t-1);
CORTISOL(t) = CORTISOL(t-1);
end
for t = 100:300
CRH(t) = ((alpha1*V)/(K+(CORTISOL(t-tau2))^m))-b1*CRH(t-1);
ACTH(t) = ((alpha2*V)/(K+(CORTISOL(t-tau2))^m))+g1*CRH(t-1)-b2*ACTH(t-1);
CORTISOL(t) = g2*ACTH(t-tau1)-b3*CORTISOL(t-1);
end



%Graph erzeugen
plot(CRH,'Color','red','LineWidth',1);
hold all
plot(ACTH,'Color','green','LineWidth',1);
hold all
plot(CORTISOL,'Color','blue','LineWidth',1);
title('Numerische Simulation der HPA-Achse mit den Originaldaten')
xlabel('t [min]')
ylabel('c [pmol/L]')


Das sieht mit veränderten Parametern so aus:



Die Lösung mit Hilfe von Differenzengleichungen ist leider nicht genau genug. Das Problem



sollte ungefähr so aussehen:



Ich habe relativ lange versucht die Beispiele für Differenzielgleichungen in Matlab für meine Zwecke zu modifizieren, aber die Beispiele sind für meine bescheidenen Matlab Kenntnisse zu kompliziert oder unterscheiden sich zu stark von meinem Problem und ich bekomme das nicht hin. Kann mir vielleicht jemand weiterhelfen? Kennt jemand ein gutes Tutorial das für Anfänger verständlich ist?

VieleGrüße
Anselm
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.10.2009, 17:18     Titel:
  Antworten mit Zitat      
Hallo Anselm,

gib mal

doc ode45

ein und schau dir da Beispiele 1 und 2 an. Das ist an und für sich schön erklärt. Im wesentlichen 2 Schritte:
1. Schreibe eine MATLAB-Datei, die dir die "rechte Seite" der Differenzialgleichungen als Vektor zurückgibt.
2. Verwende ode45 (oder ähnliche) mit einem der Standardaufrufe.

Wenn du spezielle Fragen dazu hast, rühr dich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 15:41     Titel:
  Antworten mit Zitat      
Ich hab das nochmal probiert und ich verstehe die Beispiele auch, aber der Unterschied zu meiner Aufgabe ist, dass in den Beispielen die Abhängigkeit der Funktionen dy(1) bis dy(3) nur zu einem Zeitpunkt besteht. Z.B.

dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

Wenn ich ein dy nicht vom aktuellen Zeitpunkt, sondern von einem vorausgegangenem Zeitpunkt verrechnen will, wie ich das in den Differenzengleichungen gemacht habe...

dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2)(t-tau);

beschwert sich Matlab: "cannot call or index into a temporary array".

Ich habe auch versucht mich drumrumzumogeln:
Code:
%HPA Funktion

function dy = HPAfunction(t,y)

b1=0.023; % Parameter festlegen
b2=0.04;
b3=0.0083;
g1=0.032;
g2=0.0013;
V=3;
K=0.048;
m=3;
alpha1=0.015;
alpha2=0.026;
tau1=30;
tau2=60;
CRH = zeros(300,1); % vorbelegen als Array + Länge
ACTH = zeros(300,1);
CORTISOL = zeros(300,1);

dy = zeros(3,1);    % a column vector

for t = 100:300
CRH(t) = ((alpha1*V)/(K+(CORTISOL(t-tau2))^m))-b1*CRH(t-1);
ACTH(t) = ((alpha2*V)/(K+(CORTISOL(t-tau2))^m))+g1*CRH(t-1)-b2*ACTH(t-1);
CORTISOL(t) = g2*ACTH(t-tau1)-b3*CORTISOL(t-1);
end



dy(1) = CRH(t);
dy(2) = ACTH(t);
dy(3) = CORTISOL(t);

-----------------------------------------------------

clear % gespeicherte Werte Löschen

[T,Y] = ode45(@HPAfunctionBU,[0 3],[3.0030 5.3955 0.8451]);


plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

 


Aber das funktioniert nicht:



Grüße
Anselm
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.10.2009, 11:25     Titel:
  Antworten mit Zitat      
Ah, da hatte ich dann nicht genau genug hingeschaut. Das ist dann eine Delay Differential Equation, und kann in MATLAB wohl am besten mit DDE23 gelöst werden. Das habe ich allerdings noch nicht ausprobiert.

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



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 - 2024 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.