【问题标题】:Power curve fitting in gnuplot for redundant values在 gnuplot 中拟合冗余值的功率曲线
【发布时间】:2013-09-10 07:22:09
【问题描述】:

我正在尝试使用以下 gnuplot 代码将功率曲线拟合到我的数据中。

set termoption enhanced
f(x) = a*x**b;
fit f(x) 'data.txt' via a,b
plot 'data.txt' with points title 'data points', \
f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b)

它适用于 x 轴的 非冗余 数据。 (没有重复)。

但对于以下类型的数据:它仅将曲线拟合到第一个 x 值的点,即 1,(加星标)。而不是整个数据集。

数据:

1   2194*
1   2675*  
1   1911*  
2   966  
2   1122  
2   951  
2   1356  
3   935  
3   934  
4   851  
4   886  
4   849  
4   597  

【问题讨论】:

    标签: gnuplot curve-fitting


    【解决方案1】:

    您必须为ab 设置适当的起始值,因为非线性拟合通常没有唯一的最小值。如果您不指定任何起始值,则假定为 1,这在您的情况下是完全错误的方向。

    所以,使用以下脚本

    set termoption enhanced
    f(x) = a*x**b
    b = -1
    a = 2000
    fit f(x) 'data.txt' via a,b
    plot 'data.txt' with points title 'data points', \
         f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b)
    

    你得到一个合适的:

    【讨论】:

    • 再次感谢。我希望显示 r^2 值。如何做到这一点。
    • @Nari2 我在拟合背后的统计方面没有专业知识,但 gnuplot 提供了例如拟合后的变量FIT_STDFIT(设置有关fit 命令的gnuplot 文档)。您可以只使用print FIT_STDFIT 将其值打印到标准输出,或者在plot 命令之前使用set label at graph 0.1, graph 0.1 left sprintf('FIT_STDFIT = %f', FIT_STDFIT)
    • 很高兴您的回答。我想知道如果我的数据每天都在变化,应该如何设置 a、b 的值。
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多