Подходит в питоне с Curve_Fit - PullRequest
       10

Подходит в питоне с Curve_Fit

0 голосов
/ 06 сентября 2018

Я должен сделать подбор, используя Curve_fit. Моя проблема в том, что вместо непрерывной кривой я получаю ломаную линию, как показано на рисунке. Вот мой код:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np  
from scipy.optimize import curve_fit

N=np.array([66851,200522,401272,801832,1200951])
e=np.array([2.88,1.75,1.17,0.80,0.71])

def er_func(x,A,c):
   return A/np.sqrt(x)+c
from scipy.optimize import curve_fit
popt, pcov=curve_fit(er_func,N,e,p0=[10,1000])
plt.plot(N,er_func(N,*popt),"b")
plt.plot(N,e,"xr")
plt.xlabel("Number of events")
plt.ylabel("Error [Chn]")

[https://i.stack.imgur.com/BZtnN.png][1]

Я думаю, что это происходит потому, что я строю функцию подгонки, вычисленную в соответствии с моими точками, а затем она соединяет пять точек прямой линией. Как я могу получить правильную посадку? Спасибо за любую помощь, вы можете предоставить.

1 Ответ

0 голосов
/ 06 сентября 2018

Я только показываю соответствующую часть кода. Вам нужно было определить точную сетку (N_mesh ниже) для построения кривой непрерывной подгонки. Я выделяю строки, добавленные / измененные комментарием

N=np.array([66851,200522,401272,801832,1200951])
N_mesh = np.linspace(N[0], N[-1], 100)  # Added (A mesh of 100 x-points)
e=np.array([2.88,1.75,1.17,0.80,0.71])

def er_func(x,A,c):
    return A/np.sqrt(x)+c
from scipy.optimize import curve_fit
popt, pcov=curve_fit(er_func,N,e,p0=[10,1000])
plt.plot(N_mesh,er_func(N_mesh,*popt),"b", label='Fit') # Modified
plt.plot(N,e,"xr", label='Actual data') # Modified
plt.legend(fontsize=14) # Added

выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...