python - 曲线拟合问题
问题描述
我在拟合函数时遇到问题。事实上,当将函数定义为硬代码时,它可以完美运行。请考虑以下示例:
创建 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, xdata, ydata, bounds=([bound_lower], [bound_upper]), maxfev = 50000)
而且它不起作用......有人可以帮我解决这个问题(你可以考虑任何bound_lower和bound_upper......错误不在那里)?提前致谢。
解决方案
推荐阅读
- amazon-web-services - 在 Amazon SES 上验证的电子邮件地址不允许我制定规则
- google-chrome - 带有基本身份验证的 Chrome 下载链接不起作用,在 FF 和 Postman 中它起作用
- python - How to use "edge bundling" with networkx and matplotlib in Python?
- tensorflow - TensorFlow 是否提供半正常初始化程序?
- java - 为什么 pyjnius 设置了错误的 JVM 选项?
- java - 字符串的无效递归反向方法
- python - 在 Databricks 中将 XML 字符串转换为 Spark Dataframe
- java - Spring Cloud Config @Value throwing 找不到能够从类型 [java.util.LinkedHashMap ] 转换为类型 [java.lang.String]的转换器
- javascript - How to test if string ends with a list of string
- oracle - 如何在保留对象id的情况下使用Oracle在线重定义将分区表转换为非分区表