继续‘;对于’;Matlab中现有变量的循环
我有一个Matlab脚本,包括一个继续‘;对于’;Matlab中现有变量的循环,matlab,debugging,for-loop,Matlab,Debugging,For Loop,我有一个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)处设置了一个断点并恢复
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
循环?解决方案可以首先捕获以下异常并从中传递:
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
,在调试后计算缺少的信息。当您的算法不依赖于结果的上一个值(或不是递归的)时,此解决方案有效。在解决方案上可以首先捕获以下异常并从中传递:
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
,在调试后计算缺少的信息。当您的算法不依赖于结果的上一个值(或不是递归的)时,此解决方案有效。您不能在循环内部以编程方式更改for
循环迭代器
例如:
for ii = 1:3
disp(ii)
ii = 3;
end
% Load data here
for ii = 3:3
disp(ii)
end
印刷品:
1
2
3
如果您要根据收到的错误修改代码,这将是没有好处的,因为它不会反映代码中的更改,直到调试器退出并再次执行代码(除非您在调试器中手动执行)。如果您不修改代码,您可能会使用一个子句来捕获可修复的问题
如果正在为以后的索引加载数据,然后重新启动,则可以更改for
循环的开始位置,或者在期间使用循环(如果合适)
例如:
for ii = 1:3
disp(ii)
ii = 3;
end
% 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
%在此处加载数据
ii=3
而ii则不能在循环内部以编程方式更改for
循环迭代器
例如:
for ii = 1:3
disp(ii)
ii = 3;
end
% Load data here
for ii = 3:3
disp(ii)
end
印刷品:
1
2
3
如果您要根据收到的错误修改代码,这将是没有好处的,因为它不会反映代码中的更改,直到调试器退出并再次执行代码(除非您在调试器中手动执行)。如果您不修改代码,您可能会使用一个子句来捕获可修复的问题
如果正在为以后的索引加载数据,然后重新启动,则可以更改for
循环的开始位置,或者在期间使用循环(如果合适)
例如:
for ii = 1:3
disp(ii)
ii = 3;
end
% 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
%在此处加载数据
ii=3
while ii可能使用已经计算的数据初始化数据集,然后在下一个迭代开始循环。可能使用已经计算的数据初始化数据集,然后在下一个迭代开始循环。对于while
循环,仍然不允许更改循环变量ii
?我没有检查。您可以在while
循环中更改循环变量。谢谢,我现在明白了。对于while
循环,仍然不允许更改循环变量ii
?我没有检查。您可以在循环中更改循环变量,而循环。谢谢,我现在明白了。