使用 while 循环存储值 (matlab)

Storing values with a while loop (matlab)

我有一个 while 循环,我一直无法确定如何成功存储这些值。任何帮助将不胜感激。

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,我可以看出循环内的值是正确的,但似乎无法正确存储值。

试试这个:

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 值的向量。为了节省运行时间,我将其初始化为变量的预期大小var = zeros(1,12);(这不是严格要求,但建议使用。

另一种方法是识别它是一个相对简单的递推关系:

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))];

向量化后代码似乎变得不清晰(对我来说),所以在这种情况下我可能更喜欢循环。