scipy.optimize.

fsolve#

scipy.optimize.fsolve(func, x0, args=(), fprime=None, full_output=0, col_deriv=0, xtol=1.49012e-08, maxfev=0, band=None, epsfcn=None, factor=100, diag=None)[源代码]#

查找函数的根。

返回由 func(x) = 0 定义的(非线性)方程的根,给定一个起始估计值。

参数:
func可调用对象 f(x, *args)

一个至少接受一个(可能是向量)参数并返回相同长度的值的函数。

x0ndarray

func(x) = 0 的根的起始估计值。

argstuple, 可选

传递给 func 的任何额外参数。

fprime可调用对象 f(x, *args), 可选

一个计算 func 的雅可比矩阵的函数,导数按行排列。默认情况下,将估计雅可比矩阵。

full_outputbool, 可选

如果为 True,则返回可选输出。

col_derivbool, 可选

指定雅可比函数是否计算列向导数(更快,因为没有转置操作)。

xtolfloat, 可选

如果两个连续迭代之间的相对误差最多为 xtol,则计算将终止。

maxfevint, 可选

对函数的最大调用次数。如果为零,则最大值为 100*(N+1),其中 N 是 x0 中的元素数量。

bandtuple, 可选

如果设置为包含 Jacobi 矩阵带内的子对角线和超对角线数量的二元序列,则认为 Jacobi 矩阵是带状矩阵(仅适用于 fprime=None)。

epsfcnfloat, 可选

用于雅可比矩阵的前向差分近似的合适步长(对于 fprime=None)。如果 epsfcn 小于机器精度,则假定函数中的相对误差与机器精度同阶。

factorfloat, 可选

一个确定初始步长界限的参数(factor * || diag * x||)。应在区间 (0.1, 100) 内。

diagsequence, 可选

N 个正项,用作变量的比例因子。

返回:
xndarray

解决方案(或不成功调用的最后一次迭代的结果)。

infodictdict

具有以下键的可选输出字典

nfev

函数调用次数

njev

雅可比矩阵调用次数

fvec

输出时评估的函数值

fjac

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

r

同一矩阵的 QR 分解产生的上三角矩阵

qtf

向量 (transpose(q) * fvec)

ierint

一个整数标志。如果找到解决方案,则设置为 1,否则请参考 mesg 获取更多信息。

mesgstr

如果未找到解决方案,mesg 会详细说明失败的原因。

另请参阅

root

多元函数求根算法的接口。请特别参阅 method='hybr'

说明

fsolve 是 MINPACK 的 hybrd 和 hybrj 算法的包装器。

示例

查找方程组的解:x0*cos(x1) = 4,  x1*x0 - x1 = 5

>>> import numpy as np
>>> from scipy.optimize import fsolve
>>> def func(x):
...     return [x[0] * np.cos(x[1]) - 4,
...             x[1] * x[0] - x[1] - 5]
>>> root = fsolve(func, [1, 1])
>>> root
array([6.50409711, 0.90841421])
>>> np.isclose(func(root), [0.0, 0.0])  # func(root) should be almost 0.0.
array([ True,  True])