传递具有多个独立变量和多个参数的函数以科学地优化最小化

问题描述 投票:0回答:1

this question之后,我想让我的问题尽可能具体,重点放在我无法解决的部分上。考虑一个非常简单的功能:

def foo(x, y, a, b, c):
    return a * x**4 + b * y**2 + c

现在,我想使用scipy.optimize.minimize或任何其他现有函数来查找xy(即参数),以在给定常量fooa和[ C0](即args)。如果我只有一个参数且有多个参数,则可以从b执行:

c

并且如果我只有自变量,没有常数args,那么从this page中我可以这样做:

def foo(x, *args):
    a, b, c = args
    return a * x**4 + b * x**2 + c

# X0 = to some scalar
# ARGS = a tuple of scalars (A, B, C) 

x_min = scipy.optimize.minimize(foo, x0=X0, args=ARGS)

但是,我不能使用以上任何语法。我相信我必须将我的功能定义为:

this page

但是我不知道如何将def foo(*params): x, y = params return 4 * x**4 + 2 * y**2 + 1 # P0 = to a list of scalars [X0, Y0] x_min = scipy.optimize.minimize(foo, x0=P0) def foo(*args, **kwargs): x, y = args a, b, c = tuple(kwargs.values()) return a * x**4 + b * y**2 + c 传递给args函数。如果您能帮助我理解用多个独立参数和kwargs函数的常量参数定义scipy.optimize函数的最佳方法,我将不胜感激。感谢您的提前支持。

python scipy kwargs scipy-optimize scipy-optimize-minimize
1个回答
1
投票

代替传递foo并使scipy传递常量参数,您可以使用scipy.optimizefoo自己绑定它们:

lambda

或:

functools.partial

然后:

A, B, C = some_const_values
foo1 = lambda x, y: foo(x, y, A, B, C)
© www.soinside.com 2019 - 2024. All rights reserved.