MATLAB'for'循环跳过IF语句

时间:2013-12-20 17:48:12

标签: matlab if-statement for-loop skip inequality

range = min(x):0.0001:max(x);
N = numel(range);
x = sort(x);
hit = 0;
i=1;

for j = 1:(N-1)
    if range(j) <= x(i) && x(i) < range(j+1)
        hit = hit + 1;
        i = i+1;
        if x(i) == x(i-1)
            while x(i) == x(i-1)    % If there are more than one of the same
                hit = hit + 1;      % numbers in succession, this allows x and
                i = i+1;            % hit to carry on incrementing. 
            end %while
        end %if
    end %if
end %for
disp(hit)

此代码比较&#39;范围&#39;和&#39; x&#39;。它检查是否&#39; x&#39;在&#39;范围内的值之间,如果是这样的话,&#39;点击&#39;计数器增加,&#39; x&#39;。

的当前值也增加

问题是,在x的一些随机值上(据我所知它们是随机的),尽管它们应该满足“IF”中的不等式。声明,&#39; IF&#39;语句被忽略,for循环继续,因此最后的命中&#39;价值是错误的。

&#39; X&#39;通常是大约一百万左右的一维阵列。

对于这个例子,让

`x = [-2.1792 -2.1759 -2.1758 -2.1748 -2.1658 -2.1648 -2.1646 -2.1604 -2.1603 -2.1550]`

&#39;打&#39;应该等于&#39; 10&#39;而是输出&#39; 2&#39;因为它决定跳过&#39; IF&#39;声明在&#39; j = 35&#39;。

澄清。当&#39; j = 35&#39;,范围(j)= -2.1758且i = 3意味着x(i)= - 2.1758

我非常确定:

range(j) <= x(i) && x(i) < range(j+1)
-2.1758 <= -2.1758 && -2.1758 < -2.1757    %**edited, meant -2.1757 not -2.1759**

是真的。

我希望我在这里做一些我无法看到的傻事。对不起,如果这是一个格式错误的问题,那么这是我的第一个问题。 提前干杯。

2 个答案:

答案 0 :(得分:0)

后续号码x(i)可以通过此测试:

if range(j) <= x(i) && x(i) < range(j+1)

实际上与其邻居相等

    if x(i) == x(i-1)

它可能会无限小,因此您移动到下一个j并且它超出范围。您的内部while需要与外部if相同的条件。您可以跳过if COND while COND,只需执行while COND,因为它的工作原理相同。

答案 1 :(得分:0)

下面的代码会不会更简单,更快,并给出相同的结果吗?

x = sort(x)
hit = sum(diff(x)==0);