scipy.optimize 的解的雅可比矩阵不等于 scipy.optimize 的 fjac。OptimizeResult
Jacobian of the solution from scipy.optimize is not equal to fjac of scipy.optimize.OptimizeResult
当使用带有参数 jac = True
的 scipy.optimize.root()
求函数的根时,OptimizeResult.fjac
returns 的雅可比值与解的雅可比值不正确.
例如,
# 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.fjac
和jac(sol.x)
有什么不同?我无法理解 fjac
来自 OptimizeResult
?
的含义
非常感谢任何见解和更正:)
我使用调试器进行了检查,默认算法 scipy.optimize.root 使用的是 _minpack.hybrj 函数。如果您查看 fsolve(也使用 hybrj)的文档,它指定:
fjac
the orthogonal matrix, q, produced by the QR factorization of the final approximate Jacobian matrix, stored column wise
因此 scipy 的文档似乎不完整。
来源:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fsolve.html
当使用带有参数 jac = True
的 scipy.optimize.root()
求函数的根时,OptimizeResult.fjac
returns 的雅可比值与解的雅可比值不正确.
例如,
# 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.fjac
和jac(sol.x)
有什么不同?我无法理解 fjac
来自 OptimizeResult
?
非常感谢任何见解和更正:)
我使用调试器进行了检查,默认算法 scipy.optimize.root 使用的是 _minpack.hybrj 函数。如果您查看 fsolve(也使用 hybrj)的文档,它指定:
fjac the orthogonal matrix, q, produced by the QR factorization of the final approximate Jacobian matrix, stored column wise
因此 scipy 的文档似乎不完整。
来源:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fsolve.html