Matlab 使用数学家规则避免循环中的计数器

Matlab 使用数学家规则避免循环中的计数器,matlab,for-loop,counter,generalization,Matlab,For Loop,Counter,Generalization,我试图找到一个数学家公式,以避免计数器对任何循环(第一个元素、最后一个元素和增量的任何数字)一步一步递增1 示例1(一个用于循环): 最小值=第一个元素,最大值=最后一个元素,跃点=增量(变量i) 带计数器: c = 1; for i = MIN:HOP:MAX c = c + 1; end c = 1; for i = MINi:HOPi:MAXi for j = MINj:HOPj:MAXj c = c + 1; end end 无柜台: for

我试图找到一个数学家公式,以避免计数器对任何循环(第一个元素、最后一个元素和增量的任何数字)一步一步递增1

示例1(一个用于循环):

最小值=第一个元素,最大值=最后一个元素,跃点=增量(变量i)

带计数器:

c = 1;
for i = MIN:HOP:MAX
    c = c + 1;
end
c = 1;
for i = MINi:HOPi:MAXi
    for j = MINj:HOPj:MAXj
        c = c + 1;
    end
end
无柜台:

for i = MIN:HOP:MAX
    c = floor((i-MIN)/HOP) + 1;
end
for i = MINi:HOPi:MAXi
    for j = MINj:HOPj:MAXj
        x = (floor((i-MINi)/HOPi)+1);
        y = (floor((j-MINj)/HOPj)+1);
        c = x*y+(x-(floor((MAXi-MINi)/HOPi)+1))*((floor((MAXj-MINj)/HOPj)+1)-y);
    end
end
示例2(两个用于循环):

MINi=第一个元素,MAXi=最后一个元素,HOPi=增量(变量i)

MINj=第一个元素,MAXj=最后一个元素,HOPj=增量(变量j)

带计数器:

c = 1;
for i = MIN:HOP:MAX
    c = c + 1;
end
c = 1;
for i = MINi:HOPi:MAXi
    for j = MINj:HOPj:MAXj
        c = c + 1;
    end
end
无柜台:

for i = MIN:HOP:MAX
    c = floor((i-MIN)/HOP) + 1;
end
for i = MINi:HOPi:MAXi
    for j = MINj:HOPj:MAXj
        x = (floor((i-MINi)/HOPi)+1);
        y = (floor((j-MINj)/HOPj)+1);
        c = x*y+(x-(floor((MAXi-MINi)/HOPi)+1))*((floor((MAXj-MINj)/HOPj)+1)-y);
    end
end
c公式有两个for循环的简化吗


任何用k表示循环的公式,c(k)?

我可以问一下为什么要这样做吗?只需按住计数器,计算效率会更高,可读性也更高。在任何情况下,都可以使用sub2ind([(MIN1-MIN1)/HOP1,(MIN2-MIN2)/HOP2,…(MINk-MINk)/HOPk],i1,i1,…,ik)主要是,我用它索引到一个向量,因为这个原因我需要c是1,2,3,。。。对于这些循环中的所有迭代。我不认为min1-min1/hop1总是0。假设它是MAX1-min1。为什么不使用计数器呢?我只想找到循环参数和线性索引之间的关系,以避免计数器的倍数。我用sub2ind做了实验,它似乎就是解决方案。具有两个循环的示例:
c2=sub2ind([floor((MAXj-MINj)/HOPj)+1 floor((MAXi-MINi)/HOPi)+1],y,x)。非常感谢。您可以定义:indvalues\u i=MINi:HOPi:MAXi;(对于j也是如此),那么就有:对于i=1:length(indvalues_i)。。。这样我现在就是你的“柜台”。。。