如何在scipy.optimize.minimize中使用fun的输出参数作为jac的输入参数?

How to use the output args of fun as the input args of jac in scipy.optimize.minimize?

我正在使用 scipy.optimize 图书馆。

在伴随变量方法中,需要 objective 函数的一些结果值来计算雅可比矩阵。

是否可以在不使用 global 变量的情况下在 jacobian 函数中使用它们?

例如,

def fun(x):
    '''
    something, something...
    '''
    # solving system equation. 
    u = spsolve(K,f)
    return u.dot(f)

def jac(x):
    '''
    something, something...
    '''
    # computing jacobian using the adjoint method
    return -(u.T@K@u).flatten()

jac函数中,uK是必须的.​​.. 我该怎么做?

使用带有两个可调用对象 funjac 的 class,并将中间结果存储在实例上。 IE。 fun填写self.uself.Kjac使用

但是请注意,这很脆弱,请考虑一下您是否真的需要它(也就是说,通过重新计算所有内容来编写所有内容,检查配置文件,并且当且仅当这些计算是瓶颈时,然后 OK,使用 class 或全局)。