MATLAB:中断循环过程

时间:2016-12-09 23:12:27

标签: matlab loops optimization

我在matlab函数中创建了一个'for'循环。我想要做的是执行循环预定的迭代次数(maxsteps),但如果最近的结果F(步骤)和前一个结果F(步骤-1)之间的差异低于指定的阈值,那么缩短循环次数:

for steps = 1:maxsteps

  (various calculations)

 if F(steps) - F(steps-1) < 0.001
   Break
 end
end

F(步骤)是N(= maxsteps)维度向量,其在每个循环上通过执行在每次迭代时不同的两个值之间的总和来“获得”新列:F(步骤)= a + b。

假设执行函数时maxsteps为8(或任何整数),我会收到以下错误:

下标索引必须是实数正整数或逻辑。

如果我执行没有Break的函数,那么它可以完美地工作(但我当然会失去阈值的选项)。

编辑[1] :现在我再次看到了问题,我认为问题可能出在第一次迭代中。因为当步数= 1时,则F(1)-F(0)<1。 0.001,我认为这是不可能的。我需要考虑一些方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

问题(正如您所注意到的)是第一次通过循环,您正在执行此操作:

F(1) - F(0) < 0.0001 

此零索引无效并导致您的错误。

您要做的是确保至少执行一次整个循环(以避免零索引)。因此,您可以为if语句添加额外的条件。

if steps > 1 && (F(steps) - F(steps-1)) < 0.0001

如果第一个条件符合&&,则使用逻辑和(false)将不会评估第二个条件。