【问题标题】:Jacobian of the solution from scipy.optimize is not equal to fjac of scipy.optimize.OptimizeResult来自 scipy.optimize 的解决方案的雅可比不等于 scipy.optimize.OptimizeResult 的 fjac
【发布时间】:2020-07-21 03:43:59
【问题描述】:

当使用scipy.optimize.root() 和参数jac = True 查找函数的根时,OptimizeResult.fjac 返回的雅可比值与解的雅可比不正确。

例如,

# objective function
def fun(x):
    return [x[0]  + 0.5 * (x[0] - x[1])**3 - 1.0, 0.5 * (x[1] - x[0])**3 + x[1]]

# function returns Jacobain at x
def jac(x):
    return np.array([[1 + 1.5 * (x[0] - x[1])**2, -1.5 * (x[0] - x[1])**2],
                [-1.5 * (x[1] - x[0])**2,
                1 + 1.5 * (x[1] - x[0])**2]])
from scipy import optimize
sol = optimize.root(fun, [0, 0], jac=jac)

解收敛后sol.fjacjac(sol.x)不一样?我无法从OptimizeResult 中理解fjac 的含义?

非常感谢任何见解和更正:)

【问题讨论】:

    标签: python scipy scipy-optimize


    【解决方案1】:

    我使用调试器进行了检查,在后台,scipy.optimize.root 使用的默认算法是 _minpack.hybrj 函数。如果您查看 fsolve(也使用 hybrj)的文档,它指定:

    fjac 正交矩阵 q,由最终近似雅可比矩阵的 QR 因式分解产生,按列存储

    因此,scipy 的文档似乎不完整。

    来源:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fsolve.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多