我有一个蒙特卡罗马尔可夫链模拟测试。系统大小为n
。现在我想知道n
与成本之间的关系。换句话说,我想知道费用中n
的功率/顺序,例如,n^2.5
还是n^2.8
?
由于涉及的因素和步骤很多,我不想先分析复杂性。我非常希望运行模拟以获得机器时间成本。所以我的问题是如何根据机器时间得到成本关系n^x
,其中x
未知?
例如,当n = 1000
时,需要t_1
才能执行整个扫描,这是1000
蒙特卡罗步骤。在n = 666
时,需要t_2
才能执行整个扫描,这次是666
蒙特卡罗步骤。对于t_1
的不同大小,我可以获得t_2
,t_3
,n
,然后如何查看费用的顺序?
答案 0 :(得分:2)
使用tic, toc
获取不同n的时间。如果您分配给定n
的时间,则获得平均值。
然后,如果你知道它具有指数形式,你可以得到
order = log(avgtime);
使用每个n
值的不同订单值,您将获得最佳匹配(可能polyfit
)。
答案 1 :(得分:1)
This MathWorks article有一些一般性建议,包括timeit
,tic
/ toc
和cputime
。
自timeit
以来,it accounts for first-time run costs功能通常更好。但是,运行起来稍微复杂一些,因为它需要一个函数句柄,也可以选择句柄中输出参数的数量:
X = [1 2; 3 4; 5 6; 7 8];
f = @() svd(X);
t = timeit(f, 3)
与tic
/ toc
相比,它之所以如此方便,准确的原因是:
timeit
多次调用指定函数,并计算测量值的中位数。
cputime
函数很有意思,因为与多线程计算机上的tic
/ toc
和timeit
相比,它会提供更高的数字。如果您对计算负担感兴趣,也许这是一个更相关的指标。 The cputime Function vs. tic
/toc
and timeit
曾经有flops
命令返回浮点运算的数量,但那是removed ages ago。如果你真的想要计算翻牌,那么Lightspeed toolbox就有了这个功能。