2016-08-03 11 views
-1

все. У меня проблема с циклами. Он выполняется только один раз и не выполняет итерацию.Рекурсивная петля в Matlab не может итерации

Я пытаюсь найти температуру поверхности космического корабля как функцию времени. Радиационный тепловой поток зависит от текущей температуры, поэтому следующая температура в петле должна зависеть от температуры секунду назад. Это не весь сценарий, но может ли кто-нибудь сказать мне, что случилось с моей петлей?

Спасибо!

% 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

Это не рекурсию и ' time1' не определен. Пожалуйста, предоставьте [mcve]. – excaza

+0

В дополнение к комментарию от excaza (http : //stackoverflow.com/questions/38733803/recursive-loop-in-matlab-cant-iterate#comment64843709_38733803), вы можете посмотреть на отладчик http://se.mathworks.com/help/matlab/debugging-code .html. Это должно решить вашу проблему довольно легко. – patrik

ответ

0

Попробуйте выполнить приведенный ниже код после установки значения time1. Исправлены некоторые ошибки: n = 2: length (time1) должно быть n = 2: length (timeline), потому что time1 является скаляром, и я использовал длину вместо размера в нулях (размер (временная шкала) и добавил 1 в качестве ввода для создания это вектор того же размера, как и сроки.

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 

Plotting ваша фигура

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

Помогите объяснить свои изменения? Кодовые ответы - не очень полезные инструменты обучения. – excaza

+0

Спасибо @excaza. Я включил комментарии. – OsJoe

0

Спасибо, все. Я нашел ошибку «хронология» ранее.

Смежные вопросы