scipy 1.7.3中curve_fit是否仍有maxfev参数?如何控制迭代次数?
Scipy 1.7.3中curve_fit的maxfev参数问题解答
1. maxfev参数是否还存在?
在Scipy 1.7.3版本里,curve_fit不再直接接收maxfev作为独立参数,但这个参数并没有被移除——它被移到了底层优化器的options配置字典里。
2. 参数被忽略的原因及调整时间
从Scipy 1.4.0版本开始,curve_fit的API做了调整,原来直接传入的maxfev被整合进了options参数里。如果现在仍把maxfev当独立参数传,会被函数忽略,因为当前版本的curve_fit签名里已经没有这个参数了。在Scipy 1.3.x及更早版本中,maxfev是curve_fit的直接参数。
3. 当前版本控制拟合迭代次数的正确方法
在Scipy 1.7.3中,需要通过options字典把maxfev传给默认的Levenberg-Marquardt优化器,示例代码如下:
from scipy.optimize import curve_fit import numpy as np # 定义拟合函数 def fit_func(x, a, b): return a * np.exp(-b * x) # 生成模拟数据 x_data = np.linspace(0, 4, 50) y_data = fit_func(x_data, 2.5, 1.3) + 0.2 * np.random.normal(size=len(x_data)) # 通过options传递maxfev,设置为5000次 params, cov_matrix = curve_fit(fit_func, x_data, y_data, options={"maxfev": 5000})
如果使用trf或dogbox这类其他优化器,需要在options里用对应的参数控制迭代次数:
- 用
trf时:配置max_nfev参数 - 用
dogbox时:同样配置max_nfev参数
示例(使用trf优化器):
params, cov_matrix = curve_fit(fit_func, x_data, y_data, method="trf", options={"max_nfev": 5000})
参考内容翻译
Stack Overflow相关问题
Scipy curvefit运行时错误:未找到最优参数:函数调用次数已达maxfev=1000
该问题讨论了曲线拟合时,函数调用次数触达默认maxfev限制后报错的情况,用户询问如何调整这个限制以完成拟合。
GitHub Issue #6340
这个议题围绕Scipy的curve_fit参数重构展开,核心是把原来的独立参数(比如maxfev)迁移到options字典中,统一优化器参数的传递方式,让API更一致、扩展性更好。
内容的提问来源于stack exchange,提问作者peter.petrov
相关产品推荐
相关产品推荐

