Python:优化.leatsq. ValueError:具有多个元素的数组的真值不明确

2024-09-29 23:17:01 发布

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

除了最后一行以外,一切正常。 我的目标是通过卡方检验来计算最佳拟合。leatsq函数的应用有问题。 z、 d和d\u err是给定长度的数组(实验数据)。在

def df(z,omega_m,omega_l):
    return 1/(np.sqrt(omega_m*(1+z)**3+(1-omega_m-omega_l)*(1+z)**2+omega_l))

def DL(z,omega_m,omega_l,H_0):      #   checked with Hubble's law with low z, it is consistent
    f,err_f=scipy.integrate.quad(df,0,z,args=(omega_m,omega_l))     #   it's evident err_f it's irrelevant

    if omega_m+omega_l==1:
        return 299792./H_0*(1+z)*f

    elif omega_m+omega_l<1:
        fk=np.sin(np.sqrt(np.absolute(1-omega_l-omega_m))*f)
        return 299792./H_0*(1+z)/np.sqrt(np.absolute(1-omega_m-omega_l))*fk

    elif omega_m+omega_l>1:
        fk=np.sinh(np.sqrt(np.absolute(1-omega_l-omega_m))*f)
        return 299792./H_0*(1+z)/np.sqrt(np.absolute(1-omega_m-omega_l))*fk


params=(0.3,0.7,73) #   starting values for minimization   omega_m, omega_l, H_0

def chi(params,z,d,d_err):   #   checked, this function works
    return (d-DL(z,params[0],params[1],params[2]))**2/d_err

minimization,minimization_cov=optimize.leastsq(chi,params,args=(z,d,d_err))

以下是完整的错误消息:

^{pr2}$

Tags: dfreturndefwithnpitsqrtparams
1条回答
网友
1楼 · 发布于 2024-09-29 23:17:01

scipy.integrate.quad()的第三个参数是上限,必须是浮点。您使用z作为第三个参数,这是一个NumPy数组。在

Signature: scipy.integrate.quad(func, a, b, ...)

Integrate func from a to b (possibly infinite interval) using a technique from the Fortran library QUADPACK.

。。。在

a : float

Lower limit of integration (use -numpy.inf for -infinity).

b : float

Upper limit of integration (use numpy.inf for +infinity).

相关问题 更多 >

    热门问题