scipy.optimize.root¶
- scipy.optimize.root(fun, x0, args=(), method='hybr', jac=None, tol=None, callback=None, options=None)[源代码]¶
求向量函数的根。
- 参数
- fun可调用
要求其根的向量函数。
- x0ndarray
初步猜测是这样的。
- args元组,可选
传递给目标函数及其雅可比的额外参数。
- method字符串,可选
求解器的类型。应该是
‘hybr’ (see here)
“lm” (see here)
“Broyden1” (see here)
“Broyden2” (see here)
“安德森” (see here)
“线性混合” (see here)
“Diagbroyden” (see here)
“激动人心的混合” (see here)
“克里洛夫” (see here)
“df-sane” (see here)
- jacBool或Callable,可选
如果 jac 是布尔值并且为True, fun 假定与目标函数一起返回雅可比的值。如果为False,则将以数值方式估计雅可比。 jac 也可以是一个可调用的,返回 fun 。在这种情况下,它必须接受与 fun 。
- tol浮动,可选
对终止的容忍度。有关详细控制,请使用解算器特定的选项。
- callback函数,可选
可选的回调函数。它在每次迭代时都被调用为
callback(x, f)
哪里 x 是当前的解决方案,并且 f 相应的残差。用于除‘hybr’和‘lm’之外的所有方法。- optionsDICT,可选
求解器选项词典。例如, xtol 或 maxiter ,请参见
show_options()
有关详细信息,请参阅。
- 退货
- solOptimizeResult
表示为
OptimizeResult
对象。重要属性包括:x
解决方案阵列,success
指示算法是否成功退出的布尔标志,以及message
它描述了终止的原因。看见OptimizeResult
有关其他属性的说明,请参见。
参见
show_options
求解程序接受的其他选项
注意事项
本节介绍可通过‘method’参数选择的可用求解器。默认方法为 hybr 。
方法 hybr 使用MINPACK中实现的Powell混合方法的修改 [1].
方法 lm 使用MINPACK中实现的修改的Levenberg-MarQuardt算法求解最小二乘意义下的非线性方程组 [1].
方法 df-sane 是一种无导数的谱方法。 [3]
方法: Broyden1 , Broyden2 , 安德森 , 线性混合 , Diagbroyden , 激励性混合 , 克里洛夫 是不精确的牛顿方法,带有回溯或整行搜索 [2]. 每种方法都对应于一个特定的雅可比近似。看见
nonlin
有关详细信息,请参阅。方法 Broyden1 使用Broyden的第一雅可比近似,它被称为Broyden的好方法。
方法 Broyden2 使用Broyden的第二雅可比近似,它被称为Broyden的坏方法。
方法 安德森 使用(扩展的)安德森混合。
方法 克里洛夫 对逆雅可比矩阵使用Krylov近似。它适用于大规模问题。
方法 Diagbroyden 使用对角线Broyden Jacobian近似。
方法 线性混合 使用标量雅可比近似。
方法 激励性混合 使用调整的对角雅可比近似。
警告
为方法实现的算法 Diagbroyden , 线性混合 和 激励性混合 可能对特定问题有用,但它们是否有效可能在很大程度上取决于问题。
0.11.0 新版功能.
参考文献
- 1(1,2)
题名/责任者:The First of the More,Jorge J.,Burton S.Garbow,和Kenneth E.Hillstrom。1980年。MINPACK-1用户指南。
- 2
C.T.凯利。1995年。线性和非线性方程的迭代方法。工业和应用数学学会。<https://archive.siam.org/books/kelley/fr16/>
- 3
拉克鲁兹,J.M.马丁内斯,M.Raydan。数学课。补偿75,1429(2006)。
示例
下列函数定义非线性方程组及其雅可比。
>>> def fun(x): ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0, ... 0.5 * (x[1] - x[0])**3 + x[1]]
>>> 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, method='hybr') >>> sol.x array([ 0.8411639, 0.1588361])