使用sp.optimize.minimize Python的目标函数和jacobian的不同参数

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

我想用sp.optimize.minimize在x上优化函数f(x,y,z)。雅可比行列式仅取决于x和y,它是函数J(x,y)。 (这只是一个玩具示例)

[如果我尝试:

import numpy as np
import scipy as sp

def f(x,y,z):
  return(x**2+x*y**3+z)

def J(x,y):
  return(2*x+y**3)

x0,y,z=0,1,4
sp.optimize.minimize(f,x0,args=(y,z),jac=J)

我收到错误消息“ J()接受2个位置参数,但给出了3个位置参数,因为优化将y和z传递给J。

有什么方法可以定义我想传递给f的参数,以及我想传递给J的参数?

((一个选择是将f和J定义为具有相同的参数,而忽略该函数不需要的参数,但我希望有一种更优雅的方法)]

python optimization scipy arguments minimize
1个回答
1
投票

根据manual,雅可比行列式是带有签名的可调用项

J(x, *args)

其中args在您的示例中明确是固定参数args=(y,z)。所以no通常。另一方面,没有什么可以阻止您写作:

def J(x, y, z):
  return 2*x + y**3

而且我在这里看不到任何“模糊”。如果您真的想要,可以拥有:

def J(x, *args):
    return 2*x + args[0]**3

隐藏其他变量。不过,我不会说这更优雅。

© www.soinside.com 2019 - 2024. All rights reserved.