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

Differentialgleichungssystem als Matrix lösen

 

LaborDodo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2018, 19:56     Titel: Differentialgleichungssystem als Matrix lösen
  Antworten mit Zitat      
Hallo zusammen,

ich bin ganz neu hier und hoffe das richtige Unterforum für meine frage gefunden zu haben.
Ich möchte ein chemisches Reaktionsgleichungssystem lösen. Für kleine Systeme habe ich das schon oft in matlab gemacht und es normalerweise in folgender Form in eine Funktion gepackt und mittels ode45 o.Ä. gelöst.

Code:

dc(1) = -k1*c(1);
dc(2) = k1*c(1)-k2*c(2);
dc(3) = k3*c(2);
 


In nächste Zeit muss ich allerdings deutlich größere und komplexere Systeme lösen. Hierzu würde ich gerne die Gleichungen in der form dc/dt = K * c aufstellen und lösen.
Hierbei wären also dc/dt mein Vektor aus den Variablen links in der Gleichung und c der Vektor mit allen Konzentrationen und K meine Matrik mit den Ensprechenden Konstanten für alle Reaktionen.

Code:

dcdt = [ dc(1), dc(2), dc(3)];

K = [-k1  0  0;
      k1 -k2 0;
      0   0  k3] ;


c =  [c(1), c(2), c(3)];
 


Ich habe es Bereits über die Symbolic Toolbox versucht, da ich hierzu einiges gefunden habe. Allerdings wird das System sehr groß (>6000 Gleichungen) werden.
Falls das Problem hier einigen zu trivial vorkommt, ich nehme auch gerne Tips zur jeweiligen Literatur, anstelle von Lösungsvorschlägen entgenen.

Vielen Dank

Grüße
LaborDodo
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn mich meine Mathe-Kenntnisse nicht im Stich lassen, ist die Lösung
Code:
c = expm(K * (t-t0)) * c0


Solltest du aber sicherheitshalber an einem einfachen Beispiel verifizieren.

Die Frage ist aber, ob du mit der bisherigen Vorgehensweise nicht besser dran bist. Was spricht denn dagegen?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
LaborDodo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2018, 15:23     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die Antwort. Wenn alle meine Reaktionen erster Ordnung sind klappt das so auch. Allerding habe ich ggf auch welche zweiter Ordnung.
z.B.
Code:

dc(3) = k*c(1)*c(2);
 


Sowas in dieer Art, damit wäre die Matrix auch zeitabhängig. Nicht nur der Konzentrationsvektor.

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

Forum-Meister


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

nicht nur das. Dann ist das System nicht mehr linear und lässt sich nicht mehr in dieser Form beschreiben. Vielleicht in quadratischer Form, aber da ist mir keine solche Lösungsformel bekannt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
LaborDodo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2018, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

daher hatte ich gehofft das ganze nummerisch in sinnvoller Zeit lösen zu könne.

Gruß
LaborDodo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2018, 19:54     Titel:
  Antworten mit Zitat      
Hallo,

hast du es denn mal mit einem "ganz normalen" ode45-Ansatz versucht?
Wenn die Matrix dünnbesetzt ist, dürfte die Auswertung recht schnell gehen. Sollte man natürlich ausnützen ( sparse ).

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
LaborDodo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2018, 08:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich dachte an genau das gleiche, hatte aber Probleme das System als Matrix so darzu stellen, dass es von ode45 bearbeitet werden kann.
Als einzelne Gleichungen war das gar kein Problem. Direkt als Matrizen allerdings schon. Hier habe ich nur die Möglichkeit es über eine Art Massenmatrix zu machen?

Aus der Dokumentation bin ich leider nicht richtig schlau geworden.

Gruß
LaborDodo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie genau hast du es denn versucht und welche Probleme sind dabei aufgetreten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
LaborDodo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2018, 17:58     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Hilfe. Ich hatte den von dir vorgeschlagenen Weg ganz am Anfang meiner Matlabzeit mal versucht und dachte er würde prinzipiell nicht klappen. Aber siehe da es war nur ein kleiner Dimensionsfehler und er ist gelöst.

Das nächste Problem wartet allerding schon. Passt hier allerings nicht hin.

Beste Grüße
LaborDodo
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.