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

Probleme beim Lösen von DAE

 

Tanjawillswissen
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2015, 16:55     Titel: Probleme beim Lösen von DAE
  Antworten mit Zitat      
Hallo,

Es geht um die Untersuchung einer Temperatur- und Konzentrationsgrenzschicht.
Dafür habe ich zwei Gleichungen, die eine ist algebraisch. Es kommt also nur T(z) und c(z) vor. Die andere enthält auch die Ableitungen, also diff(T(z),1) und diff(c(z),1). Es handelt sich also um ein DAE-System. Dieses versuche ich mit dem Solver ode15s zu lösen.
Dafür bin ich nach der Anleitung "Set up your DAE Problem" vorgegangen.
Es kommt allerdings die Fehlermeldung:

"Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN.
> In daeic3 (line 150)
In ode15s (line 313)
In DAEProblem_2 (line 77)
Error using daeic3 (line 153)
This DAE appears to be of index greater than 1.

Error in ode15s (line 313)
[y,yp,f0,dfdy,nFE,nPD,Jfac,dMfac] = daeic3(odeFcn,odeArgs,tspan,htry,Mtype,Mt,Mfun,...

Error in DAEProblem_2 (line 77)
ode15s(F, [0,3], y0, opt);"


Ich weiß leider gar nicht genau, welche Matrix die Fehlermeldung dabei meint- die Massenmatrix M darf ja bei diesem solver singulär sein.

Kennt sich damit jemand aus und kann mir weiterhelfen?
Das wäre super.

Tanja

Code:


%% DAE-Problem

format long;
clear;
close all;


fig4 = figure(4);
hold on

% 1. Specify equations and state variables

syms T(z) c(z);

eqs = [ 0 == -(0.018165536558356 * exp( -3.315990202416382 * z - 2.552316081020983) * (-3.315990202416382)) + (- 0.0000052883907 * diff(T(z),1) - 0.0000030738272 * 2 * T(z) * diff(T(z),1) + ...
        0.000000030124687 * 3 * T(z)^2 * diff(T(z),1) - 2.0883178*10^(-10) * 4 * T(z)^3 * diff(T(z),1) + 0.000010508621 * diff(T(z),1) * 0.488 + ...
        0.00000021282248 * 2 * T(z) * diff(T(z),1) * 0.488 - 0.000000001705881 * 3 * T(z)^2 * diff(T(z),1) * 0.488 + 0.00019029121 * diff(c(z),1) + ...
        0.0000024239607 * diff(c(z),1)/0.488^2 - 0.00000073960297 * diff(c(z),1) * T(z) - 0.00000073960297 * c(z) * diff(T(z),1) + 0.0000000089818478 * diff(c(z),1) * T(z)^2 + 0.0000000089818478 * c(z) * 2 * T(z) * diff(T(z),1) + ...
        1.2078804*10^(-10) * diff(c(z),1) * T(z)^3 + 1.2078804*10^(-10) * c(z) * 3 * T(z)^2 * diff(T(z),1) - 0.0000003589495 * diff(c(z),1) * T(z) * 0.488 - 0.0000003589495 * c(z) * diff(T(z),1) * 0.488 - ...
        0.0000000094834486 * 120 * diff(T(z),1) + ...
        1.0100326*10^(-10) * 120 * 2 * T(z) * diff(T(z),1) + 5.8085198*10^(-15) * 120^2 * 2 * T(z) * diff(T(z),1) - ...
        0.0000000011177517 * 120 * diff(c(z),1) + 5.7311268*10^(-11) * 120 * diff(T(z),1) * c(z) + 5.7311268*10^(-11) * 120 * T(z) * diff(c(z),1) - ...
        1.5460458*10^(-12) * 120 * 2* T(z) * diff(T(z),1) * c(z) - 1.5460458*10^(-12) * 120 * T(z)^2 * diff(c(z),1)),...
        0 == - (0.018165536558356 * exp( -3.315990202416382 * z -2.552316081020983 ) + 1.338339910785375) + 1.3280657 - 0.0045536802 * 0.488^2 + 0.0025471707/0.488^2 + 0.000007501966/0.488^4 + ...
        0.000002802632/0.488^6 - 0.0000052883907 * T(z) - 0.0000030738272 * T(z)^2 + ...
        0.000000030124687 * T(z)^3 - 2.0883178*10^(-10) * T(z)^4 + 0.000010508621 * T(z) * 0.488 + ...
        0.00000021282248 * T(z)^2 * 0.488 - 0.000000001705881 * T(z)^3 * 0.488 + 0.00019029121 * c(z) + ...
        0.0000024239607 * c(z)/0.488^2 - 0.00000073960297 * c(z) * T(z) + 0.0000000089818478 * c(z) * T(z)^2 + ...
        1.2078804*10^(-10) * c(z) * T(z)^3 - 0.0000003589495 * c(z) * T(z) * 0.488 + 0.0000015868383 * 120 - ...
        1.574074*10^(-11) * 120^2 + 0.000000010712063 * 120/0.488^2 - 0.0000000094834486 * 120 * T(z) + ...
        1.0100326*10^(-10) * 120 * T(z)^2 + 5.8085198*10^(-15) * 120^2 * T(z)^2 - ...
        0.0000000011177517 * 120 * c(z) + 5.7311268*10^(-11) * 120 * T(z) * c(z) - ...
        1.5460458*10^(-12) * 120 * T(z)^2 * c(z)];
   
    vars = [T(z); c(z) ];

% 2. Reduce Differential Order entfällt

% 3. Reduce Differential Index

isLowIndexDAE(eqs, vars)

[eqs,vars] = reduceDAEIndex(eqs,vars);
[eqs,vars] = reduceRedundancies(eqs,vars);
[eqs,vars] = reduceDAEIndex(eqs,vars);

isLowIndexDAE(eqs, vars)

% 4. MATLAB Function Handles

[M,F] = massMatrixForm(eqs,vars);

M=odeFunction(M, vars);
F=odeFunction(F, vars);

M=@(z,Y) M(z, Y);
F=@(z,Y) F(z, Y);

% 5. Initial conditions

y0est = [26.322700000000001; 17.550000000000001];
yp0est = zeros (2,1);

opt = odeset('Mass', M, 'InitialSlope', yp0est, 'RelTol', 10^-7, 'AbsTol', 10^-7);
[y0, yp0] = decic(@(z, y, yp) M(z,y)*yp-F(z,y), 0, y0est, [], yp0est, [], opt);




% 6. Solver

ode15s(F, [0,3], y0, opt);

for k=1:numel(vars)
    S{k} = char(vars(k));
end


 
Private Nachricht senden Benutzer-Profile anzeigen


laternenjoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 17.07.2015, 12:25     Titel:
  Antworten mit Zitat      
Hallo, blöde Frage aber heißt das

Error using daeic3 (line 153)
This DAE appears to be of index greater than 1.


Das sowas wie

eqs=....*T(z)^3*diff(T(z), z))+....

nicht geht? Das ist doch nichtlinear, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Tanjawillswissen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2015, 11:05     Titel:
  Antworten mit Zitat      
Das ist nicht der Grund denke ich, soweit ich weiß kann der solver mit nichtlinearen Gleichungen umgehen.
Ich hatte ein ähnliches System, da kam diese Fehlermeldung nicht. Dafür sind die Ergebnisse dort aber von den erwarteten stark abgewichen.
Private Nachricht senden Benutzer-Profile anzeigen
 
laternenjoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 19.07.2015, 14:25     Titel:
  Antworten mit Zitat      
Sorry ich meinte, ob das noch algebraisch ist.
Wenn ja, dann brauchst du ja nur den Fehler im 3. Schritt suchen. Da kannst du ja minimum 2 Zeilen von streichen...
Oder du hast im 5. Schritt schlechte RB gewählt. Keine Ahnung.
Übrigens würde ich deine Faktoren in eqs in Variablen speichern und das evtl mit simplify vereinfachen. Dann wird das evtl. übersichtlicher.
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 - 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.