【问题标题】:Continue ‘for’ loop with the existing variables in Matlab使用 Matlab 中的现有变量继续“for”循环
【发布时间】:2017-06-23 13:42:07
【问题描述】:

我有一个 Matlab 脚本,其中包含一个 for 循环,如下所示:

for k = 1:10
    c = myfun(k,a,b);
    result{k} = c;
end

现在,问题是在for 循环期间,有时myfun() 可能会出现错误并停止。修复myfun()中的错误后,如何继续使用变量的现有值运行?原因是myfun()会花很长时间才能得到结果,而之前的结果是对的。

例如,如果k == 4时发生错误,那么我将所有变量保存在当前工作区中。我在c = myfun(k,a,b); 处设置断点并恢复保存的变量,但我发现在下一个循环中,k 将是2,而不是我想要的5。我认为在 for 循环期间不允许 Matlab 修改 k 的值。我已经测试了几次。

如何使用一些现有数据继续 for 循环?

【问题讨论】:

  • 也许用你已经计算过的数据初始化你的数据集,然后在接下来的迭代中开始循环。

标签: matlab debugging for-loop


【解决方案1】:

您不能在循环内以编程方式更改 for 循环迭代器。

例如:

for ii = 1:3
    disp(ii)
    ii = 3;
end

打印:

 1

 2

 3

如果您要根据收到的错误修改代码,dbstop if error 将无济于事,因为在退出调试器并再次执行代码之前,它不会反映代码中的更改(除非您手动执行在调试器中)。如果您不修改代码,您可能会使用 try/except 子句来捕获可修复的问题。

如果您要为以后的索引加载数据然后重新启动,您可以更改for 循环的开始位置,或使用while 循环(如果适用)。

例如:

% Load data here
for ii = 3:3
    disp(ii)
end

打印3

while 的解释是:

% Load data here
ii = 3
while ii <= 3
    disp(ii)
    ii = ii + 1;
end

同样的结果。

【讨论】:

  • 对于while循环,还是不允许改变循环变量ii?我没有检查。
  • 您可以在while 循环中更改循环变量。
  • 谢谢,我明白了。
【解决方案2】:

解决方案可以首先捕获以下异常并从中传递:

bug = [];
for k = 1:10
    try
        c = myfun(k,a,b);
        result{k} = c;
    catch
        warning('some bug for the following values:');
        display([k a b]);
        bug = [bug; k a b];
        result{k} = NaN;
    end
end

然后迭代bug 以在调试后计算缺失的信息。当您的算法不依赖于结果的先前值(或不递归)时,此解决方案有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多