2014-12-06 54 views
0

这种计算的目的是取一个值(a),并对其执行两个计算的一个用于循环的每个迭代。每个顺序循环都会采用新的计算值并重新计算它。我想保留每个循环的输出值。下面是一个例子,使用逻辑阵列来决定使用通过每个5环,其计算:MATLAB - 如何为环状计算每次迭代创建输出

a = 0; 
b = logical([1 0 1 1 0]); 

for i = 1:length(b) 
    if b(i) == 1 
     a = 1*2 + a*2 
    else 
     a = a*3 
    end 
end 

这个实例不正确的,因为它仅用于a而非5.从期望的结果返回1个值这个例子是:

a = 2 6 14 30 90 

请帮助我,并修改其他任何错误在这里。非常感谢。

回答

1

你可以做

a = [0]; 
b = logical([1 0 1 1 0]); 

for i = 1:length(b) 
    if b(i) == 1 
     a(end+1) = 1*2 + a(end)*2; 
    else 
     a(end+1) = a(end)*3; 
    end 
end 
+2

一对夫妇Matlab的惯用项目:'numel(B)'会比'长度比较合适的(B)'。通常你会做'a(end + 1)= a_next'而不是'a = [a,a_next]'。最好将输出预分配为'a = NaN([1 numel(b)+1]); a(1)= 0;'然后使用'a(i + 1)= a_next'分配给'a',以避免在循环的每次通过时整个数组的低效重新分配。 – 2014-12-06 01:44:00

相关问题