【问题标题】:Passing variable from an array to scipy.integrate.quad() in python在 python 中将变量从数组传递到 scipy.integrate.quad()
【发布时间】:2015-10-22 02:11:41
【问题描述】:

我正在使用 python 将函数拟合到我的数据集。在我将积分 scipy.integrate.quad() 添加到函数定义之前,我的代码使用curve_fit 工作并拟合了函数。我检查了为什么它给我一个错误“提供的函数没有返回一个有效的浮点数。”事实证明,如果我不从我的数据集中传递一个变量,代码工作正常。 m 拟合我的曲线。如果我设置任意值,如 5. 这里:scipy.integrate.quad(args(5.)) 而不是 Xi 它再次完美运行。这是我的代码,请帮助我!:

from scipy import integrate
calka = lambda z, vz, t: np.exp(-1.*0.001-(z*0.001+vz*t*2.48138957816e-05))**2*1./((20.)**2)*np.exp(-(1.*1.42060911e-05-z*1.42060911e-05)**2*1./((20.)**2))

z_lin = linspace(0,zmax,npoints/2)

def func(Xi, vx, vz):
    z=0.0
    f=0.
    t=Xi
    f=integrate.quad(calka, z_lin[0], z_lin[3998], args=(vz,Xi))[0] #it works fine with arbitrarily set value
    q=(1.7*np.pi*4./1.569)**2*0.000024813
    v=(0.000024813)**2/((13.)**2)
    p=2.*2.*np.pi/1.569*0.000024813
    return np.exp(-vx*v*Xi)*np.exp(-(Xi*q*1.3))*np.cos(p*Xi*vz)*f

xdata = np.linspace(0, 1000, 1000)
print len(xdata)
ydata= autokowariancja[0,:]
popt, pcov = curve_fit(func, xdata, ydata)
print popt, pcov
plt.figure(figsize=(8,5))
pylab.plot(func(xdata, popt[0],  popt[1]), 'b')
pylab.plot(autokowariancja[0,:], 'r')
legend("NoWin","Win")
pylab.show()

【问题讨论】:

  • 传递给calkavz参数最终是ydata,这是一个(1000,)数组,所以calka的结果也是一个(1000,)数组。但是,integrate.quadfunc 参数需要返回一个浮点标量,因此您会看到错误。

标签: python numpy scipy curve-fitting integrate


【解决方案1】:

我解决了这个问题。 Xi 是一个数组,integrate.quad() 只接受浮点数,所以我通过枚举它拆分了Xi 数组,我创建了一个大小为Xi 的数组,并分别计算了Xi 的每个元素的积分并将其传递给一个数组:

def func(Xi, vx, vz):
    z=0.0
    f=0.
    t=Xi
    for i, item in enumerate(Xi):
        integral[i]=integrate.quad(calka, z_lin[0], z_lin[3998], args=(vz, Xi[i]))[0]
    q=(1.7*np.pi*4./1.569)**2*0.000024813
    v=(0.000024813)**2/((13.)**2)
    p=2.*2.*np.pi/1.569*0.000024813
    return np.exp(-vx*v*Xi)*np.exp(-(Xi*q*1.3))*np.cos(p*Xi*vz)*integral

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多