Python 将具有多个自变量和多个参数的函数传递给scipy optimize最小化
接下来,我想让我的问题尽可能具体,集中在我无法解决的部分。考虑一个非常简单的函数:Python 将具有多个自变量和多个参数的函数传递给scipy optimize最小化,python,scipy,keyword-argument,scipy-optimize,scipy-optimize-minimize,Python,Scipy,Keyword Argument,Scipy Optimize,Scipy Optimize Minimize,接下来,我想让我的问题尽可能具体,集中在我无法解决的部分。考虑一个非常简单的函数: def foo(x,y,a,b,c): 返回a*x**4+b*y**2+c 现在我想使用scipy.optimize.minimize或任何其他现有函数来查找x和y(即参数)以最小化foo,给定常量a、b和c(即args)。如果我只有一个参数和多个参数,那么我可以: def foo(x,*args): a、 b,c=args 返回a*x**4+b*x**2+c #X0=某个标量 #ARGS=标量的元组(a、B、
def foo(x,y,a,b,c):
返回a*x**4+b*y**2+c
现在我想使用scipy.optimize.minimize
或任何其他现有函数来查找x
和y
(即参数)以最小化foo
,给定常量a
、b
和c
(即args)。如果我只有一个参数和多个参数,那么我可以:
def foo(x,*args):
a、 b,c=args
返回a*x**4+b*x**2+c
#X0=某个标量
#ARGS=标量的元组(a、B、C)
x_min=scipy.optimize.minimize(foo,x0=x0,args=args)
如果我只有自变量,没有常数args,那么我可以:
def foo(*参数):
x、 y=参数
返回4*x**4+2*y**2+1
#P0=标量列表[X0,Y0]
x_min=scipy.optimize.minimize(foo,x0=P0)
但是,我不能使用上述任何语法。我认为我必须将我的功能定义为:
def foo(*args,**kwargs):
x、 y=args
a、 b,c=元组(kwargs.values())
返回a*x**4+b*y**2+c
但是我不知道如何将
args
和kwargs
传递给scipy.optimize
函数。如果您能帮助我了解定义foo
函数的最佳方法是什么,并为scipy.optimize
函数提供多个独立参数和常量参数,我将不胜感激。提前感谢您的支持。您可以使用lambda
或functools自己绑定常量参数,而不是传递foo
并让scipy传递常量参数。partial
:
A, B, C = some_const_values
foo1 = lambda x, y: foo(x, y, A, B, C)
或:
然后:
啊哈,很酷的解决办法。非常感谢。因此,没有办法将带有
*args、**kwargs
的函数直接传递到scipy。在不定义lambda或中间函数的情况下优化函数?我将在几小时内对此进行测试,然后回来批准答案。我尝试了您的代码。我不确定它是否能像现在这样工作。我认为,x,y
参数需要分解成一个类似于foo\ux0=lambda P:foo(P[0],P[1],A,B,C)
,然后最小化(foo\ux0=[x0,Y0])
。我不会将此编辑应用于你的帖子,你不会收到任何通知。你最好自己看一下。你看一个例子
import functools
foo1 = functools.partial(foo, a=A, b=B, c=C)
x_min = scipy.optimize.minimize(foo1, ...)