www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Maple" - Differentialgleichungssystem
Differentialgleichungssystem < Maple < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Differentialgleichungssystem: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 00:29 Mi 08.10.2008
Autor: ElBarto

Aufgabe
Für jede der beteiligten sechs Reagenzien A, B, D, E, X, Y ergibt sich eine Differentialgleichung
A'(t) = -k1*A(t)
B'(t) = -k2*B(t) * X(t)
D'(t) = -k2*B(t)*X(t)
E'(t) = k3*X(t)
X'(t) = k1*A(t)-k2*B(t)*X(t)-k3*X(t)+k4*X(t)²*Y(t)
Y'(t) = k2*B(t)*X(t)-k4*X(t)²*Y(t)
Dabei sind ki (i=1,2,3,4) chemische Reaktionskonstanten. Dieses System wird Brüsselator genannt.

Lösen Sie mit Hilfe des Euler-Verfahrens das Differentialgleichungssystem und stellen Sie die Zeitabhängigkeiten der Reagenzien E, X, Y sowie das X-Y-Phasendiagramm dar.
Parameter: k1 = 0.0015, k3 = 0.00049, k3 = 0.877, k4 = 10
Anfangsbedingungen: A(0) = 60, B(0) = 5000, D(0) = 0, E(0) = 0, X(0) = 0, Y(0) = 0
Schrittweite: [mm] \Delta [/mm] t = 0.001
Zeitintervall: [mm] 0\le [/mm] t [mm] \le [/mm] 640

Hallo,
ich komme mit den vielen Gleichungen nicht klar. Eine Prozedur zum Lösen eines Differentialgleichungssystem mit zwei Gleichungen habe ich schon zu Stande bekommen:
Euler:=proc(f1,f2,x0,y10,y20,xe,h,auswahl,ausgabe)
local k0,g0,x,y1,y2,i,p:
x:=x0: y1:=y10: y2:=y20: i:=0:
if ausgabe=1 then printf("x=%f  y1=%f  y2=%f [mm] \n",x,y1,y2): [/mm] end if:
if auswahl=1 then p[i]:=[x,y1]: end if:
if auswahl=2 then p[i]:=[x,y2]: end if:
while (xe-x)>h do
    k0:=h*f1(x,y1,y2):
    g0:=h*f2(x,y1,y2):
    x:=x+h: i:=i+1:
    y1:=y1+k0:
    y2:=y2+g0:
  if ausgabe=1 then printf("x=%f  y1=%f  y2=%f  [mm] \n",x,y1,y2): [/mm] end if:
  if auswahl=1 then p[i]:=[x,y1]: end if:
  if auswahl=2 then p[i]:=[x,y2]: end if:
end do:
return(convert(p,list)):
end proc:

Vielleicht hat wer von euch eine Idee was ich ändern muss um mehrere Gleichungen zu lösen. Einfach analog alles auf sechs Gleichungen anpassen? Da kam bei mir dann nur Murks raus, außerdem sieht der Quellcode dann reichlich merkwürdig aus. Da muss es doch ne elegante Lösung für geben oder?
Na ja ich hoffe sehr, dass einer von euch mir weiterhelfen kann. Ich hab schon leichte Kopfschmerzen bekommen vom vielen Brainstorming und werde mich jetzt deswegen ins Bett zurückziehen.
In diesem Sinne: Gute Nacht!

Gruß Simon

P.S. Bei Verständnisschwierigkeiten oder so, bitte einfach nochmal nachfragen.

        
Bezug
Differentialgleichungssystem: Tipp
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 09:17 Mi 08.10.2008
Autor: zahllos

Hallo,

schreibe eine Funktion die dir zum aktuellen Zustandsvektor A, B,...,Y
die Ableitung A',B',...,Y' liefert. Im Prinzip sieht der Code dieser
Funktion so aus wie deine sechs Differentialgleichungen. Dann kannst du das Eulerverfahren für ein DGL-System ein so darstellen: Zu aktuellen Zustand (den nenne ich mal Z, ein Vektor mit sechs Komponenten) berechnest du die Ableitung Z' und integrierst über die Zeit:
Z(t+h) = Z(t) + h Z'(t)
Auf diese Weise kannst du leicht andere DGL-Systeme lösen (du musst nur die Funktion anpassen), oder ein anderes Integrationsverfahren verwenden ( dann steht an Stelle von h Z' ein komplizierterer Ausdruck).


Bezug
        
Bezug
Differentialgleichungssystem: Programmskizze
Status: (Antwort) fertig Status 
Datum: 17:06 Mi 08.10.2008
Autor: Al-Chwarizmi

hallo ElBarto,

Das Diffgleichungssystem ist eigentlich schon sehr schön
vorbereitet, um es mit dem Eulerverfahren zu behandeln.
Ich möchte hier nur skizzenhaft das Programm bzw. die
Prozedur beschreiben:

Konstanten definieren:
  k1:=0.0015 ......  k4:=10  
  tmin:=0 :  tmax:= 640 : dt:=0.001

Anfangsbedingungen festlegen:
  t:=tmin : A:=60 ...... Y:=0

While t<tmax do
  Zeichnen:      {Prozeduraufruf:  die Prozedur "Zeichnen" soll die
                  zu zeichnenden Graphen um je ein kleines Stück
                  ergänzen}

  dA:=-k1*A*dt
  dB:=-k2*B*X*dt
  .....
  .....
  [mm] dY:=(k2*B*X-k4*X^2*Y)*dt [/mm]

  
  t:=t+dt

  A:=A+dA
  B:=B+dB
  .....
  .....
  Y:=Y+dY

end do


Falls du die berechneten Daten nicht nur grafisch ausgeben,
sondern auch in Tabellenform festhalten willst, kannst du
dies z.B. in einem Aufwasch mit der zu erstellenden Prozedur
"Zeichnen" tun.

LG

Al Chwarizmi
  

Bezug
        
Bezug
Differentialgleichungssystem: Antwort
Status: (Antwort) fertig Status 
Datum: 18:28 Mi 08.10.2008
Autor: Al-Chwarizmi

Ich habe versucht die Idee zu realisieren. Beiliegend das
Produkt meiner Bemühungen (in Top-Pascal). Es scheint
zu funktionieren, es zeigen sich Oszillationen.
Trotzdem noch eine Frage zu den Gleichungen:
Die Grösse D scheint identisch mit B und damit überflüssig
zu sein. Könntest du die ganzen Gleichungen und
Konstanten nochmals genau überprüfen ?

Nebenbei würde ich noch gerne erfahren, welche chemischen
Reaktionen (mit welchen Reagenzien) hier genau modelliert werden.

Gruß

Al Chwarizmi

[a]Datei-Anhang

Dateianhänge:
Anhang Nr. 1 (Typ: doc) [nicht öffentlich]
Bezug
                
Bezug
Differentialgleichungssystem: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:27 Do 09.10.2008
Autor: ElBarto

Vielen Dank erstmal für die Reaktionen. Kann mich leider erst nächste Woche wieder intensiv damit beschäftigen, dann werde ich auch auf den näheren chemischen Zusammenhang eingehen.

Gruß Simon

Bezug
                
Bezug
Differentialgleichungssystem: Float(undefined)?
Status: (Frage) beantwortet Status 
Datum: 12:45 Fr 17.10.2008
Autor: ElBarto

Aufgabe
siehe Ausgangspost

Hallo,
erstmal noch einmal vielen Dank für eure Antworten. Ich hab es jetzt dann doch irgendwie geschafft reproduzierbare Ergebnisse zu bekommen. Allerdings bekomme ich nur für Werte bis x=1 Ergebnisse, danach steht bei den jeweiligen y-Werte immer "Float(undefined)".
Hier ist mein Quelltext:

> f1:=(x,y1,y2,y3,y4,y5,y6)->k1*y1; f2:=(x,y1,y2,y3,y4,y5,y6)->k2*y2*y5; f3:=(x,y1,y2,y3,y4,y5,y6)->k2*y2*y5; f4:=(x,y1,y2,y3,y4,y5,y6)->-k3*y5; [mm] f5:=(x,y1,y2,y3,y4,y5,y6)->-k1*y1+k2*y2*y5+k3*y5-k4*y5^2*y6; f6:=(x,y1,y2,y3,y4,y5,y6)->-k2*y2*y5+k4*y5^2*y6; [/mm]

  

> Euler:=proc(f1,f2,f3,f4,f5,f6,x00,y10,y20,y30,y40,y50,y60,xe,h,auswahl,ausgabe)

local a0,b0,c0,e0,x0,y0,x,y1,y2,y3,y4,y5,y6,i,p:
x:=x00: y1:=y10: y2:=y20: y3:=y30: y4:=y40: y5:=y50: y6:=y60: i:=0:
if ausgabe=1 then printf("x=%f  y1=%f  y2=%f y3=%f y4=%f y5=%f y6=%f [mm] \n",x,y1,y2,y3,y4,y5,y6): [/mm] end if:
if auswahl=1 then p[i]:=[x,y1]: end if:
if auswahl=2 then p[i]:=[x,y2]: end if:
if auswahl=3 then p[i]:=[x,y3]: end if:
if auswahl=4 then p[i]:=[x,y4]: end if:
if auswahl=5 then p[i]:=[x,y5]: end if:
if auswahl=6 then p[i]:=[x,y6]: end if:
while (xe-x)>h do
     a0:=h*f1(x,y1,y2,y3,y4,y5,y6):
     b0:=h*f2(x,y1,y2,y3,y4,y5,y6):
     c0:=h*f3(x,y1,y2,y3,y4,y5,y6):
     e0:=h*f4(x,y1,y2,y3,y4,y5,y6):
     x0:=h*f5(x,y1,y2,y3,y4,y5,y6):
     y0:=h*f6(x,y1,y2,y3,y4,y5,y6):
     x:=x+h: i:=i+1:
     y1:=y1+a0:
     y2:=y2+b0:
     y3:=y3+c0:
     y4:=y4+e0:
     y5:=y5+x0:
     y6:=y6+y0:
   if ausgabe=1 then printf("x=%f  y1=%f  y2=%f y3=%f y4=%f y5=%f y6=%f [mm] \n",x,y1,y2,y3,y4,y5,y6): [/mm] end if:
   if auswahl=1 then p[i]:=[x,y1]: end if:
   if auswahl=2 then p[i]:=[x,y2]: end if:
   if auswahl=3 then p[i]:=[x,y3]: end if:
   if auswahl=4 then p[i]:=[x,y4]: end if:
   if auswahl=5 then p[i]:=[x,y5]: end if:
   if auswahl=6 then p[i]:=[x,y6]: end if:
end do:
return(convert(p,list)):
end proc:

Vielleicht sieht ja wer von euch wo der Fehler sein könnte.
Finde es auch seltsam, dass ich mir von Maple über eine halbe Million Werte ausgeben lassen soll, das dauert doch ewig bis der alle berechnet hat (wegen einem Zeitbereich von 0 [mm] \le [/mm] t [mm] \le [/mm] 640 bei einer Schrittweite von [mm] \Delta [/mm] t=0,001).
Wegen der Aufgaben habe ich nochmal alles überprüft, das stimmt so wie ich es geschrieben hab. Den chemischen Zusammenhang, sofern er aus der Aufgabenstellung hervorgeht, füge ich als Bild mit an - wenn ich wüsste wo das geht?! Man kann es aber auch unter: http://de.wikipedia.org/wiki/Br%C3%BCsselator nachlesen (dort ist der Unterschied nur, dass C dem D und D dem E aus dieser Aufgabenstellung entsprechen).
Also ich hoffe, dass mir irgendwer weiterhelfen kann bei meinem Problem und bin über jede Antwort dankbar.

MfG Simon

Edit: Ich habe gerade bemerkt, dass wenn man x später starten lässt, er auch die Werte anzeigt. Also lässt man x von 1 bis 2 gehen zeigt er dort alle Werte an. Hat dann wohl eher was mit der Menge der Werte zu tun?! Sehr merkwürdig...

Bezug
                        
Bezug
Differentialgleichungssystem: Antwort
Status: (Antwort) fertig Status 
Datum: 15:30 So 19.10.2008
Autor: Al-Chwarizmi

Als ich bei meinem Programm einmal den Zeitschritt [mm] \Delta{t} [/mm]
deutlich vergrösserte, ergaben sich auch numerische Probleme,
es gab an einer Stelle plötzlich overflow-Meldungen.
Der kleine Zeitschritt ist also für die Berechnung schon wichtig,
wenigstens in jenen Augenblicken, wo die chemischen
Reaktionen umschlagen. Genau in dieser Phase wird auch
die numerische Lösung eventuell instabil.
Du kannst allenfalls versuchen, [mm] \Delta{t} [/mm]  sogar noch kleiner
zu machen, z.B.  [mm] \Delta{t}=0.0003. [/mm]

Dagegen ist es nicht unbedingt nötig, auch alle Daten wirklich
auszugeben. Es genügt vielleicht, zehn Datenpunkte pro
Sekunde Reaktionszeit auszugeben.


LG



Übrigens gäbe es für solche Differentialgleichungen, die nur
in gewissen kleinen Gebieten starke Schwankungen beschreiben,
angepasste "adaptive" numerische Lösungsverfahren.    

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]