gnuplot适合两点

时间:2011-11-21 09:47:50

标签: gnuplot

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

  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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

FIT_LIMIT = 1e-8

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