Добавьте коррелированные ошибки при подгонке кривой - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь подогнать некоторые данные к кривой, используя метод 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 в соответствие, я был бы очень благодарен.Любая помощь очень ценится!

...