验证两个图的结果

时间:2013-12-13 00:15:41

标签: c++ plot benchmarking

在我们的一个实验中,我们为变量的不同值绘制了程序运行时的图形,比如x cnad将其称为plot1。我们认为程序运行时与变量成正比,比如a,与b成反比。因此,我们还针对x绘制了ab的图表,并将其称为plot2和plot3。

为了验证不涉及其他因素,我们希望以某种方式组合plots2和plots3,这样我们得到的是接近plot1。我在考虑绘制a/b,并尝试使用二进制搜索来查找常量k

有更好的方法吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

不确定我对您的问题的理解是否正确,但是:

我们有一个程序,它接受一个输入x并给我们一个数字(它的运行时)T(x)。 此外,我们还有另外两个函数,a(x)> = 0和b(x)> 0。然后存在常数f,g,使得T(x)~f * a(x),T(x)~g / b(x)。 我们有函数a(x)和b(x),它们很容易计算。此外,我们可以计算某些x值的T(x),但这种计算相当昂贵。我们想要建立估计F:T(x)= F(a(x),b(x))。 重要的是,依赖关系T(x)~f * a(x)和T(x)~g / b(x)都不精确(否则我们只能测量T(1000),取f = T(1000) / a(1000)并且具有T(x)的公式。

作为一般说明,在搜索参数时,最好转换表达式,使其与参数关系成线性关系(这样我们就可以使用最小二乘法)。 我将以F(a,b)= exp(C)* a ^(k + 1)* b ^(k)的形式寻找F. 这假定为关系

ln(T(x)) ~ C+(k+1)*ln(a(x))+k*ln(b(x))

或者,分组后,

ln(T(x))-ln(a(x)) ~ k*[ln(a(x))+ln(b(x))]+C

现在我们测量一些x,构建点(u,v)的T(x):u = ln(T(x)) - ln(a(x)),v = ln(a(x) )+ ln(b(x))并尝试找到变量k,C,使得线u = k * v + C最接近于构建的点(通过线性方块或任何其他方法)。如果k非常接近0或-1,则意味着f * a或g / b近似更精确,另一个应该被丢弃。

PS 选择值x来测量T(x)是个好主意,这样ln(a(x))+ ln(b(x))会尽可能地变化。< / p>