Mit der Nutzung dieses Forums (dies beinhaltet auch die Regisitrierung als Benutzer) erklärt Sie sich mit unserer Datenschutzerklärung (https://www.chemiestudent.de/impressum.php) einverstanden. Sofern Sie dieses nicht tun, dann greifen Sie bitte nicht auf unsere Seite zu. Als Forensoftware wird phpBB verwendet, welches unter der GNU general public license v2 (http://opensource.org/licenses/gpl-2.0.php) veröffentlicht wurde.
Das Verfassen eines Beitrag auf dieser Webseite erfordert keine Anmeldung und keine Angabe von persönlichen Daten. Sofern Sie sich registrieren, verweisen wir Sie auf den Abschnitt "Registrierung auf unserer Webseite" innerhalb unserer Datenschutzerklärung.

Integration Parallelreaktionen

hier kann man Fragen zur physikalischen Chemie stellen

Moderator: Chemiestudent.de Team

zonko

Integration Parallelreaktionen

Beitrag von zonko »

Ich habe eine kleine feine Frage an die Kinetiker unter euch. Ich will ein kleines Simulationsprogramm schreiben, wobei ich auf folgendes Geschwindigkeitsgesetz stosse:

mathematische Formel

Wobei C_i Konzentrationen sind und kp_i Geschwindigkeitskonstanten zweiter und kd_i Geschwindigkeitskonstanten erster Ordnung.

Im Prinzip ist das Geschwindigkeitsgesetz also eine Summe von Parallelreaktionen erster und zweiter Ordnung, also generalisiere ich zu:


mathematische Formel

Leider ist mein kinetisches Wissen etwas mau und Buecher in einer Sprache, die ich verstehen koennte, sind weit.
Long story short: ich wuerde den Ausdruck gerne integrieren, um eine Funktion C_i=f(t) zu bekommen.
Weiss hier jemand Rat? Ich bin auch ueber Ansaetze froh und Eile hab ich keine.
Falls mir hier jemand eine saubere Loesung praesentiert und es das Zeug jemals auf ein Paper schaffen sollte gibts natuerlich eine dankende Erwaehnung.

Gruss zonko
zonko

Beitrag von zonko »

BTW: es ist das erste mal, dass ich hier eine Formel eingebe und dann muss ich feststellen, dass man hier einfach LaTeX benutzen kann-- grosses Lob an den, der das in die Wege geleitet hat!
alpha
Moderator
Moderator
Beiträge: 3568
Registriert: 26.09. 2005 18:53
Hochschule: Lausanne: Ecole Polytechnique Fédérale de Lausanne

Beitrag von alpha »

Hmmm... Wie willst du das simulieren? - Frage, weil wenn du das ohnehin nummerisch machen möchtest, dann wäre die Integration doch wesentlich einfacher, weil du dann eine der "Standard"methoden verwenden könntest, nicht?

Habe gerade das Gefühl, keinen ganz klaren Kopf zu haben, behafte mich also nicht darauf, falls dieser Kommentar sinnlos ist.


Grüsse
alpha
But it ain't about how hard ya hit. It's about how hard you can get it and keep moving forward.

Rocky Balboa
zonko

Beitrag von zonko »

Gibst Du mir einen Link zu einer "Standard-Methode"? Dann kann ich mir das mal anschauen!

Gruss zonko
alpha
Moderator
Moderator
Beiträge: 3568
Registriert: 26.09. 2005 18:53
Hochschule: Lausanne: Ecole Polytechnique Fédérale de Lausanne

Beitrag von alpha »

Hmm... - Wenn du das in Maple oder Mathematica eingibst und dir dann "eine passende" numerische Methode auswählst (falls das nicht automatisch möglich ist) geht das nicht?

Grundsätzlich könntest du dir das sonst wohl auch selbst aufbauen aus allgemeinen Prinzipien der numerischen Integration...

Nehme ja an, die Randbedingungen sind bekannt...


Grüsse
alpha
But it ain't about how hard ya hit. It's about how hard you can get it and keep moving forward.

Rocky Balboa
zonko

Beitrag von zonko »

Ich wollte das eigentlich in Python selbst aufbauen, damit ich a) genau weiss was hinter den Kulissen passiert und b) Fit&Plotroutinen sowie Datei-Ein&Ausgabe dranklatschen kann.

Wie numerische Integration funktioniert ist mir durchaus klar, aber nur fuer "normale" Funktionen, wo ich eben f(x) fuer ein paar x auswerte und dazwischen (linear oder sonstwie) interpoliere.
Aber wie integriere ich ein Differenzial numerisch? Oder steh ich grad gewaltig auf dem Schlauch?
Randbedingungen sind kein Thema.

Gruss zonko
alpha
Moderator
Moderator
Beiträge: 3568
Registriert: 26.09. 2005 18:53
Hochschule: Lausanne: Ecole Polytechnique Fédérale de Lausanne

Beitrag von alpha »

Ich dachte mir halt, dass das ja eigentlich so geht, wie immer: Ob du nun f(x) hast und F(x) (das Integral) haben willst oder ob du df(x)/dx hast und f(x) haben willst, scheint mir grundsätzlich so ziemlichd das selbe zu sein, jedenfalls wenn du das Schrittweise betrachtest: Für F(x) müsstest du halt innerhalb der Grenzen auf einmal alle die kleinen Flächen berechnen und summieren und bist nur am Endresultat, der gesamten Fläche interessiert. Bei f(x) bist du halt an jedem einzelnen Wert interessiert und brauchst das Ergebnis des ersten Schritts für den zweiten, was du für F(x) nicht brauchst: Während bei F(x) die Reihenfolge keine Rolle spielt in der du die einzelnen Teilstücke berechnest, musst du bei der Differentialgleichung natürlich am Anfang beginnen, den ersten Schritt ausrechnen, von diesem weiter gehen etc. Sozusagen wie ein Velocity-Verlet-Algorithmus, nur dass du eine Diff-Gleichung erster Ordnung und nicht zweiter Ordnung hast.
Verstehst du, was ich meine? - Oder sehe ich da etwas zu einfach?


Grüsse
alpha


p.S. Ja, habe mir gedacht, dass du das selbst aufbauen willst... - Kenne zwar Phyton nicht, aber habe oben genannten Verlet-Integrator auch mal selbst implementiert (Fortran) und denke, grundsätzlich sollte 1. Ordnung einfacher sein als 2. - Dafür hast du insgesamt eine kompliziertere Struktur...
But it ain't about how hard ya hit. It's about how hard you can get it and keep moving forward.

Rocky Balboa
zonko

Beitrag von zonko »

Ok, bin ueber Velocity Verlet auf der englischen wikipedia zu numerischer Integration von Differenzialgleichungen erster Ordnung gekommen, und das sieht schon mal nicht schlecht aus. Was mir ein bischen sorgen macht: bei md-simulationen sorgt ja das kraftfeld dafuer, dass du nicht voellig vom weg abkommen kannst, aber bei kinetik?
Ich frage mich nur, bis zu wie vielen Gleichungen das wohl stabil mit welchem Zeitschritt sein kann, denn bei mir werden das eine ganze menge (vielleicht so 9000) sein... Ich glaube ich muss jetzt wirklich seltsame mathe-paper lesen :(

aber ich habe immer noch die hoffnung, dass mir jemand sagt: "aber das kann man doch ganz einfach analytisch integrieren!"

Man wird sehen.

gruss zonko
alpha
Moderator
Moderator
Beiträge: 3568
Registriert: 26.09. 2005 18:53
Hochschule: Lausanne: Ecole Polytechnique Fédérale de Lausanne

Beitrag von alpha »

Von analytischer Lösung "komplizierter" Differentialgleichungen kann ich dir leider nichts sagen. Was die nummerische Lösung anbelangt: 9'000 beeindruckt mich jetzt noch nicht wirklich;) - Nein, im Ernst: Normalerweise programmierst du das, dann nimmst du mal willkürlich einen Zeitschritt, rechnest, dann nimmst einen kleineren und schaust ob das Resultat sich wesentlich ändert. Wenn ja: Nimmst du den kleineren, wenn nein, ist der grössere auch OK - trial and error;) Als guter Richtwert: mindestens eine Grössenordnung kleiner als dein schnellster Prozess. Wenn also die grösste Geschwindigkeit ~ 1 M/s, dann sollte dein Zeitschritt nich grösser als 0.1 s sein, so ganz grob, zumindest ist so eine Faustregel aus der MD (wo das Kraftfeld nicht dafür sorgt, dass alles OK bleibt, leider...)

Ich schau noch kurz nach, habe da noch was in Erinnerung, allerdings nur für Prozesse erster Ordnung *such* *abernixpassendesfind*

Naja, wird schon gehen, heutige PC's sind ja schnell;)
Oder du findest doch noch einen Weg, das algebraisch zu lösen. - Soll doch ganze Bücher geben mit Lösungen für Kinetiken *nachschau*
- C. Capellos, Kinetic systems
- Comprehensive Chemical Kinetics

Grüsse
alpha


p.S. Bin gerade über die Bemerkung gestolpert, dass z.B. RK4 (also Runge-Kutta 4. Ordnung) die beste Performance haben soll.
But it ain't about how hard ya hit. It's about how hard you can get it and keep moving forward.

Rocky Balboa
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste