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 的根的初始估计值。

参数tuple, 可选

func 的任何额外参数。

fprime : 可调用函数 f(x, *args), 可选可调用

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

完整输出bool, 可选

如果为真,返回可选输出。

col_derivbool, 可选

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

xtolfloat, 可选

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

maxfevint, 可选

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

乐队tuple, 可选

如果设置为一个包含 Jacobi 矩阵中次对角线和超对角线数量的二元序列,则认为 Jacobi 矩阵是带状的(仅在 fprime=None 时)。

epsfcnfloat, 可选

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

因素float, 可选

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

diag序列,可选

N 个正数条目,作为变量的尺度因子。

返回:
xndarray

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

infodictdict

一个可选输出的字典,键为:

nfev

函数调用次数

njev

雅可比调用次数

fvec

在输出处评估的函数

fjac

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

r

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

qtf

向量 (transpose(q) * fvec)

ier整数

一个整数标志。如果找到解决方案,则设置为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])