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)[source]#
查找函数的根。
返回给定起点估计的
func(x) = 0
定义的(非线性)方程的根。- 参数:
- func可调用
f(x, *args)
它接受至少一个(可能是向量)参数作为输入,并返回一个等长的值。
- x0ndarray
它用于计算
func(x) = 0
方程的根的初始估计。- args元组,可选
它作为 func 的任何额外参数。
- fprime可调用
f(x, *args)
,可选 它用于计算 func 的雅可比行列式,并跨行计算导数。默认情况下,雅可比行列式将被估计。
- full_output布尔值,可选
如果为 True,则返回可选的输出。
- col_deriv布尔值,可选
它指定雅可比函数是否计算沿列的导数(更快速,因为没有转置操作)。
- xtol浮点数,可选
如果两个连续迭代之间的相对误差不超过 xtol,则计算将终止。
- maxfev整数,可选
它表示对该函数的最大调用次数。如果为零,则
100*(N+1)
即最大值,其中 N 是 x0 中的元素数量。- band元组,可选
如果设置为包含雅可比矩阵带内子对角线和超对角线数量的两序列,则该雅可比矩阵被视为带状(仅适用于
fprime=None
)。- epsfcn浮点数,可选
它表示雅可比行列式的正差分近似的适当步长(对于
fprime=None
)。如果 epsfcn 小于机器精度,则假定函数中的相对误差为机器精度的数量级。- factor浮点数,可选
它表示确定初始步长界限(
factor * || diag * x||
)的参数。它应该在区间(0.1, 100)
中。- diag序列,可选
它作为 N 个正项,用作变量的比例因子。
- func可调用
- Returns:
- 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])