2016-11-07 12 views
0

whileループがあり、値の格納方法を決定できませんでした。どんな助けでも大歓迎です。whileループで値を保存する(matlab)

n = 0; a = 21; b = 0; c = 0; y = 37.6991; T = 18.5; z = 0.1591; d = 0; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
while n < x 
     a = a + b     
     c = y*(T-a)/z;     
     d = f*c;    
     b = d/q;     
     n = n + e; 
    end 

私が店にしようとしている値はaですが、私は、ループ内の正しいですが、ちょうど正しく値を保存することができないような値を伝えることができます。

+0

内部の値が正しいことをどのように伝えることができますか?あなたのコードを実行すると、エラーが発生します "行1列7の近くでは未定義です"完全な最小限の作業例を提供する必要があります – stephematician

+0

有効な点、申し訳ありません今すぐ更新します – Scott

+0

修正済み、 – Scott

答えて

1

別のアプローチは、それが比較的簡単な漸化式であることを認識するだろう:。

n = 0; a = 21; y = 37.6991; T = 18.5; z = 0.1591; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
while n < x 
    a(end+1) = a(end) + f * y * (T - a(end))/(q * z); 
    n = n + e; 
end 

この計算はまた、ベクトル化することができますが、あなたは少し注意する必要があり、全く同じ出力したい場合:

n = 5:5:55; y = 37.6991; T = 18.5; z = 0.1591; f = 15.3049; q = 2.2391e4; a0 = 21; 
alpha = f * y * T/(q * z); 
beta = (1 - f * y/(q * z)).^(0:length(n)) 

a = a0 * beta + alpha * [0 cumsum(beta(1:end-1))]; 

をコードがベクトル化時に(私に)明確さを失うように見えるので、私はおそらくだろうあなたを好むこのシナリオではループします。

0

はこれを試してみてください:

counter = 1; 
n = 0; a = 21; b = 0; c = 0; y = 37.6991; T = 18.5; z = 0.1591; d = 0; f = 15.3049; q = 2.2391e4; e = 5; x = 60; 
var = zeros(1,12); 
while n < x 
     a = a + b;     
     c = y*(T-a)/z;     
     d = f*c;    
     b = d/q;     
     n = n + e; 
     var(counter) = a; 
     counter = counter+1; 
end 

私はaの値を格納するベクトルであるvarという変数を追加しました。オーダートンのosaveランタイムでは私は、これは必須ではありませんが、推奨される(変数var = zeros(1,12);の予想サイズにそれを初期化し

+1

厳密には必須ではありませんか?***厳密には*** **を推奨します** –

+0

これは動作します、ありがとう、私は同様のことを試みましたができませんでしたそれが何かをするように見える。 – Scott

関連する問題