Gnuplot, кажется, терпит неудачу в линейной подгонке - PullRequest
0 голосов
/ 30 октября 2019

У меня проблема с gnuplot. В моих данных есть очень очевидная линейная зависимость в определенном диапазоне. Поэтому я хочу сделать линейное приближение в этом диапазоне. Но gnuplot выбрасывает что-то вроде ортогональности (как и должно быть). Я создал следующий файл подгонки:

set fit errorvariables
f(x)=a*x+b
fit f(x) 'Data1f.txt' using 1:2:3:4 xyerrors via a,b
g(x)=c*x+d
fit g(x) 'Data2f.txt' using 1:2:3:4 xyerrors via c,d
set xlabel 'U_G  [V]'
set ylabel '{/Symbol=\326}(U_{Ph}-U_0)  [{/Symbol=\326}U]'
set xrange [0:0.9]
set yrange [0:4.5]
set grid
plot 'Data1.txt' using 1:2:3:4 w xyerrorbars title 'Measurement 1', f(x) title 'f(x)', 'Data2.txt' using 1:2:3:4 w xyerrorbars title 'Masurement 2', g(x) title 'g(x)' 

И это приводит к следующему графику:

enter image description here

Я незнаю, почему он не соответствует явно линейной части данных («Data1f» и «Data2f» содержат точно такие же значения, как «Data1» и «Data2» только с некоторыми опущенными точками данных (я пробовал это, когда диапазонКоманды 'fit [число: число] f (x) ......' показали тот же результат.) Даже LibreOffice Calc смог дать мне подходящую кривую, которая привела к ожидаемой (но LibreOffice Calc не можетобрабатывать ошибки - только сами точки данных).

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Вы инициализируете a, b, c и d рядом с некоторым значением, которое ожидаете. Тогда попробуйте, это сработает. Первоначально значение может быть случайным числом мусора, и я мог бы решить ту же проблему, инициализируя константы с некоторыми ожидаемыми близкими значениями

0 голосов
/ 30 октября 2019

Поскольку вы указали диапазон после подгонки , gnuplot подгоняет линейную функцию к полному набору данных, который, как вы сказали, является нелинейным. Поэтому результат явно плохой. Если вы измените порядок своих команд, fit будет использовать только данные в диапазоне, и вы должны получить разумное соответствие:

set xrange [0:0.9]
set yrange [0:4.5]
fit f(x) 'Data1f.txt' using 1:2:3:4 xyerrors via a,b
fit g(x) 'Data2f.txt' using 1:2:3:4 xyerrors via c,d
...