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 экспоненциально велики).

Другие вопросы по тегам