米努埃特给南?

时间:2019-03-02 12:13:57

标签: python curve-fitting iminuit

试图将某些数据拟合到我称为Ffitr的函数中,但是在运行下面的代码时,我只会对所有值都使用“ nan”。如果您从返回值中删除代码是否起作用,问题就出在问题上。我怀疑这与Ffitr的日志部分有关,但后来我认为python应该显示“日志中遇到的无效值”。 Minuit将所有参数设置为nan的原因还有什么?

P.s。对不起,我的代码有点难以阅读。

import numpy as np
from iminuit import Minuit

#Parameters to fit to:
Zsrgi=np.array([1.47, 1.5, 1.54, 1.58])

Za=np.array([ 0.9468,  0.9632,  0.9707,  0.9756])

af=np.array([ 0.0575465 ,  0.05547301,  0.04983955,  0.05096624,  0.04737787,
        0.04716958,  0.04579672,  0.0454464 ,  0.0437895 ,  0.04202845,
        0.04717754,  0.04625286,  0.04245786,  0.04105158,  0.04052182,
        0.04077226,  0.03857616,  0.03776707,  0.03453072,  0.0414683 ,
        0.0395172 ,  0.03501315,  0.03553733,  0.03483842,  0.03207193,
        0.03173218,  0.03206222,  0.03104359,  0.03046799,  0.02715095,
        0.0273168 ,  0.02622413])

amudr=np.array([ 0.01737619,  0.01377279,  0.00808912,  0.00970136,  0.00580544,
        0.00496463,  0.00397211,  0.00383197,  0.0019517 ,  0.00102585,
        0.01227267,  0.01208733,  0.00673   ,  0.00537933,  0.00521267,
        0.00450733,  0.00328733,  0.002288  ,  0.000658  ,  0.00950714,
        0.00923442,  0.00537273,  0.00533831,  0.00534351,  0.0022987 ,
        0.00224545,  0.00126688,  0.00588165,  0.00582215,  0.00267405,
        0.00266899,  0.0013943 ])

a=np.array([ 0.0904,  0.0755,  0.0647,  0.0552])

#coefficients
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])


def Ffitr(X,s,pp,k,B=2.61,Fc=92.8,mu=770): #fit function
    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*pp*(1+k*s)*(1+temp2+temp3+temp4)


def chiwork(a0,a1,a2,a3,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31,\
            z0,z1,z2,z3,za0,za1,za2,za3,\
            am0,am1,am2,am3,am4,am5,am6,am7,am8,am9,am10,am11,am12,am13,am14,am15,am16,am17,am18,am19,am20,am21,am22,am23,am24,am25,am26,am27,am28,am29,am30,am31,\
            k,y1): #chisquare

    ana=np.array([a0,a1,a2,a3])
    zs=np.array([z0,z1,z2,z3])
    za=np.array([za0,za1,za2,za3])
    am=np.array([am0,am1,am2,am3,am4,am5,am6,am7,am8,am9,am10,am11,am12,am13,am14,am15,am16,am17,am18,am19,am20,am21,am22,am23,am24,am25,am26,am27,am28,am29,am30,am31])
    bss=np.array([b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31])
    betalat=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3]
    chia=sum((ana-a)**2)+sum((bss*a[betalat]/hc-amssr)**2)
    chiz=sum((zs-1/Zsrgi)**2)+sum((za-Za)**2)
    chiamd=sum((amudr-(1+y1*ana[betalat]**2)*ana[betalat]*am*zs[betalat]/hc)**2)
    chiaf=sum((af-ana[betalat]/hc*Ffitr(am,bss**2-mssph**2,ana[betalat]/za[betalat],k))**2)
    #chiaB=sum(((ampir**2/(2*amudr))-ampm)**2)
    return chia+chiz+chiamd+chiaf
#minuit part
mc=Minuit(chiwork)

fminc,paramc=mc.migrad()

0 个答案:

没有答案