python - 来自 scipy.optimize 的解决方案的雅可比不等于 scipy.optimize.OptimizeResult 的 fjac
问题描述
scipy.optimize.root()
当使用with argument找到函数的根时jac = True
,OptimizeResult.fjac
返回的 Jacobian 值与解的 Jacobian 矩阵不正确。
例如,
# 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
from 表示OptimizeResult
什么?
非常感谢任何见解和更正:)
解决方案
我使用调试器进行了检查,在后台默认算法 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
推荐阅读
- angular - 在现有元素上使用角度动画查询/交错?
- vb.net - 如何检测 Alt + Tab 键然后关闭表单?
- flow - 如何动态为组件充电?
- sql-server - 我确实在 sql 上选择并根据我想要在其中查找的内容创建新列,并添加另一列带有查找的答案
- vert.x - vertx Context 是在处理程序执行时新创建的还是在所有执行中共享处理程序?
- python - Django和mysql的集成
- saml-2.0 - SAML 2.0 身份验证上下文在以下场景中如何工作?
- routes - 如何在路由中建立连接
- sql - 将时间存储为数字。格式问题 - 00 为秒
- sql - MSSQL 中存储过程的刷新问题