为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2022-06-28 15:45:01
我想用 sp.optimize.minimize 在 x 上优化函数 f(x,y,z)。Jacobian 只依赖于 x 和 y,它是函数 J(x,y)。(这只是一个玩具示例)如果我尝试:import numpy as npimport scipy as spdef 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,4sp.optimize.minimize(f,x0,args=(y,z),jac=J)我收到一个错误“J() 接受 2 个位置参数,但给出了 3 个”,因为优化将 y 和 z 传递给 J。有什么方法可以定义我想传递给 f 的参数,以及我想传递给 J 的参数吗?(一种选择是定义 f 和 J ,使它们具有相同的参数,而忽略函数不需要的参数,但我希望有更优雅的方法)
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

根据手册,雅可比行列式是带有签名的可调用文件


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

隐藏额外的变量。不过,我不会称这更优雅。


查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信