MATLAB:循环过程的中断



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

for steps = 1:maxsteps
(various calculations)
if F(steps) - F(steps-1) < 0.001
Break
end
end

F(步数) 是一个 N(=maxsteps) 维度向量,在每个循环中,通过在每次迭代中不同的两个值之间执行总和来"获取"一个新列:F(steps) = a + b。

假设最大步数为 8(或任何整数),当我执行函数时,我得到以下错误:

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

如果我在没有 Break 的情况下执行该函数,那么它就可以完美运行(但我当然失去了阈值的选项)。

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

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

F(1) - F(0) < 0.0001 

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

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

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

如果第一个条件的计算结果为false,则使用逻辑和 (&&) 将不会计算第二个条件。

最新更新