猿问

在两个函数范围内拟合数据

根据理论,我有一组数据在两个范围内。


上限是:f(x)= 1 / x(x <0.5)


下限是:f(x)= 1 + 1 /(2x)(x <0.5)


我得到的数据接近这两个界限之一。我试图找到一个描述这些数据的函数。但是,如果我使用普通的拟合方法,则拟合曲线可能在这两个边界之外。如何通过使用scipy.curve_fit强制在这两个边界之间拟合曲线?我正在尝试使用Pade近似值进行拟合,我正在使用的代码如下:


def pfuncp_3_1(x, a0, a1, a2, a3, b1):

    p1 = ((a0+a1*x+a2*x**2+a3*x**3)*(1+b1*x)**(-1)-1-1/(2*x)<0)*2.0

    p2 = ((a0+a1*x+a2*x**2+a3*x**3)*(1+b1*x)**(-1)-1/x>0)*2.0

    return (a0+a1*x+a2*x**2+a3*x**3)*(1+b1*x)**(-1) + p1 + p2



def ffuncp_3_1(x, a0, a1, a2, a3, b1):

    return (a0+a1*x+a2*x**2+a3*x**3)*(1+b1*x)**(-1)



def data_fitter(pfunc, ffunc, fit_x, fit_y, new_x):

    popt, pcov = opt.curve_fit(pfunc, fit_x, fit_ny)

    perr = np.sqrt(np.diag(pcov))

    interp_y = np.zeros(len(interp_x))

    for k in range(len(interp_x)):

        interp_y[k] = ffunc(interp_x[k], *popt)

    return interp_y



if __name__ == "__main__":

    results = data_fitter(pfunc, ffunc, original_x, original_y, interpx)


子衿沉夜
浏览 161回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答