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 个正项,用作变量的比例因子。
- func可调用对象
- 返回:
- 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])