#gnuplot #function-fitting
#gnuplot #функция-подгонка
Вопрос:
Я хочу подогнать следующие данные:
70 0.0429065
100 0.041212
150 0.040117
200 0.035018
250 0.024366
300 0.02017
350 0.018255
400 0.015368
к следующей функции, которая является комбинацией экспоненциальной и гауссовой функций:
$ f (x) = a1*(a2* exp(-x/T2e) exp(-(x/T2g) **2))
$ подгонять f (x) ‘данные’ через a1, a2, T2e, T2g
Но это продолжает давать мне следующие результаты:
a1 = 0.0720021 /- 0.04453 (61.84%)
a2 = 0.310022 /- 0.9041 (291.6%)
T2e = 63291.7 /- 2.029e 07 (3.206e 04%)
T2g = 252.79 /- 32.36 (12.8%)
В то время как, когда я пытаюсь подогнать его отдельно к
$ g (x)=b* exp(-(x/T2g)**2)
$ подгонять g (x) ‘данные’ через b, T2g
Я получаю
b = 0.0451053 /- 0.001598 (3.542%)
T2g = 359.359 /- 16.89 (4.701%)
и
$ S (x) = S0* exp(-x/T2e)
$ подгонять S (x) ‘данные’ через S0,T2e
дает:
S0 = 0.057199 /- 0.003954 (6.913%)
T2e = 319.257 /- 38.17 (11.96%)
Я уже пытался установить начальные значения, но это не изменило результаты.
Кто-нибудь знает, что не так? Спасибо,
Комментарии:
1. пожалуйста, предоставьте свой полный код (в идеале, в виде кода копирования и вставки), который значительно сэкономит время для воспроизведения другими. Вы уверены, что эта функция вообще может подойти? Точек данных не слишком много и нет четкой характеристики, то есть гауссовского пика и экспоненциального хвоста.
2. $ S (x) = S0 * exp (-x / T2e) $ g (x) = b * exp (-(x / T2g) ** 2) $ подгонка S (x) ‘data’ через S0, T2e $ подгонка g (x) ‘data’ через b, T2g Я думаю, поскольку каждая функция в отдельности подходит с хорошим приближением, их сумма также должна соответствовать.
Ответ №1:
Хорошо, вы можете видеть экспоненциальный спад с горбом, который может быть гауссовым. Подход, как я добрался до подгонки: сначала исключаем точки данных 100 и 150 и подгоняем экспоненту, а затем устанавливаем гауссово значение примерно на 170. Вероятно, у вас не получится хорошей подгонки, потому что, по крайней мере, пик Гаусса сдвинут на некоторое значение x1
.
С помощью кода:
### fitting
reset session
$Data <<EOD
70 0.0429065
100 0.041212
150 0.040117
200 0.035018
250 0.024366
300 0.02017
350 0.018255
400 0.015368
EOD
a = 0.055
T2e = 310
b = 0.008
x1 = 170
T2g = 54
Exponential(x) = a*exp(-x/T2e)
Gaussian(x) = b*exp(-((x-x1)/T2g)**2)
f(x) = Exponential(x) Gaussian(x)
fit f(x) $Data u 1:2 via a,b,x1,T2e,T2g
plot $Data u 1:2 w lp pt 7, f(x) lc rgb "red"
### end of code
Вы получите:
a = 0.0535048 /- 0.00183 (3.42%)
b = 0.00833589 /- 0.001006 (12.06%)
x1 = 170.356 /- 5.664 (3.325%)
T2e = 315.114 /- 12.94 (4.106%)
T2g = 54.823 /- 12.13 (22.12%)