2017-04-07 115 views
0

我想在Matlab中更好地理解循环,因为某些原因,它们不能像其他语言一样工作。Matlab for循环故障

values = zeros(1,7); 
for i =[1, 4, 10, 15, 22, 24, 36] 
     variable = function(input, input, i); 
     values(i) = function(input, variable); 
end 

所以值变为1x36双,其中对我,我得到的结果,但是这不是我被列设置为0,任何数量为何仍加列值我没有为我选择?

感谢

回答

1

您与7项预分配values。当您在条目10处指定值时,必须创建条目89,并且Matlab使用0填充它们。

下面是一个例子:

>> clear 
>> values = ones(1,7) % preallocate with ones 
values = 
    1  1  1  1  1  1  1 
>> values(4) = 40 
values = 
    1  1  1 40  1  1  1 
>> values(10) = 100 % the array will have to grow 
values = 
    1  1  1 40  1  1  1 0  0 100 

还应注意,具有阵列生长是不希望的,因为它不利地影响速度。无论何时提前知道,最好是preallocate


感谢@Steve为编辑

如果你想要的结果存储在连续的条目,可以考虑使用一个计数变量,例如k为您的索引增加1循环的每一步。

values = zeros(1,7); 
% k stores the number of steps of the loop 
k = 0; 
for i =[1, 4, 10, 15, 22, 24, 36] 
     % increment k 
     k = k+1; 
     variable = function(input, input, i); 
     values(k) = function(input, variable); 
end 
+0

啊我明白了,谢谢。但是,我怎么能解决这个问题?手动删除所有这些列看起来很乱... – BlackDrMario

+1

@BlackDrMario也许你不想在条目'i'处存储每个值,但是在条目'k'处,其中'k'是一个计数器,每个值在每个值中逐个增加迭代 –