|
|
Lösen eines DAEs (Energie + Materialbilanz) |
|
diggidyden |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.05.2010, 17:50
Titel: Lösen eines DAEs (Energie + Materialbilanz)
|
 |
|
 |
|
Hallo ihr.
Ich muss gerade für meine Semesterarbeit an der Uni ein Matlab Programm schreiben, bei dem es um das Lösen einer DAE geht. Und ich komme einfach nicht weiter. Ich muss auf jeden fall auch sagen, dass ich ein ziemlicher Noob bei Matlab bin (ist auch mein erstes programm) und es nicht sonderlich drauf habe. habe mir bei dem meisten von meinem Betreuer helfen lassen und mehrere Beispiele angesehen.
Folgende Situation:
Ich habe 12 Bilanzen zu lösen. Normalerweise alle abhängig von der Zeit (1. Ordnung) und von z (2.ordnung). Die letzten 5 Materialbilanzen werden jedoch als quasistationär angenommen, also die linke Seite dw/dt soll gleich 0 sein, weshalb wir es ja auch hier mit einem DAE zu tun haben.
Dann ist das ganze noch ortsdisktretisiert mit n Stützstellen.
Ich muss ja dann nun den ode15s solver zum beispiel nehmen und für das algebraische Problem eine Massmatrix erstellen. Ich habe das so gemacht:
M = eye(12*n);
for i=1:n
M(12*i-4,12*i-4) = 0;
M(12*i-3,12*i-3) = 0;
M(12*i-2,12*i-2) = 0;
M(12*i-1,12*i-1) = 0;
M(12*i ,12*i ) = 0;
end
options = odeset('Mass',M,'MassSingular','yes');
[t, y] = ode15s(@bilanzen_dgl, 0:tstep:tend, y0, options);
mit dem y0-vektor als meine Anfangsbedingung.
Meine Bilanzen sehen beispielsweise so aus:
for i=2:n-1
% Materialbilanz Gasphase
y_t(12*i-11) = ( m * ( ( w_g_CH4(i+1) - w_g_CH4(i-1) ) / 2*dz ) + epsilon * ro(i) * D_ax * ( ( w_g_CH4(i+1) - 2 * w_g_CH4(i) + w_g_CH4(i-1) ) / dz^2 ) ...
+ a * ro(i) * beta(i) * ( w_c_CH4(i) - w_g_CH4(i) ) ) / ( epsilon * ro(i) ) ;
damit ihr euch vorstellen könnt, wie ich da rangegangen bin. y_t bedeutet dy/dt. Für i=1 habe ich Randbedingungen festgelegt. Und für die stationären Bilanzen mit linker Seite dy/dt = 0 :
y_t(12*i- 4) = -MW_CH4 * a * r(i) - a * ro(i) * beta(i) * (w_c_CH4(i) - w_g_CH4(i)) + y_t(12*i- 4) ;
also gibt der y_t Vektor von 1 - 12(Anzahl der zu berechnenden Ableitungen)*n(Anzahl Stützstellen). Könnt ihr euch vorsteleln wie ich meine? Hab dann in dem Vektor also später für y(1) das ergebnis der ersten bilanz am der ersten stützstelle, und y(13) ergebnis erste bilanz zweite stützstelle usw....
Ich hoffe ihr könnt mir folgen, und das tut überhaupt zur sache^^
Die erste Frage ist erstmal, macht man das überhaupt so mit den algebr gleichungen in dem System, das man am ende nochmal + y_t macht? und stimmt das mit der MassMatrix auch soweit??
Wenn ja, was hat es mit dem Fehler den ich bekomme auf sich?
"This DAE appears to be of index greater than 1."
MatLab sagt dazu
"The system is of index 1 if the matrix of partial derivatives of the algebraic system g with respect to the algebraic variables (i.e. dg/dv) is non-singular.
Rewriting this in Mass Matrix form:
M(t,y)*y=F(t,y)
the index 1 condition is satisfied when the matrix (M+lambda*dF/dy) is nonsingular, for all non-zero lambda"
aber was soll das hier bedeuten? Meine Matrix ist doch singulär, da ja einige Nullen mit drin sind auf der Diagonalen....
Ich hoffe mir kann hier jemand helfen. Würde ja gern mein ganzes Programm mal posten, aber das wäre glaub zu krank. Ist das ok, wenn ich nicht weiterkomm hier meine weiteren Fragen stelle? Weil damit wird es nicht gewesen sein glaub ich^^
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|