如何在scipy.minimize_scalar中固定第一个参数,最小化第二个参数
解决
minimize_scalar参数传递顺序问题 问题出在minimize_scalar的参数传递逻辑:它不会识别函数的变量名,而是固定将待优化的变量作为第一个参数传给目标函数,args里的参数会按顺序传给目标函数的后续参数。你的func(a,b)把固定参数放在了第一个位置,导致优化变量被错误传给a,args里的a被传给b。
有两种简单的解决方法:
方法1:调整函数参数顺序
把待优化的变量b放在函数的第一个参数位置,固定参数a放在后面,同时确保args是元组形式(单个参数要加逗号):
def func(b, a): # 保持原有逻辑,注意参数对应关系 return value # args必须是元组,所以写成(a,)而不是(a) result = minimize_scalar(func, bounds=(c, d), args=(a,), method="bounded")
方法2:用lambda函数包装原函数
不修改原函数的参数顺序,通过lambda绑定固定参数a,只把待优化的b作为lambda的参数:
def func(a, b): # 原逻辑不变 return value # lambda接收待优化的b,调用原函数时传入固定的a result = minimize_scalar(lambda b: func(a, b), bounds=(c, d), method="bounded")
注意:args参数要求是元组类型,如果你只传单个参数,一定要加逗号写成(a,),否则Python会把(a)解析成单个变量而非元组,可能引发参数不匹配的错误。
内容的提问来源于stack exchange,提问作者SDA_exp
相关产品推荐
相关产品推荐

