MATLAB Cpu time =0 问题

MATLAB Cpu time =0 issue

我用 MATLAB 写了一个函数。在该函数中我使用:

t = cputime;
...
time = cputime-t;

我在点上进行了一些操作。每当我不调用该函数而是手动 运行 函数中的代码时,我总是有时间 = 0.15 等

但是,在另一个脚本中,我调用了同一个函数。在第一个电话中,它再次给我时间 = 0.15。但是,如果我清除工作区并再次调用该函数,我的时间 = 0。只有 0,没有小数。我不知道为什么,因为该功能正在运行并为我提供了我想要的东西。 如果我多次 运行 函数中的代码,我永远不会有时间 = 0。

可能的问题是什么?为什么从脚本中多次调用一个函数会使它成为 0 秒,即使工作区已被清除?

您应该始终使用函数 timeit 来计时代码。其他任何东西充其量都是不准确的。

timeit 首先“预热”系统,然后 运行 重复代码以获得对所需时间的精确估计。

当要执行的代码很短时,使用cputimetic/toc会导致测量不精确。时钟的分辨率不够好,无法正确测量它(这就是为什么你可以看到 0 而不是一个非常小的数字),并且测量可能会受到计算机中同时发生的其他事情的影响。

最后,MATLAB 使用 JIT(即时)编译器。函数内的代码在您第一次执行时会被解析和编译一次。后续时间只需重复使用编译后的代码,因此 运行 快得多。

在这方面,函数和脚本之间的区别M-file我不清楚。过去脚本不是 JIT-compiled,只有函数才是。但我怀疑这在最新版本的 MATLAB 中可能已经改变。在任何情况下,直接键入或在命令提示符下 copy/pasted 的东西都不是 JIT-compiled,因此总是和第一次 运行 函数一样慢。

当您执行 clear all 时,您会从内存中清除 pre-loaded 和 pre-compiled 代码,从而使后续代码 运行 变慢。您通常不应使用 clear all。要清除变量,只需执行 clear.