Я пытаюсь подогнать некоторые данные к кривой, используя метод leastsq.
Моя кривая не выглядит так, как я хочу, в пятой точке наблюдается огромный провал.Я думаю, что мне нужно добавить ошибки, чтобы получить более плавную кривую, но я не знаю, как добавить ошибки данных при подгонке кривой.Кроме того, ошибки коррелированы.
import numpy as np
from math import pi
from math import log
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
afij=np.array([ 1.09440000e+00, -1.00000000e+00, -4.73000000e-02,
-1.90580000e+00, -1.25000000e+00, -2.44535000e+02,
-1.54989000e+01, -9.39460000e+00, -3.45830000e+00]) #coefficients
F2=np.array([ 112.47114172, 108.74591788, 107.34258013, 108.03149139,
102.18850331, 100.04522384, 91.4210755 ]) #ydatapoints
mudr2=np.array([ 40.05298013, 32.10596026, 31.11258278, 26.94039735,
19.47019868, 13.66887417, 3.81456954]) #xdata points
dmss=array([ 426541.68767453, 437276.93612855, 564193.26435977,
438509.51364708, 445470.26098272, 446286.50588426,
567838.01678291]) #s-variables in fit
p0=[0,70] #initial guess
def Ffits(p,x,s,B=2.58,Fc=88,mu=770,Za=0.9632):
temp1 = (2*B*x)/(4*pi*Fc)**2
temp2 = temp1*(afij[0]+afij[1]*np.log((2*B*x)/mu**2))
temp3 = temp1**2*(afij[2]+afij[3]*np.log((2*B*x)/mu**2)+\
afij[4]*(np.log((2*B*x)/mu**2))**2)
temp4 = temp1**3*(afij[5]+afij[6]*np.log((2*B*x)/mu**2)+\
afij[7]*(np.log((2*B*x)/mu**2))**2+\
afij[8]*(np.log((2*B*x)/mu**2))**3)
return Fc/Za*(1+p[0]*s)*(1+temp2+temp3+temp4)+p[1]
errfuncfeps = lambda p,x,s,y: (Ffits(p,x,s)-y)
p32s,success32 = scipy.optimize.leastsq(errfuncfeps, p0, args=(mudr2,dmss,F2))
plt.plot(mudr2,F2,"b^")
plt.plot(mudr2,Ffits(p32s,mudr2,dmss))
dmsse=np.array([ 6.70820393, 7.61577311, 7.28010989, 6.32455532,
9.48683298, 10.77032961, 11.18033989]) #error for dmss
mudr2e=np.array([23.0, 18.0, 18.0, 15.0, 12.0, 8.0, 3.0]) #error for xdata
F2e=np.array([ 34., 39., 39., 25., 37., 38., 62.]) #error for ydata
Если кто-нибудь может помочь мне добавить коррелированную ошибку для xdata и dmss в соответствие, я был бы очень благодарен.Любая помощь очень ценится!