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 个正数条目,作为变量的尺度因子。
- func : 可调用的
- 返回:
- 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])