如果一个程序运行需要几个小时或者更长的时间,这样的程序,如果中途没有任何输出和显示的话,用户不知道这个程序何时结束,这非常不方便。这样的程序,一般是需要添加用时的监控的。
这里以一个最简单的循环举例,x=0,每次循环,x=x 1.
1、基本参数设定
clc,clear,close all
x = 0;
n = 10000000;
2、设定输出间隔
reportInterval = 1000000;
为什么要有间隔呢?因为如果每一步都输出的话, 一是这样没有必要,二会占用大量的计算时间,三是会增加系统内存消耗。。
3、获取初始时间
t = cputime;
4、检测输出间隔
这个可以用同余去做,matlab函数未mod,比如,10/2 = 5余0,则mod(10,2)=0.
10/3=3余1,则mod(10,3)=1.
我们用n/reportInterval,如果余数是0,则输出。代码为
if ~mod(i,reportInterval)
输出!
end
5、计算消耗时间
这个可以用e = cputime-t,来计算,
cputime函数获取当前步骤时间,减去初始时间t,得到消耗时间e.
6、输出计算进度和时间
自然是用fprintf函数去写,当然也可以输出到文件。
fprintf('当前运行了%8.2f%%, 用时%8.2fs\n',i/n*100,cputime-t)
%%是输出%,\n是回车,8.2f是指总共占8位,小数点占2位。
7、全部代码
clc,clear,close all
x = 0;
n = 10000000;
reportInterval = 1000000;
t = cputime;
for i = 1:n
x = x 1;
if ~mod(i,reportInterval)
fprintf('当前运行了%8.2f%%,
用时%8.2fs\n',i/n*100,cputime-t)
end
end
8、效果如下
当前运行了 10.00%, 用时 0.02s
当前运行了 20.00%, 用时 0.03s
当前运行了 30.00%, 用时 0.06s
当前运行了 40.00%, 用时 0.08s
当前运行了 50.00%, 用时 0.13s
当前运行了 60.00%, 用时 0.16s
当前运行了 70.00%, 用时 0.22s
当前运行了 80.00%, 用时 0.25s
当前运行了 90.00%, 用时 0.31s
当前运行了 100.00%, 用时 0.34s
9、over!