2016-08-03 13 views
-1

皆さん。私はループに問題があります。それは一度だけ実行され、反復されません。Matlabの再帰的ループは、反復できません

私は宇宙船の表面温度を時間の関数として見出そうとしています。輻射熱の流れは現在の温度に依存するため、ループの次の温度は1秒前の温度に依存するはずです。これはスクリプト全体ではありませんが、ループの何が問題なのか誰にでも教えてください。

ありがとうございます!

% 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-cantiterate#comment64843709_38733803)では、デバッガhttp://se.mathworks.com/help/matlab/debugging-codeを参照してください。 .html。これはあなたの問題を非常に簡単に解決するはずです。 – patrik

答えて

0

time1の値を設定した後、以下のコードを試してみてください。 いくつかのエラーが修正されました:n = 2:長さ(time1)はn = 2:length(timeline)でなければなりません.time1はスカラーで、sizeの代わりにlength(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 

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

おかげで、みんな。私は、以前の「タイムライン」のエラーを発見したあなたの姿をプロットする。

関連する問題