做算法仿真的朋友,肯定被 MATLAB 运行时间 折磨过。前两天写了一个图像滤波的脚本,本以为优化得不错,结果一跑花了 15 秒。到底是算法慢,还是我计时姿势不对?2026年了,别再只会用 tic/toc了,Matlab 其实提供了好几种计时手段,选错了方法,你的性能评估全是假的。今天聊聊怎么精准“掐表”。
这是最常用的一对组合,简单粗暴。
tic;
% 你的核心算法代码
result = magic(5000);
t_elapsed = toc;
fprintf('耗时:%.4f 秒\n', t_elapsed);
tic是按下秒表,toc是读数。它测的是墙上时间(Wall-clock time),也就是你盯着屏幕感受到的实际流逝时间。Matlab 官方也推荐这个。但要小心一个坑:如果你代码里嵌套了 tic,toc只会找最近的那个配对。所以别在循环里乱插 tic,不然测出来的时间乱七八糟。如果你想更严谨,或者需要记录具体的年月日时分秒,用 clock。
t_start = clock;
% 你的核心算法代码
pause(2); % 模拟耗时操作
t_end = clock;
elapsed_time = etime(t_end, t_start);
fprintf('耗时:%.4f 秒\n', elapsed_time);
clock会抓取系统当前的日历时间(年、月、日、时、分、秒),etime负责计算差值。这种方法比 tic/toc稍微重一点,因为它要调用操作系统的时钟中断。但对于长时间运行的任务(比如跑一夜的仿真),用它更稳妥,不用担心 Matlab 内部计时器溢出。前两种方法测的是“你等了多久”,而 cputime测的是“CPU忙了多久”。

t_cpu_start = cputime;
% 你的核心算法代码
A = rand(3000);
B = inv(A);
t_cpu_used = cputime - t_cpu_start;
fprintf('CPU耗时:%.4f 秒\n', t_cpu_used);
如果你的代码里有很多 pause(暂停),或者等待硬盘读写,那么 cputime会远小于 tic/toc的结果。因为它只计算 CPU 核心实际干活的时间。对于纯计算密集型任务(比如矩阵求逆、傅里叶变换),用 cputime能帮你判断算法到底吃没吃饱 CPU。我做过一个测试:写一个脚本,里面包含 pause(1)和 0.5 秒的矩阵运算。
tic/toc显示大概 1.5 秒(因为包含了等待时间)。 cputime显示只有 0.5 秒(只算运算时间)。 武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。