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

inhomogene Differentialgleichung - 2 abhängigkeiten

 

hanik
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.09.17
Wohnort: München
Version: ---
     Beitrag Verfasst am: 31.10.2017, 13:49     Titel: inhomogene Differentialgleichung - 2 abhängigkeiten
  Antworten mit Zitat      
Hallo Retter!
ich habe eine inhomogene DGL mit 2 Variablen, die ich lösen muss:
es geht um eine Feuchtebilanz. Diese Gleichung gibt mir die Änderung der Absoluten Feuchte im Innenraum an. Wenn sich die absolute Feuchte in einem Zeitschritt ändert, dann ändert sich am ende des Zeitschrittes auch die Enthalpie. Durch die Änderung der Enthalpie ändert sich die Temperatur des Ausgangssystems. Wenn sich die Temperatur ändert ändert sich wieder das c_i

dc_i nach dt = n*(c_e - c_i) + p(A)*A

Code:

for i = 1:length(p_dusch)
    h_ges(i)= cpL*t_i+c_innen(i)*(r0+cpD*t_i);
    deltaC(i) = (p_dusch(i)*Duschen(t_i(i),phi_i(i)))./Vol;
    dcinachdt(i) = Luftwechsel*(c_e(i)-c_innen(i)')+deltaC(i);
    c_innen(i) = dcinachdt(i)+c_innen(i);
    deltaH(i) = deltaC(i)*(r0+cpD*tWasser);
    h_ges(i)= deltaH(i)+h_ges(i);
    t_i(i)= (h_ges(i)-c_innen(i)*r0)/(cpL+cpD*c_innen(i));
    phi_i(i) = (c_innen(i)./(0.6222+c_innen(i)))*(p0/SatDruck(t_i(i)));
end
 


- h ist die spezifische Enthalpie (die sich aus der trockenen und dem feuchten Teil errechnet)
- c_e und p(A) soll Matlab die Werte aus einer Tabelle entnehmen.
- p0,cpL,cpD,Luftwechsel, Vol sind konstanten.

"A" ist eine Formel in der die Temperatur enthalten ist.
"SatDruck" ist auch eine Formel die mittels Temperatur den Sättigungsdampfdruck berechnet


ich weiss, dass man mit ode45 DGL lösen kann aber bei mir sind folgende Probleme:
1. Lösung mit der Schleife:
- numerisch nicht richtig die DGL als Schleife zu lösen
- Fehlermeldung: bei der 1.Zeile der Schleife:
Code:
Index exceeds matrix dimensions.

Error in Feuchtebilanz (line 56)
    h_ges(i)= cpL*t_i+c_innen(i)*(r0+cpD*t_i)


2. Lösung mit ode45:
Code:

function Bilanz
c_i0= 0.6222*(phi_i*p1/(p0-phi_i*p1);
t_i0 = 22
phi_i0 = 0.5
[T,X] = ode45(@rechteSeite,[1 300000],[c_i0 t_i0];
function dfdt = rechteSeite(c_i,f)
dfdt = zeros(2,1);
c_i= f(1); t_i=f(2);
dc_idt= n*(c_e-c_i)+p(A)*A
dt_idt= (h-c_i*2501)/(1.001+1.89*t_i)
dfdt = [dc_idt; dt_idt]
end
end
 



Mein Code ist nicht richtig, ich habe es auch noch nicht selbst ausprobiert. Weil ich nicht genau weiss wie ich diese Funktion in mein Skript integriere. Außerdem Weiss ich nicht wie der Inhomogene Teil der Funktion ausgelesen wird. Woher weiss das System das er den i-ten Wert für c_e und p(A) verwendet?

Ich hoffe ihr könnt mir Weiterhelfen!
Ich habe ein Henne-Ei problem
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2017, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

zu 1.: das deutet darauf hin, dass c_innen weniger Elemente hat als p_dusch

zu 2.: mir ist der Zusammenhang zum ersten Teil und die Frage dabei nicht wirklich klar. Generell: wenn du eine Wertetabelle zum Lösen einer DGL verwenden willst, würde ich interpolieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hanik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 16.09.17
Wohnort: München
Version: ---
     Beitrag Verfasst am: 31.10.2017, 16:52     Titel:
  Antworten mit Zitat      
zu 1:c_innen soll am Ende ja genauso lang sein wie p_dusch. Für c_innen habe ich am Anfang nur einen Startwert. Für p_dusch eine Tabelle in minütlicher Auflösung. p_dusch fließt in die Schleife folgend rein: für jeden i-ten Wert der DGL gibt es einen wert für p_dusch

zu2: es ist schwer zu erklären, weil ich das ganze aus dem Zusammenhang gerissen habe... ach herje
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2017, 17:40     Titel:
  Antworten mit Zitat      
Hallo,

zu 1.: du kannst einen Wert aber nun mal nicht verwenden, bevor du ihn festgelegt hast. Bestenfalls den vorherigen, also beispielsweise:
Code:
c_innen(1) = Anfangswert;
for i = 2:length(p_dusch)
    h_ges(i)= cpL*t_i+c_innen(i-1)*(r0+cpD*t_i);
end


Grüße,
Harald
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.