Gnuplot: использовать подгонку в логарифмическом масштабе
Мне нужно сделать линейное приближение. Однако это должно быть в масштабе журнала.
Вот мой скрипт gnuplot:
f(x)= a*x+b
fit f(x) "d0.dat" via a,b
set logscale x
set logscale y
plot "d0.dat" with points lt rgb "#ff0000" title "Points", \
f(x) with lines lt rgb "#ff00ff" title "Approximation"
Ясно, что приближение неверно. Может ли кто-нибудь помочь мне исправить это. Я не нашел ничего в Google.
2 ответа
Решение
Gnuplot правильно подгоняет ваши данные к предоставленной вами функции - прямой линии.
Проблема заключается в том, что использование логарифмической шкалы для оси y не масштабирует данные - только то, как данные наносятся на график.
Попробуйте подогнать его под степенной закон:
f(x)= a*x**b
fit f(x) "d0.dat" via a,b
set logscale x
set logscale y
plot "d0.dat" with points lt rgb "#ff0000" title "Points", \
f(x) with lines lt rgb "#ff00ff" title "Approximation"
Я на самом деле рекомендую подгонку в logscale напрямую:
fl(x) = a+b*x
fit fl(x) 'data.dat' u (log($1)):(log($2)) via a,b
replot exp(fl(log(x))) t 'log approx'
Разница заметна, когда (несколько) значений для больших х не соответствуют. В противном случае функция стоимости слишком сильно затронута (поскольку x и y экспоненциально велики).