Вы всегда должны использовать функцию timeit
для временного кода.Все остальное в лучшем случае неточно.
timeit
сначала «прогревает» систему, затем несколько раз запускает код для получения точной оценки времени, которое требуется.
Использование cputime
или tic
/ toc
приводит к неточным измерениям, когда выполняемый код короткий.Разрешение часов просто недостаточно для его правильного измерения (именно поэтому вы можете видеть 0 вместо очень маленького числа), и на измерение могут влиять другие элементы, происходящие на вашем компьютере одновременно.
Наконец, MATLAB использует JIT (Just In Time) компилятор.Код внутри функции анализируется и компилируется один раз при первом ее выполнении.В последующие времена просто повторно используйте скомпилированный код, поэтому выполняйте его намного быстрее.
В этом отношении разница между функцией и M-файлом скрипта мне не ясна.Раньше было так, что сценарии не были JIT-скомпилированы, только функции были.Но я подозреваю, что это могло измениться в последних версиях MATLAB.В любом случае, вещи, непосредственно набранные или скопированные / вставленные в командную строку, не скомпилированы JIT и поэтому всегда будут такими же медленными, как и при первом запуске функции.
Когда вы делаете clear all
, вы очищаете предварительно загруженный и предварительно скомпилированный код из памяти, замедляя последующий код.Как правило, вы не должны использовать clear all
.Чтобы очистить переменные, просто сделайте clear
.