minuit给出了一个神秘的值

2024-05-18 08:35:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我用minuit来拟合一条简单的曲线,但由于某种原因,我得到了

ValueError: The truth value of an array with more than one element is ambiguous

使用a.any()a.all()

我不明白这是从哪里来的。我以前也试过做类似的事情,但效果很好,我只改变了函数,所以这个错误很奇怪,我不理解

import numpy as np
from iminuit import Minuit

#some constants
hc = 197.3269788
mssph = 685.78 
#some data and errors to fit
muds = np.array([ 
    81.96100485,  64.96427609,  38.15520137,  45.75992993,
    27.38344029,  23.41742996,  18.73586921,  18.07486749,
     9.20589292,   4.83878931,  72.17070899,  71.08083681,
    39.57647386,  31.63373626,  30.65363538,  26.50584842,
    19.33150992,  13.45482499,   3.86943831,  68.76598171,
    66.7933219 ,  38.86139831,  38.61246743,  38.6500419 ,
    16.62670414,  16.24156579,   9.16347451,  52.48804692,
    51.95712296,  23.86333781,  23.81815279,  12.44282442
    ]) #xdata
Fr = np.array([ 
    127.31527434,  122.72790265,  110.26449558,  112.75717699,
    104.81830088,  104.35746903,  101.32016814,  100.54513274,
     96.87942478,   92.98330088,  124.9736053 ,  122.52414305,
    112.47114172,  108.74591788,  107.34258013,  108.00597616,
    102.18850331,  100.04522384,   91.47210596,  128.18641113,
    122.15516847,  108.23229985,  109.85263369,  107.69218856,
     99.14042658,   98.0902102 ,   99.1104204 ,  112.47678261,
    110.39126087,   98.373     ,   98.97391304,   95.01495652
    ])#ydata
Zsrgi = np.array([1.47, 1.5, 1.54, 1.58])

dzs = np.array([ 3.60555128,  3.60555128,  4.24264069,  1.41421356])
Za = np.array([ 0.9468,  0.9632,  0.9707,  0.9756])

Zaey = np.array([56.0, 53.0, 35.0, 15.0])

dmfel = np.array([ 
     2743.82452989,  1388.6310737 ,   689.77566743,   652.7213305 ,
     348.31861265,   309.31427565,   134.12993165,   157.95193019,
      60.83965035,    19.80905202,  3482.5565895 ,  3378.1685061 ,
     949.07161448,   570.68604168,   492.42222648,   801.32561084,
     362.30696375,   152.61749342,    26.39235787,  2733.32712033,
    2329.20044751,   788.45797536,   754.06472854,  1098.9552043 ,
     279.63806125,   213.46692781,   169.87677303,  2181.08350448,
    2018.45039786,   696.73902333,   763.51325268,   416.74304481
    ])
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
    ])
afe = np.array([ 
    0.00039571,  0.00046823,  0.00034898,  0.00071523,  0.00052648,
    0.00051809,  0.00072373,  0.00059257,  0.00054912,  0.00065308,
    0.000283  ,  0.00028516,  0.00031909,  0.0003537 ,  0.00035294,
    0.0002573 ,  0.00034244,  0.00034139,  0.00055726,  0.00038002,
    0.00044435,  0.00050214,  0.00052077,  0.00037143,  0.00036278,
    0.00045654,  0.00039068,  0.00025011,  0.00024068,  0.00031897,
    0.00037707,  0.0003581
    ])
amssr = np.array([ 
        0.35006,  0.34592,  0.33967,  0.3175 ,  0.31341,  0.34965,
        0.33393,  0.31033,  0.30807,  0.32813,  0.29895,  0.26546,
        0.29559,  0.29298,  0.26026,  0.29264,  0.29094,  0.29074,
        0.25928,  0.3888 ,  0.23213,  0.23284,  0.22768,  0.20825,
        0.22591,  0.20437,  0.22353,  0.2036 ,  0.18987,  0.20088,
        0.18743,  0.18801
        ])
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
    ])
amudre = np.array([
     8.75479519e-04,   7.34296720e-04,   4.51927448e-04,
     5.98343236e-04,   3.81187530e-04,   3.18993055e-04,
     4.05218892e-04,   3.28835732e-04,   2.14302222e-04,
     1.80198850e-04,   6.27776371e-04,   6.18193827e-04,
     3.56742512e-04,   3.04857443e-04,   3.08046099e-04,
     2.32852126e-04,   1.84120801e-04,   1.62566426e-04,
     7.02801597e-05,   5.87470469e-04,   5.70265978e-04,
     3.42904960e-04,   3.42757519e-04,   3.31231953e-04,
     1.52175013e-04,   1.61067797e-04,   8.21035930e-05,
     1.40038557e-04,   1.42199518e-04,   7.54950814e-05,
     7.13899224e-05,   3.64415759e-05
     ])


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

B = 2.61
Fc = 92.8
#functions to fit
def Fpapper(X,s,pp,k,l1,B=2.61,Fc=92.8,mu=770,Za=0.9468):
    temp1 = (2*B*X)/(4*pi*Fc)**2
    return Fc*pp*(1+k*s)*(1+l1*temp1)
def Bpapper(X,s,fa,pp,y1,y1s,l2,B=2.61,Fc=92.8,mu=770,Za=0.9468):
    temp1 = (2*B*X)/(4*pi*Fc)**2
    return pp*(1-fa**2*y1+y1s*s)*B*(1-l2)

#parameters initial values and errors
paramfelp=np.array([  1.01980390e-03,   1.14017543e-03,   1.14017543e-03,
     8.06225775e-04,   4.93659802e-04,   6.41248782e-04,
     4.57055795e-04,   9.40212742e-04,   9.00499861e-04,
     7.40270221e-04,   9.39840412e-04,   6.82641927e-04,
     8.63712915e-04,   8.39344983e-04,   4.66904701e-04,
     4.31740663e-04,   5.75673519e-04,   5.99082632e-04,
     6.49384324e-04,   5.02195181e-04,   8.20000000e-04,
     9.05207159e-04,   1.06901824e-03,   7.32461603e-04,
     7.50066664e-04,   9.83259884e-04,   1.19339851e-03,
     6.22896460e-04,   8.12157620e-04,   5.88727441e-04,
     5.20384473e-04,   5.53263048e-04,   5.31601354e-04,
     8.80511215e-04,   1.05233075e-03,   5.32353266e-04,
     1.30000000e-03,   1.30000000e-03,   1.80000000e-03,
     2.00000000e-04,   5.60000000e-03,   5.30000000e-03,
     3.50000000e-03,   1.50000000e-03,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e+00,   1.00000000e+00,
     1.00000000e+00,   1.00000000e-08,   1.00000000e-01,
     1.00000000e-03,   1.00000000e-05,   2.00000000e-03,
     4.00000000e-01,   5.00000000e-01]) #parameters error

parametersp=np.array([  9.04000000e-02,   7.55000000e-02,   6.47000000e-02,
     5.52000000e-02,   7.64118166e+02,   7.55081289e+02,
     7.41438660e+02,   6.93045528e+02,   6.84117792e+02,
     7.63223209e+02,   7.28909270e+02,   6.77394705e+02,
     6.72461531e+02,   7.16248911e+02,   7.81336428e+02,
     6.93806885e+02,   7.72554724e+02,   7.65733222e+02,
     6.80216152e+02,   7.64844597e+02,   7.60401473e+02,
     7.59878753e+02,   6.77654822e+02,   1.18579180e+03,
     7.07967722e+02,   7.10133134e+02,   6.94395773e+02,
     6.35136682e+02,   6.88997493e+02,   6.23303163e+02,
     6.81738788e+02,   7.27821973e+02,   6.78740461e+02,
     7.18098614e+02,   6.70018037e+02,   6.72091400e+02,
     6.80272109e-01,   6.66666667e-01,   6.49350649e-01,
     6.32911392e-01,   9.46800000e-01,   9.63200000e-01,
     9.70700000e-01,   9.75600000e-01,   8.19610049e+01,
     6.49642761e+01,   3.81552014e+01,   4.57599299e+01,
     2.73834403e+01,   2.34174300e+01,   1.87358692e+01,
     1.80748675e+01,   9.20589292e+00,   4.83878931e+00,
     7.21707090e+01,   7.10808368e+01,   3.95764739e+01,
     3.16337363e+01,   3.06536354e+01,   2.65058484e+01,
     1.93315099e+01,   1.34548250e+01,   3.86943831e+00,
     6.87659817e+01,   6.67933219e+01,   3.88613983e+01,
     3.86124674e+01,   3.86500419e+01,   1.66267041e+01,
     1.62415658e+01,   9.16347451e+00,   5.24880469e+01,
     5.19571230e+01,   2.38633378e+01,   2.38181528e+01,
     1.24428244e+01,   3.23442596e-07,   1.42713877e+01,
     9.00000000e-02,   1.12143829e-04,   9.00000000e-02,
     3.70000000e+00,   4.00000000e+00]) #parameters initial value

 #chisquare
def chiworkp(paras):
    B=2.61
    Fc=92.8
    hc=197.3269788
    mu=770
    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(((paras[0:4]-a)/(ast*10**(-4)))**2)+sum(((paras[4:36]*(paras[0:4][betalat])/hc-amssr)/(mse))**2)
    chiz=sum(((paras[36:40]-1/Zsrgi)/(dzs*10**(-2)))**2)+sum(((paras[40:44]-Za)/(Zaey*10**(-4)))**2)
    chiamd=sum(((amudr-(1+paras[77:78]*paras[0:4][betalat]**2)*paras[0:4][betalat]*paras[44:76]*paras[36:40][betalat]/hc)/amudre)**2)
    chiaf=sum(((af-Fpapper(paras[44:76],paras[4:36]**2-mssph**2,paras[0:4][betalat]/paras[40:44][betalat],paras[76:77],paras[77:78])/hc)/afe)**2)
    chiaB=sum((((ampir**2/(2*amudr))-Bpapper(paras[44:76],paras[4:36]**2-mssph**2,paras[0:4][betalat],paras[0:4][betalat]/paras[36:40][betalat],paras[77:78],paras[80:81])/hc)/Bfel)**2)
    return chia+chiz+chiamd+chiaf+chiaB

#minuit part
mc=minuit.Minuit(chiworkp,parametersp[:],paramfelp[:],errordef=1)

fminc, paramc = mc.migrad()

print(mc.values)

Tags: hcdefnparrayppsumfcminuit