我用Matlab写了一个长时间运行的脚本。
tic;
d = rand(5000);
[a,b,c] = svd(d);
toc;
它似乎永远在运行。因为我在编辑器窗口中按了F5。所以我不能在Matlab控制台中按C-Break来停止。
我只想知道如何停止脚本。我现在正在使用任务管理器来杀死Matlab,这真的很愚蠢。
谢谢。
发布于 2011-01-25 19:51:05
Matlab help指出,对于运行时间较长的M文件,或者调用运行时间较长的内置或MEX文件,Ctrl+C并不总是有效地停止执行。通常,这发生在Microsoft Windows平台上,而不是UNIX1平台上。如果遇到此问题,可以通过在M文件中包含drawnow、pause或getframe函数来帮助MATLAB中断执行,例如,在大型循环中。请注意,如果使用-nodesktop选项启动MATLAB,则Ctrl+C的响应速度可能会较慢。
所以我不认为有任何选择。这发生在许多复杂的matlab函数中。我们要么等待,要么不用它们!
发布于 2013-07-02 01:27:05
如果ctrl+c因为你的脚本太长/太复杂而没有立即响应,那就按住它。
当matlab执行一些更深层的脚本时,break命令不会运行,或者它不会在缓冲区中记录ctrl序列,或者在完成这些代码段之前或之后清除缓冲区。在这两种情况下,当matlab返回执行更多脚本时,它将识别出您正在按住ctrl+c并终止。
对于运行时间较长的程序,我通常会尝试找到一个好的位置来提供状态更新,并且我总是使用tic和toc来伴随着一些时间。根据我在做什么,我可能会使用运行时间,分段时间,某种平均值,等等。
对于真正长时间运行的程序,我发现这是非常有用的http://www.mathworks.com/matlabcentral/fileexchange/16649-send-text-message-to-cell-phone/content/send_text_message.m
但是看起来他们也有一些新的函数来实现这个功能。
发布于 2011-01-26 00:33:51
MATLAB在执行mex实现的函数时不响应Ctrl-C。另外,当MATLAB分配大量内存时,它不会响应。一种好的做法是始终针对少量数据运行函数,并在所有测试通过时针对实际规模运行函数。当时间是一个问题时,您可能想要分析每段代码运行的时间以及它们的大致时间复杂性。
https://stackoverflow.com/questions/4791144
复制相似问题