python - 在 scipy.optimize.root 中计算 Jacobian 的默认选项

标签 python scipy mathematical-optimization

scipy.optimize.root 的文档中对于 method = lm,以下是 options 关键字的默认值。

options={'col_deriv': 0, 'diag': None, 'factor': 100, 'gtol': 0.0, 'eps': 0.0, 'func': None, 'maxiter': 0, 'xtol': 1.49012 e-08, 'ftol': 1.49012e-08}

关于 col_deriv 的描述,他们是这样说的

col_deriv : bool, 可选 非零以指定 Jacobian 函数计算列下的导数(更快,因为没有转置操作)

如果我理解它所说的声明,例如,如果我编写 col_deriv = Truejacobian 将按列计算,因此速度更快。

问题:如果它更快,为什么 col_deriv 的非零值不是默认值?。

我是不是漏掉了什么?

最佳答案

也许来自 scipy.optimize.leastsq 的文档可以提供帮助,因为它记录了 Dfun (Jacobian) 和 col_deriv。从 Dfun 我们得到:

Dfun : callable, optional

A function or method to compute the Jacobian of func with derivatives across the rows. If this is None, the Jacobian will be estimated.

col_deriv 我们得到:

col_deriv : bool, optional

non-zero to specify that the Jacobian function computes derivatives down the columns (faster, because there is no transpose operation).

我的解读如下:

  1. 默认情况下,scipy 期望计算雅可比矩阵的函数返回一个遵循“正常”定义的矩阵(参见,例如 https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant)。

  2. 但是,scipy 本身会调用其他函数,可能是用 Fortran 编写的 see, e.g., minpack ,它期望导数(关于坐标)被放置在列中。

因此,如果计算雅可比矩阵的函数可以返回一个矩阵,其导数沿列而不是行放置,那么 scipy 将不需要在将雅可比矩阵传递给 minpack 函数从而节省计算时间。

关于python - 在 scipy.optimize.root 中计算 Jacobian 的默认选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135563/

相关文章:

python - 在 matplotlib 中设置分组条形图之间的间距

python - 有效扩张线性回归

algorithm - 如何有效地将 XOR 应用于两个整数数组?

algorithm - 连接所有岛屿的最低成本是多少?

python - Celery 获取已注册任务列表

python - 成对距离在稀疏矩阵上失败,并显示无信息的错误消息

python - 如何使用正则表达式仅匹配 URL 的域部分?

python - 我想了解函数中定义的以下代码行

python - 如何用 Python 获取 Json 数据?