matlab高手,在for循环中,设置每个循环的最大时间,如果超过该时间,跳出本次循环,进入下一次循环。

举个例子:
for i=1:10000
z=fmincon(@f(x),x0);
end.
这个例子里,如果我在某次,比如第k次吧,寻求f(x)的最小值时耗时过长,我需要直接进入到k+1次循环,请问具体的实现方法是什么?请大神指点!
假设我每次循环执行的时间上限是1分钟。

题主的想法很不错,但答案可能让你失望:MATLAB 的循环并没有提供限制最大运行时间的这样一种机制。

事实上,这种机制要求完成时间限制的进程具备更高的优先级,能够终结循环体对应的进程,也就是异常退出。我想不出自己熟悉的编程语言有哪个提供了这种能力。
之所以不提供这种机制,原因也是可以理解的:如果要求一旦到达指定的最大时间限制,就直接立即结束该进程,显而易见的后果是,当然会导致这个进程不能提供正常的输出。而更严重的是,在这个进程内部,完全可能存在会造成其它影响的行为,异常结束进程往往会存在安全隐患。

作为一种变通的做法,可以通过改写循环体的内容,一定程度上达到希望的要求。比如,改写fmincon函数,在其主循环中加入时间判断,一旦到了要求的时间,就放弃该次优化,返回失败的结果。但这并不能保证精确地满足时间限制。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-08-30
建议不要这么弄,你可以试一试不同的初值,然后能够解决问题的那个就好。追问

恩,这个我知道,不过因为是循环,我不确定到底到哪次会出现这种跑不下去的问题。

追答[X,FVAL,EXITFLAG]=fmincon(@f(x),x0);
while(EXITFLAG~=1)
[X,FVAL,EXITFLAG]=fmincon(@f(x),rand(size(x0)));
end

本回答被提问者和网友采纳
相似回答