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

如何在scipy.minimize中使用固定常数?(含需求示例)

解决scipy.minimize中固定部分参数的问题

你遇到的核心问题是scipy.minimize要求目标函数的第一个参数必须是待优化的变量,而你希望把外部计算得到的a和b作为固定参数传入,只优化guess。下面是几种实用的解决方案:

方案1:调整函数参数顺序,用args传递固定参数

这是最标准的做法,只需把待优化的变量guess放在目标函数的第一个位置,然后用minimize的args参数传递固定的a和b:

import scipy.optimize

def error(guess, a, b):
    target = 4
    return abs(a*guess - b*target)

# 假设a和b是主程序计算得到的
a = 2
b = 3

# x0是待优化变量guess的初始值,args传递固定参数a、b
calculated = scipy.optimize.minimize(error, x0=0, args=(a, b))

print(calculated.x)  # 输出接近[6.0],因为2*6=3*4=12

方案2:用functools.partial绑定固定参数

如果你不想修改原函数的参数顺序,可以用functools.partial把a和b预先绑定到目标函数上,生成一个只接受guess的新函数:

import scipy.optimize
from functools import partial

def error(a, b, guess):
    target = 4
    return abs(a*guess - b*target)

a = 2
b = 3

# 绑定a和b,生成仅需传入guess的函数
partial_error = partial(error, a, b)
calculated = scipy.optimize.minimize(partial_error, x0=0)

print(calculated.x)

方案3:将待优化变量包装为数组(适合多变量优化)

如果后续需要优化多个变量,可以把待优化变量放在一个数组里,固定参数依然通过args传递:

import scipy.optimize

def error(params, a, b):
    guess = params[0]  # 从数组中提取待优化变量
    target = 4
    return abs(a*guess - b*target)

a = 2
b = 3

# x0是待优化变量数组的初始值
calculated = scipy.optimize.minimize(error, x0=[0], args=(a, b))

print(calculated.x)

为什么你的原代码无法运行?

你的原代码中,minimize把(a, b, 0)作为待优化变量数组传递给error的第一个参数a,导致error函数缺少b和guess参数,从而抛出参数不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:14:08