我正在尝试使用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
有人可以解释我在这里做错了吗?
由于
答案 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