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