如何用Python的optimization.curve_fit求解y=ax+b最优参数?报错排查
解决
curve_fit报错func() missing 1 required positional argument: 'b'问题 错误原因
你的func函数定义完全不符合scipy.optimize.curve_fit的要求:
curve_fit要求拟合函数的格式为func(x, *params),即第一个参数是自变量x,后续是待拟合的参数(这里是a、b),函数返回基于x和参数计算出的预测y值,用来和真实ydata做误差对比。- 你错误地把
y作为函数参数传入,还返回布尔值(y == a*x + b是判断等式是否成立,返回True/False数组),这导致curve_fit调用时无法正确传递参数,从而触发报错。
修复后的代码
import numpy as np from scipy.optimize import curve_fit # 确保正确导入模块 # 正确定义拟合函数:输入x和参数a、b,返回预测的y值 def func(x, a, b): return a * x + b xdata = np.array(time1_list) ydata = np.array(phi1_list) # 初始猜测:对应参数a和b的初始值 initial_guess = np.array([0.0, 0.0]) # 调用curve_fit,获取最优参数和协方差矩阵 params, covariance = curve_fit(func, xdata, ydata, p0=initial_guess) # 输出结果 print(f"最优参数a: {params[0]}, b: {params[1]}")
关键说明
- 拟合函数仅需接收自变量
x和待优化的参数,返回预测的y值,无需传入真实ydata。 curve_fit会自动将xdata传入函数的第一个参数,然后调整后续参数(a、b),使预测值与ydata的误差平方和最小(即最小二乘法逻辑)。- 若你之前用的
optimization是scipy.optimize的别名,需确保已正确导入,比如import scipy.optimize as optimization。
内容的提问来源于stack exchange,提问作者Rory Fitzpatrick
相关产品推荐
相关产品推荐

