2016-11-07 136 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

你怎麼知道里面的值是正確的?如果我運行你的代碼,我得到一個錯誤「n undefined near line 1 column 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 

我添加了一個名爲var變量,它是存儲的a的值的向量。爲了牛逼osave運行時我把它初始化變量var = zeros(1,12);的預期大小(這是沒有嚴格要求,但建議

+1

不嚴格要求?????它嚴格*** ***推薦**。 –

+0

它的工作,非常感謝,我嘗試了類似的東西,但不能似乎讓它做任何事情。 – Scott