2016-08-03 13 views
-1

jeder. Ich habe ein Problem mit Loops. Es wird nur einmal ausgeführt und iteriert nicht.rekursive Schleife in Matlab kann nicht iterieren

Ich versuche die Oberflächentemperatur eines Raumfahrzeugs als Funktion der Zeit zu finden. Der Strahlungswärmefluss hängt von der aktuellen Temperatur ab, daher sollte die nächste Temperatur in der Schleife von der Temperatur vor einer Sekunde abhängen. Das ist nicht das ganze Skript, aber kann mir jemand sagen, was mit meiner Schleife nicht stimmt?

Danke!

% Starting with given surface and interior temperatures, find each new 
% temperature with each heat flux every second through one orbit. 

timeline = 1:1:time1; 
Ts = zeros(size(timeline)); 
Ts(1) = 240; % initial surface temperature, Kelvins` 

for n = 2:length(time1) 
    Ts(n) = (solarflux + IRs - (sigma*ems_mli*surfarea*(Ts(n-1)^4)))/(m*c) + Ts(n-1); 
end 

%% Plotting 

figure(1) 
plot(timeline,Ts) 
xlabel('seconds'); 
ylabel('surface temperature (Kelvins)'); 
+2

Dies ist nicht Rekursion und ' time1' ist nicht definiert. Bitte geben Sie eine [mcve]. – excaza

+0

Zusätzlich zu dem Kommentar von excaza (http : //stackoverflow.com/questions/38733803/recursive-loop-in-matlab-cant-iterate#comment64843709_38733803) Sie können sich den Debugger http://se.mathworks.com/help/matlab/debugging-code ansehen .html. Dies sollte Ihr Problem recht einfach lösen. – patrik

Antwort

0

Probieren Sie den folgenden Code aus, nachdem Sie den Wert von time1 festgelegt haben. Einige Fehler behoben: n = 2: Länge (Zeit1) sollte n = 2: Länge (Zeitleiste) sein, da Zeit1 ein Skalar ist und ich Länge statt Größe in Nullen (Größe (Timeline)) und 1 als Eingabe verwendet es ist ein Vektor der gleichen Größe wie Timeline.

timeline = 1:1:time1;        % your time array 
Ts = zeros(1,length(timeline));     % preallocate memory for Ts 
Ts(1) = 240;          % initial surface temperature, Kelvins 

for n = 2:length(timeline)       % loop through 2 to end of timeline 
Ts(n) = (solarflux + IRs - (sigma*ems_mli*surfarea*(Ts(n-1)^4)))/(m*c) + Ts(n-1); 
end 

Plotten Ihre Figur

figure         % create a figure 
plot(timeline,Ts)      % plot timeline vs Ts 
xlabel('seconds');      % X-Axis label 
ylabel('surface temperature (Kelvins)'); % Y-Axis label 
+0

Möchten Sie Ihre Änderung erklären? Nur-Code-Antworten sind keine sehr nützlichen Lernwerkzeuge. – excaza

+0

Danke @excaza. Ich habe Kommentare eingefügt. – OsJoe

0

Dank, jeder. ich fand die ‚Timeline‘ Fehler früher.