Gnuplot:拟合数据的渐近曲线

时间:2015-05-27 13:04:47

标签: gnuplot

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

<div class="overlay">
  <span class="circle move"></span>
</div>

其中给出以下结果: http://imgur.com/PlQmalX.jpg

然而,由于这应该表现出学习效果,渐近曲线会更有意义,因为学习效果引起的性能提升最终会停止,使得线条均匀。

据我所知,渐近的cuves是用f(x)= 1 / x创建的。所以我把我的代码改为

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/PimTa1T

有人可以解释我在这里做错了吗?

由于

1 个答案:

答案 0 :(得分:1)

有许多曲线显示渐近行为,1/x可能不是描述物理或生物过程时最常出现的曲线。通常,这些过程可能会出现某种指数衰减。根据您显示的数据,我不认为您可以总结一下您应该使用哪种型号,而不是&#34;它会衰减&#34;。如果你已经知道你期望的功能行为是什么,那就会有所不同。也就是说,1/x曲线的一般形式应该是f(x) = a/(x-x0) + c,这可能会在你适应它时给你一些有意义的结果:

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

如果初始值不好,拟合可能会显示此类函数的不稳定性,您应该/可能需要提供合理的初始值或将问题重新表述为线性关系。您可以通过更改变量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./($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./($1-x0)):2 via a,c # record fit errors for a and c