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

Scipy优化报错:TypeError: f1() takes 1 positional argument but 2 were given

Scipy优化报错:TypeError: f1() takes 1 positional argument but 2 were given

嘿,我来帮你搞定这个报错问题!你遇到的这个错误,核心原因是Scipy的minimize函数在调用目标函数时,会自动传递额外的参数,但你定义的f1函数只接受一个x参数,没法处理这些额外参数,所以就触发了参数不匹配的错误。

先拆解下你代码里的两个小问题:

  • 你调用optimize.minimize(f1, initial_x_1, [], 'COBYLA')时,第三个位置参数[]被Scipy当成了args参数——这个参数是用来给目标函数传递额外参数的,哪怕你传的是空列表,Scipy也会尝试把它unpack后传给f1,这就导致了参数数量不对;而且COBYLA作为优化方法,应该用关键字参数method='COBYLA'来指定,用位置参数很容易搞混顺序。
  • 你的f1函数里只有sum(x),没写return语句,这样函数默认返回None,后续优化过程也会因为拿不到有效的目标函数值而出问题。

这里给你两个简单的解决办法,选一个用就行:

办法一:修改目标函数,兼容额外参数

把f1改成能接受可变参数的形式,这样不管Scipy传多少额外参数,都能完美适配:

def f1(x, *args):
    return sum(x)

办法二:调整minimize的调用方式,规范传参

不用位置参数传递优化方法,改用关键字参数明确指定method;如果没有额外参数要传给目标函数,就不用写args(或者显式传args=()),同时把np.ndarray换成更常用的np.array来初始化数组:

import numpy as np
from scipy import optimize

def f1(x):
    return sum(x)

initial_x_1 = np.array([1])
res = optimize.minimize(f1, initial_x_1, method='COBYLA')

这样调整后,你的代码就能正常运行啦!

备注:内容来源于stack exchange,提问作者Jelly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:23:03