如何评估模拟算法的成本

时间:2014-02-27 17:07:17

标签: matlab complexity-theory simulation time-complexity montecarlo

我有一个蒙特卡罗马尔可夫链模拟测试。系统大小为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_2t_3n,然后如何查看费用的顺序?

BTW,使用不同的计算机来获取机器时间是否重要?对不起我的无知。

2 个答案:

答案 0 :(得分:2)

使用tic, toc获取不同n的时间。如果您分配给定n的时间,则获得平均值。

然后,如果你知道它具有指数形式,你可以得到

order = log(avgtime);

使用每个n值的不同订单值,您将获得最佳匹配(可能polyfit)。

答案 1 :(得分:1)

This MathWorks article有一些一般性建议,包括timeittic / toccputime

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 / toctimeit相比,它会提供更高的数字。如果您对计算负担感兴趣,也许这是一个更相关的指标。 The cputime Function vs. tic/toc and timeit

曾经有flops命令返回浮点运算的数量,但那是removed ages ago。如果你真的想要计算翻牌,那么Lightspeed toolbox就有了这个功能。