【问题标题】:Gnuplot: Fitting asymptotic curve to dataGnuplot:将渐近曲线拟合到数据
【发布时间】:2015-05-27 13:04:46
【问题描述】:

我正在尝试使用 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 没有为 x=0 定义,并且对于大 x 收敛到 y=0。尝试手动将这个函数“拟合”到你的数据集,你不会有太大的成功。

标签: gnuplot


【解决方案1】:

有许多曲线表现出渐近行为,1/x 可能不是描述物理或生物过程时最常出现的曲线。通常,这些过程可能会显示出某种指数衰减。根据您显示的数据,我认为您无法得出关于您应该使用哪种模型的任何结论,除了“它会衰减”。如果您已经知道您期望的功能行为是什么,那会让事情变得不同。也就是说,你的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2019-10-13
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多