微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

曲线拟合问题

如何解决曲线拟合问题

我在曲线拟合函数时遇到问题。 事实上,当将函数定义为硬代码时,它工作得很好。请考虑以下示例:

创建 Y 数据数组

ydata= np.array([5.37E+04,3.36E+04,1.99E+04,1.12E+04,5.96E+03,3.02E+03,1.45E+03,6.67E+02,2.98E+02,1.29E+02,5.59E+01,2.44E+01,1.09E+01,4.71E+00,2.46E+00,1.25E+00])

创建 X 数据数组

xdata = np.array([300.,188.,118.,73.6,46.0,28.8,18.0,11.3,7.06,4.42,2.77,1.73,1.08,0.678,0.425,0.266])

定义我的拟合函数

def fit_storage (w,G0,G1,t1,G2,t2,G3,t3,G4,t4,G5,t5,G6,t6,G7,t7):
fit_str = G0 + (G1*w**2*t1**2)/(1+w**2*t1**2) + (G2*w**2*t2**2)/(1+w**2*t2**2) + (G3*w**2*t3**2)/(1+w**2*t3**2) + (G4*w**2*t4**2)/(1+w**2*t4**2) + (G5*w**2*t5**2)/(1+w**2*t5**2) + (G6*w**2*t6**2)/(1+w**2*t6**2) + (G7*w**2*t7**2)/(1+w**2*t7**2)
return fit_str 

然后,我正在调用 curve_fit(从 scipy 导入):

popt,pcov = curve_fit(fit_storage,xdata,ydata,bounds=(bound_lower,bound_upper),maxfev = 50000)

这很完美,但正如你所看到的,它完全是对系数进行硬编码的。因此,我试图做一个更通用的功能,定义为:

def str_func(w,x,n):
summation_str = np.array(np.zeros(len(frequency)))
for i in range (1,2*n+1,2): 
    summation_str = summation_str + ((x[i]*w**2*x[i+1]**2)/(1+(w**2*x[i+1]**2))) 
y_str = x[0] + summation_str
return y_str

但是,我无法在其上调用曲线拟合。我的做法如下:

popt,pcov = curve_fit(str_func,bounds=([bound_lower],[bound_upper]),maxfev = 50000)

而且它不起作用...有人能帮我解决这个问题吗(你可以考虑任何 bound_lower 和 bound_upper...错误不在那里)?提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。