You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:01:00