Гнуплот подходит к двум точкам - PullRequest
1 голос
/ 21 ноября 2011

Рассмотрим файл данных с двумя столбцами и двумя строками:

  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 ]

1 голос
/ 23 ноября 2011

Gnuplot использует нелинейный метод для определения параметров вашей функции f относительно определенного значения ошибки: limit for stopping : 1e-05.

Если вы измените это значение ошибки, ваша функция будет точно соответствовать,Значение ошибки может быть указано с помощью переменной FIT_LIMIT следующим образом:

FIT_LIMIT = 1e-8

С этим параметром ваши точки будут точно совпадать после 12 итераций.(По крайней мере на моей машине ^^)

1 голос
/ 21 ноября 2011

Мне кажется, что функция подбора кривой пытается найти истинные параметры.Это может быть связано с величиной ваших точек данных и / или попыткой согласовать линию с двумя параметрами только с двумя точками данных.

В любом случае, выполнив вычисления a и b в Excel или эквивалентные результаты:

a= 577.769
b = -2233787

Если вы дадите gnuplot хорошее предположение о том, какими они должны быть, например, a=500 иb=-2233700 и повторите процедуру, она должна успешно найти правильное решение:

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

a               = 577.769        
b               = -2.23379e+06   

Конечно, если вы подгоняете две точки к двухпараметрической прямой, гораздо проще вычислить значенияa и b от руки:

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