Подгонка Gnuplot

#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%)
  

введите описание изображения здесь