【问题标题】:gnuplot fit line to two pointsgnuplot 将线拟合到两个点
【发布时间】:2011-11-23 17:13:55
【问题描述】:

考虑具有两列两行的数据文件:

  3869.    1602.  
  3882.    9913.

我想用 gnuplot 拟合一条线

gnuplot> f(x) = a * x + b
gnuplot> fit f(x) './data.txt' u 1:2 via a, b

Iteration 0
WSSR        : 3.43474e+07       delta(WSSR)/WSSR   : 0
delta(WSSR) : 0                 limit for stopping : 1e-05
lambda   : 2740.4

initial set of free parameter values

a               = 1.7524
b               = -1026.99
/

Iteration 1
WSSR        : 3.43474e+07       delta(WSSR)/WSSR   : -1.49847e-12
delta(WSSR) : -5.14686e-05      limit for stopping : 1e-05
lambda   : 274.04

resultant parameter values 

a               = 1.7524
b               = -1026.99

After 1 iterations the fit converged.
final sum of squares of residuals : 3.43474e+07
rel. change during last iteration : -1.49847e-12


Exactly as many data points as there are parameters.
In this degenerate case, all errors are zero by definition.

Final set of parameters 
======================= 

a               = 1.7524         
b               = -1026.99       
gnuplot>

它为拟合参数提供了错误的值。为什么会这样?我的 gnuplot 版本是Version 4.4 patchlevel 0

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    在我看来,曲线拟合函数正在努力寻找真正的参数。这可能与您的数据点的大小和/或尝试将具有两个参数的线仅拟合到两个数据点相关联。

    在任何情况下,在 Excel 中计算 a 和 b 或等效结果:

    a= 577.769
    b = -2233787
    

    如果你给 gnuplot 一个很好的猜测它们应该是什么,例如a=500b=-2233700 并重复此过程,应该会成功找到正确的解决方案:

    Final set of parameters 
    ======================= 
    
    a               = 577.769        
    b               = -2.23379e+06   
    

    当然,如果您要将两个点拟合到一条双参数直线上,手动计算ab 的值要容易得多:

    a = (9113-1602) / (3882-3869)
    b = 1602 - a * 3869
    

    【讨论】:

    • 感谢您的回答。你是什​​么意思说:“你的数据点的数量”?
    • Gnuplot 对参数 (a=1.75, b=-1027) 进行第一次猜测,如果未提供一个参数并迭代这些参数以获得真正的解决方案。在这种情况下,由于数据点 (1600-9000) 的相对大小(即大小),gnuplot 所做的第一个猜测特别糟糕,导致拟合函数失败。
    • 问题是(3869., 1.)(3870., 2.) 也失败了,而且差异要小得多。
    【解决方案2】:

    Gnuplot 使用非线性方法来确定函数f 相对于某个误差值的参数:limit for stopping : 1e-05

    如果您更改该错误值,您的函数将完全适合。可以使用FIT_LIMIT 变量指定错误值,如下所示:

    FIT_LIMIT = 1e-8
    

    使用此设置,您的点将在 12 次迭代后完全匹配。 (至少在我的机器上^^)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多