2013-09-10 4 views
1

Я пытаюсь установить кривую мощности в свои данные следующим образом: Код gnuplot.Подстройка кривой мощности в gnuplot для избыточных значений

set termoption enhanced 
f(x) = a*x**b; 
fit f(x) 'data.txt' via a,b 
plot 'data.txt' with points title 'data points', \ 
f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b) 

Он отлично работает для нерезервированных данных по оси х. (повторений нет).

Но для следующих типов данных: Он подгонки кривой только к точкам первой величины х т.е. 1, (Помеченные). а не всему набору данных.

данных:

1 2194* 
1 2675* 
1 1911* 
2 966 
2 1122 
2 951 
2 1356 
3 935 
3 934 
4 851 
4 886 
4 849 
4 597 

ответ

2

Вы должны установить соответствующие исходные значения для a и b, так как нелинейная фитинга обычно не имеет один единственный минимум. Если вы не укажете никаких начальных значений, предполагается 1, который идет в совершенно неправильном направлении в вашем случае.

Итак, со следующим сценарием

set termoption enhanced 
f(x) = a*x**b 
b = -1 
a = 2000 
fit f(x) 'data.txt' via a,b 
plot 'data.txt' with points title 'data points', \ 
    f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b) 

вы получаете надлежащую подгонку:

enter image description here

+0

Еще раз спасибо. Я хочу, чтобы значение r^2 отображалось. как это сделать. – BioDeveloper

+0

@ Nari2 У меня нет опыта в статистике за фитингом, но gnuplot обеспечивает, например. переменная 'FIT_STDFIT' после подгонки (установите gnuplot docs о команде' fit'). Вы можете просто использовать 'print FIT_STDFIT' для печати своего значения на стандартный вывод или, может быть,' set label на графике 0.1, графа 0.1 left sprintf ('FIT_STDFIT =% f', FIT_STDFIT) 'перед командой' plot'. – Christoph

+0

Я был рад, что вы ответили. Я хочу знать, как должны быть заданы значения a, b, если мои данные будут меняться каждый день. – BioDeveloper

Смежные вопросы