根据理论,我有一组数据在两个范围内。上限是: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 + p2def 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_yif __name__ == "__main__": results = data_fitter(pfunc, ffunc, original_x, original_y, interpx)
添加回答
举报
0/150
提交
取消