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

Erstellung for-Schleife zur Automatisierung eines Skripts

 

Maethor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2015, 22:56     Titel: Erstellung for-Schleife zur Automatisierung eines Skripts
  Antworten mit Zitat      
Moin moin,
seit ein paar Tagen sitze ich etwas ratlos vor meinem erstellten Codeschnipsel zur Berechnung eines diskretisierten Bilanzraummodells.
Mein Problem ist, dass ich die Schleife nicht in die richtige Ordnung bringen kann. Habe als Vergleich das ganze in Excel iterativ berechnet und konnte so meine Werte vergleichen.
Wäre cool wenn jemand einmal einen Blick auf meinen Code werfen könnte und ggf. einen Tipp hat, wie man das in Ordnung bringen kann. Smile

Code:
% Modell mit j=5
T11 = 90;
T21 = 30;
C1 = 42020;
C2 = 20900;
eps = 0.2027;
Tst = 60;         % Fluid 1
j   = 5;
%% Initialisierung
Ts = ones(1,j)*Tst;
T1 = ones(1,j);
    T1(1) = T11;
    T1(2:end) = Ts(2:end);
T2 = ones(1,j)*Tst;
    T2(1) = T21;
Q  = ones(1,j);
n_max = 100;
T = ones(n_max,1);
%% Schleife
for i = 1:n_max
    Q(5)    = eps*C2*(Ts(5)-T2(1));
    T2(2)   = T2(1)+(Q(5)/C2);
    T1(2)   = T1(1)-(Q(1)/C1);
    Ts(2)   = (T1(2)+Ts(2))/2;
   
    Q(4)    = eps*C2*(Ts(4)-T2(2));
    T2(3)   = T2(2)+(Q(4)/C2);
    T1(3)   = T1(2)-(Q(2)/C1);
    Ts(3)   = (T1(3)+Ts(3))/2;
   
    Q(3)    = eps*C2*(Ts(3)-T2(3));
    T2(4)   = T2(3)+(Q(3)/C2);
    T1(4)   = T1(3)-(Q(3)/C1);
    Ts(4)   = (T1(4)+Ts(4))/2;
   
    Q(2)    = eps*C2*(Ts(2)-T2(4));
    T2(5)   = T2(4)+(Q(2)/C2);
    T1(5)   = T1(4)-(Q(4)/C1);
    Ts(5)   = (T1(5)+Ts(5))/2;
     
    Q(1)    = eps*C2*(T1(1)-T2(5));
   
    T1(2)   = T1(1)-(Q(1)/C1);
    T1(3)   = T1(2)-(Q(2)/C1);
    T1(4)   = T1(3)-(Q(3)/C1);
    T1(5)   = T1(4)-(Q(4)/C1);
   
    Ts(2)   = (T1(2)+Ts(2))/2;
    Ts(3)   = (T1(3)+Ts(3))/2;
    Ts(4)   = (T1(4)+Ts(4))/2;
    Ts(5)   = (T1(5)+Ts(5))/2;
    T(i,1)    = T1(5)-(Q(5)/C1);
end
%%
Summe = sum(Q(1:5))
To1 = T1(5)-(Q(5)/C1);
To2 = T2(5)+(Q(1)/C2);


Und mein Ansatz für die Schleife:
Code:
% Schleifenfunktion
clc
clear
Te1 = 90;
Te2 = 30;
C1 = 42020;
C2 = 21000;
R = C2/C1;
kA = 5000;
NTU = kA/C2;
eps = (1-exp(-NTU*(1-R)))/(1-(R*exp(-NTU*(1-R))));
Tst = 60;           % Fluid 1
j_max = 5;        % Anzahl Bilanzräume
%% Initialisierung der Schleife
Ts = ones(1,j_max)*Tst;
T1 = ones(1,j_max);
    T1(1) = Te1;
    T1(2:end) = Ts(2:end);
T2 = ones(1,j_max)*Tst;
    T2(1) = Te2;
Q  = ones(1,j_max);
n_max = 100;
j = j_max;
%% Schleife
for i = 1:n_max  
   
    for k = 1:j_max-1
        Q(1) = eps*C2*(T1(1)-Ts(1));
        Q(end) = eps*C2*(Ts(end)-T2(1));
        Ts(1) = (T1(1)+Ts(1))/2;
        T2(2) = T2(1)+(Q(1)/C2);
        Ts(end) = (T1(end)+Ts(end))/2;
       
   
        Q(k+1)  = eps*C2*(Ts(k+1)-T2(k+1));
        T2(k+1) = T2(k)+(Q(k)/C2);
        T1(k+1) = T1(k)-(Q(k)/C1);
        Ts(k+1) = (T1(k+1)+Ts(k+1))/2;  
        j = j-1;
       
    end

    T(i) = T1(j_max)-(Q(j_max)/C1);
end
%%
T;
Summe = sum(Q(1:5))
To1 = T1(5)-(Q(5)/C1);
To2 = T2(5)+(Q(1)/C2);
 


Es scheint "einfach" eine falsche Zuordnung der Laufvariablen, bzw. der Randbedingung für j=1 und j=end zu sein. Hat jemand einen Tipp was ich falsch gemacht habe, bzw. wie man an so ein Problem mit System herangeht? Bei mir war das nun eher unsystematisches trial and error. Die Physik/Technik sei einmal außen vor, die prüfe ich später noch im Detail.
Vielen Dank schon einmal im Voraus!


boundary
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2015, 00:33     Titel:
  Antworten mit Zitat      
Ich verstehe deine Frage nicht ganz, aber so wie ich das sehe verwendest du j gar nicht in deiner for Schleife ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maethor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2015, 09:40     Titel:
  Antworten mit Zitat      
Moin,
ja das j ist in der Datei auskommentiert, das war ein Zwischenschritt, den ich versehentlich auskommentiert habe. Die Zählvariablen sind i und k, auch wenn ich glaube, dass ich auch ein j ggf. noch brauche.

Also das Problem ist konkreter gesagt: ich möchte obigen Code (der eine feste Anzahl von Q bzw. T hat, hier 5) so anpassen, dass ich beliebig aussuchen kann ob ich 10 Wärmeströme und 10 Temperaturen berechne oder je 50. Dazu muss ich den ganzen Code ja wohl so umschreiben, dass ich einen Nx1 Vektor für die Q's und einen für die T's habe. Q(1) und Q(end) sind immer gleich, doch die 3/18/48 Zwischenwerte dazwischen möchte ich als Schleife generieren um a) den Code zu kürzen und b) es einfacher haben, wenn ich statt Q(1-5) plötzlich Q(1-20) haben möchte.

Mir fehlen jedoch mittlerweile einfach die Ideen, wie ich dies vollbringe, daher sieht der Schleifencode den ich mit angehängt hab auch so wirr aus.
 
boundary
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2015, 18:27     Titel:
  Antworten mit Zitat      
Code:

T(1,1) = 30;    % Das ist die Starttemperatur
anzahl_Bilanzraeume = 30; % Die Anzahl der Bilanzräume zwischen der Starttemperatur und der Endtemperatur
T(1,2+anzahl_Bilanzraeume)=20; %Die Endtemperatur

for i = 1:anzahl_Bilanzraeume
   
    T(1,i+1) = 25;              %Hier werden die Temperaturen dazwischen mit der NTU Methode berechnet
   
end
 


Kann es sein dass du etwas in diese Richtung suchst ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maethor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2015, 18:51     Titel:
  Antworten mit Zitat      
Moin,
ja etwas in die Richtung:

T_in1 |---------->|T_zw1(1)|---------->|T_zw1(2)|---------->|T_out1
Gegenstrom-Führung
T_out2|<----------|T_zw2(2)|<----------|T_zw2(1)|<----------|T_in2

Bekannt sind die Geometrie und so weiter, sowie T_in1 und 2. Gesucht T_out1 und 2 sowie die T_zw1(1,2) und T_zw2(1.2). Wie gesagt, ohne Schleife sehen die Ergebnisse gut aus, nur in der/den for-Schleife(n) geht es drunter und drüber.

Am Ende möchte ich einen Vektor [T_in1 - T_zw1(1) - T_zw1(2) - T_out1] erstellen lassen.
Der Wärmestrom wird jeweils zwischen T_zw1(1) und T_zw2(2) sowie zwischen T_zw1(2) und T_zw2(1) und dann natürlich zwischen den T_in und T_out auf beiden Seiten. Die Iteration wird benötigt, da mehr als ein Bilanzraum und Gegenstrom, keine Parallelführung. Und wie gesagt, ich kenne nur die T_in und keine T_out, sonst wäre ich auch nicht auf diese Berechnung unbedingt angewiesen (dann würde man ggf. auch die LMTD-Methode nehmen können, sagt mir mein Bauchgefühl, hab ich aber jetzt grad nicht tiefer drüber nachgedacht).
 
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.