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

Lösen eines DAEs (Energie + Materialbilanz)

 

diggidyden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2010, 17:50     Titel: Lösen eines DAEs (Energie + Materialbilanz)
  Antworten mit Zitat      
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^^


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