Gnuplot:将渐近曲线拟合到数据

Gnuplot: Fitting asymptotic curve to data

我正在尝试使用 gnuplot 为我的数据拟合渐近曲线。它是一个显示测试期间反应时间结果的数据集。我已经能够使用以下代码绘制数据并通过它拟合一条直线。

f(x) = a*x + c;
fit f(x) 'ReactionLearning.txt' using 1:2 via a,c

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \
    f(x) with lines notitle

结果如下: http://imgur.com/PlQmalX.jpg

然而,由于这应该显示学习效果,渐近曲线会更有意义,因为学习效果引起的性能提升最终会停止,使线条变得平坦。

据我了解,渐近曲线是使用 f(x) = 1/x 创建的。所以我将代码更改为

f(x) = 1/(a*x)
fit f(x) 'ReactionLearning.txt' using 1:2 via a

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \
    f(x) with lines notitle

但是,我得到了这个输出:http://imgur.com/PimTa1T

谁能解释一下我做错了什么?

谢谢

有许多曲线显示渐近行为,而 1/x 可能不是描述物理或生物过程时最常出现的曲线。通常,这些过程可能会显示出某种指数衰减。根据您显示的数据,除了 "it decays" 之外,我认为您无法得出关于应该使用哪种模型的任何结论。如果您已经知道您期望的功能行为是什么,那么事情就会有所不同。也就是说,你的 1/x 曲线的一般形式应该是 f(x) = a/(x-x0) + c,当你适应它时它可能会给你一些有意义的结果:

f(x) = a/(x-x0) + c
fit f(x) "data" via a,c,x0

由于如果初始值不好,拟合可能会显示此类函数的不稳定性,因此您 should/might 需要提供合理的初始值或将问题重新表述为线性关系。您可以通过更改变量 y = 1/(x - x0) 来完成后者,并对 x0 的不同值进行拟合。记录它们每个的拟合误差(由 gnuplot 输出),并查看误差如何作为 x0 的函数最小化:它应该是最佳值的二次方。像这样:

f(x) = a*x + c
x0 = 1. # give some value for x0
fit f(x) "data" u (1./(-x0)):2 via a,c # record fit errors for a and c
x0 = 3. # give some other value for x0
fit f(x) "data" u (1./(-x0)):2 via a,c # record fit errors for a and c