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

如何使用scipy least_squares估计未知参数及排查运行报错

报错原因

你对least_squares的接口逻辑理解有误,代码存在两处核心错误:

  1. 传入的目标函数不符合要求:least_squares要求第一个入参是残差计算函数,该函数第一个参数必须是待估计的参数数组,返回值是每个样本点的预测值与真实值的残差序列。你写的result函数内部嵌套调用curve_fit,返回值是拟合结果元组,完全不满足接口要求。
  2. 参数初始值传参错误:least_squares第二个位置参数是待估参数的初始猜测值x0,你错把自变量数据集x传到了这个位置,直接触发类型校验报错。
正确使用方法

least_squares的核心逻辑是最小化残差平方和,你只需要单独定义残差计算逻辑,给a、b、c三个参数传入合理的初始值即可,完整可运行代码如下:

import numpy as np
from scipy.optimize import least_squares

np.random.seed(0)
x = np.random.randint(0, 100, 100)  # 自变量样本
y = np.random.randint(0, 100, 100)  # 因变量样本

def func(x, a, b, c):
    return a*x**2 + b*x + c

# 定义符合least_squares要求的残差函数
def calc_residuals(params, x_data, y_data):
    a, b, c = params  # 拆分待估参数
    y_pred = func(x_data, a, b, c)
    return y_pred - y_data  # 返回残差序列

# 调用拟合:注意第二个参数是a/b/c的初始猜测值,不是自变量x
sol = least_squares(
    calc_residuals,
    x0=[1, 1, 1],
    args=(x, y),
    method='lm',
    jac='2-point',
    max_nfev=2000
)

# 提取拟合得到的参数
a_fit, b_fit, c_fit = sol.x
print(f"拟合结果:a={a_fit:.4f}, b={b_fit:.4f}, c={c_fit:.4f}")

补充说明:curve_fit本身就是对least_squares的上层封装,只要残差定义、参数初始值一致,两种方法得到的拟合结果完全相同。

内容的提问来源于stack exchange,提问作者user032020

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:36:24