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可调用对象
- 返回:
- xndarray
解(或不成功调用时的最后一次迭代结果)。
- infodict字典
一个可选输出的字典,包含以下键:
nfev
函数调用次数
njev
雅可比调用次数
fvec
在输出处评估的函数
fjac
最终近似雅可比矩阵的 QR 分解产生的正交矩阵 q,按列存储
r
相同矩阵的 QR 分解产生的上三角矩阵
qtf
向量
(transpose(q) * fvec)
- ier整数
一个整数标志。如果找到解,则设置为 1,否则请参阅 mesg 以获取更多信息。
- mesg字符串
如果未找到解,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])