Как получить точечные данные из аппроксимирующей кривой? - PullRequest
0 голосов
/ 29 ноября 2018

Я построил кривые, подгоняя некоторые существующие точки, используя gnuplot.

код в следующем виде:

f1(x)=a1/(x**b1)+c1
fit f1(x) "41a091_input.txt" u 1:2 via a1,b1,c1
plot f1(x) with line lt 1 lw 4 lc rgb "blue" notitle, \
    '41a091_input.txt' using 1:2:3 with yerrorbars lw 2.2 lc rgb "blue" title "∑41a(091)"

Данные в следующем виде:

21.8124 1.11693 0.00545168
30.8669 1.07328 0.00485237 
44.6701 1.04708 0.00411839
53.6699 1.03787 0.00301346
75.9751 1.02555 0.00304312

Мой вопрос:

Как получить данные из любой точки этой кривой?Например, когда х = 50?

1 Ответ

0 голосов
/ 29 ноября 2018

хорошо, у вас есть функция подгонки f1(x) и параметры a1,b1,c1 установлены.Итак, чтобы получить значение x=50, просто наберите print f1(50).Или, если вы хотите построить это:

### start code
reset session

$Data <<EOD
21.8124 1.11693 0.00545168
30.8669 1.07328 0.00485237 
44.6701 1.04708 0.00411839
53.6699 1.03787 0.00301346
75.9751 1.02555 0.00304312
EOD

f1(x)=a1/(x**b1)+c1
fit f1(x) $Data u 1:2 via a1,b1,c1
print sprintf("a1: %g, b1: %g, c1: %g", a1,b1,c1)

XValue = 50
set label 1 at XValue,f1(XValue)+0.01 sprintf("f1(%g): %g",XValue,f1(XValue)) 
set arrow 1 from XValue,graph 0 to XValue,graph 1 nohead ls 0

plot f1(x) with line lt 1 lw 4 lc rgb "blue" notitle,\
 $Data using 1:2:3 with yerrorbars lw 2.2 lc rgb "blue" title "∑41a(091)",\
 [XValue:XValue] f1(XValue) w p lt 6 lc rgb "red" ps 2
### end of code

, что приводит к чему-то вроде: enter image description here

...