在 MATLAB 中使用带有 or 电路的 if 语句的时间过长 运行

Overly long run time using if statement with or circuit in MATLAB

我正在使用 MATLAB R2014a 并编写一个必须处理数百万个数据点的程序。问题是 运行 一旦超过数十万大关,时间就会增加到一个荒谬的数量,甚至比应该的时间还要长。这是因为我有两个 if 语句都包含一个 or 电路。我用一个简单的代码对其进行了测试,发现与将 or 电路分成两个不同的 if 语句相比,or 电路花费了非常长的时间。

下面的代码非常快,使用了两个 if 语句而不是 or 电路:

    dataBlock = 500000;
    num_loops = 1;
    while num_loops <= 2000000
        if num_loops ==200000
            disp('200000');
        end
        if num_loops == dataBlock
             disp('num_loops = dataBlock');
             dataBlock = dataBlock + 500000;
        end
        num_loops = num_loops+1;
    end

下面的代码与上面的代码相同,但是使用了一个or电路而不是两个if语句。它 运行 非常慢,即使我确保先写更频繁的情况:

    dataBlock = 500000;
    num_loops = 1;
    while num_loops <= 2000000
        if num_loops == dataBlock|| num_loops == 200000
           disp('entered or cuircit');
            if num_loops == dataBlock
                disp('num_loops = dataBlock');
                dataBlock = dataBlock + 500000;
            end
            num_loops = num_loops+1;
        end
    end

当我意识到将电路分成两个 if 语句会更快时,我在我的原始代码中尝试了它,但它似乎没有任何影响。可能是因为我使用的代码比我用于测试和在此处提供的代码更复杂和冗长。

有谁知道为什么运行 or 电路的程序需要这么长的时间?对可能的替代方案有什么想法吗?

您在第一个 if 中递增 num_loops。此变量始终等于 1。重写此行:num_loops = num_loops+1; 就在最后一个 end 之前。否则你的第二个算法有超级循环(没有尽头)。