我在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
,则使用逻辑和 (&&
) 将不会计算第二个条件。