如何在MATLAB中第一次迭代后忽略for循环中的部分代码?

时间:2013-01-26 23:53:05

标签: matlab loops for-loop

我有一个似乎很简单的问题。我有一个for循环,我在每次迭代时调用不同的函数。如果某个条件成立,则只需要在第一次迭代时使用其中一些函数。解决这个问题的一种方法是在调用相关函数之前使用“if”语句检查条件,但是我想知道是否还有其他方法可以解决这个问题,因为我有10个以上的函数具有相同的情况(具有不同的当然条件)?例如,请查看以下伪代码:

for Iteration < Generation
    ...
    if ('certain condition 01 holds true')
        output = function01(arguments)
    end
    ...
    ...
    if ('certain condition 02 holds true')
        output = function02(arguments)
    end
    ...    
    ...
    if ('certain condition 10 holds true')
        output = function10(arguments)
    end
    ...
 end

如果我有10000次迭代,那么每个“if”语句应该被评估10000次,这显着增加了计算时间。是否有可能使用面向对象的编程和类而不是函数来使它更好,可能更快?

2 个答案:

答案 0 :(得分:4)

如果你总是需要检查某些条件,那么就没有办法避免它。但是,如果你知道前两个条件只能出现在第一个,比如500个循环中,那么将大循环分成两个 - 第一个包含所有10个条件(500个迭代),第二个条件只包含8个(总计 - 500次迭代)。

要记住的另一个重要事项是在条件中使用elseif或在循环中使用continue(前提条件是互斥的 - 我从您的代码示例中推断出这一点)。通过这种方式,您可以确保在找到相关条件后,其余的if语句将不会被执行。此外,您应该在循环开始时检查最可能的情况。即如果您知道在大多数情况下条件5最有可能,那么应首先检查条件5。通过这种方式,您可以减少评估if语句的次数。

最后,您可以使用switch语句 - 它比多个elseif更具可读性,如果其中一个条件为真,则会自动忽略以下条件。< / p>

答案 1 :(得分:2)

我不了解类和面向对象,但您可以将函数内部的顺序更改为:

...
% 'iteration' 1
if (condition1) then
    output = function1(args)
end

if (condition2) then
    output = function2(args)
end
.
.
.
for ix = 2:max
    % code inside loop
end

用文字表示,在循环开始之前放置第一次迭代时调用的代码,然后从第二次迭代开始。