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

我想用 sp.optimize.minimize 在 x 上优化函数 f(x,y,z)。Jacobian 只依赖于 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 ,使它们具有相同的参数,而忽略函数不需要的参数,但我希望有更优雅的方法)


慕桂英3389331
浏览 137回答 1
1回答

www说

根据手册,雅可比行列式是带有签名的可调用文件J(x, *args)您的示例args中明确的固定参数在哪里。args=(y,z)所以一般不会。另一方面,没有什么能阻止你写:def J(x, y, z):  return 2*x + y**3而且我在这里看不到任何“不雅”的东西。一般来说,我们写df(x, y, z)/dx = f'(x, y, z)无论如何,这适用于f'独立于其中一个变量 - 我们不知道,而且没有人对这种写作皱眉。如果你真的想要,你可以拥有:def J(x, *args):    return 2*x + args[0]**3隐藏额外的变量。不过,我不会称这更优雅。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python