scipy.optimize --- 求根与最小化

scipy.optimize 子模块提供了用于查找用户自定义标量函数的根和极小值的简单例程。由于每次迭代都必须回调到用户提供的 Python 可调用对象,相比纯 Python 实现的速度提升有限(通常约为 2 倍)。

函数

scipy.optimize.bisect(f: Callable[[float], float], a: float, b: float, *, xtol: float = xtolerance, maxiter: int = 100) float

使用二分法在区间 [a, b] 中查找 f 的根。f 必须在该区间上变号。

参数:
  • f -- 可调用对象,接受单个 float 并返回一个 float

  • a -- 区间左端点。

  • b -- 区间右端点。

  • xtol -- 根位置的绝对容限(默认 xtolerance)。

  • maxiter -- 最大二分次数(默认 100)。

返回:

根的位置,类型为 float

抛出:

ValueError -- 如果 f(a) * f(b) > 0

scipy.optimize.curve_fit(f: Callable[..., float], xdata: ndarray | list | tuple, ydata: ndarray | list | tuple, p0: ndarray | list | tuple, *, xatol: float = xtolerance, fatol: float = xtolerance, maxiter: int | None = None) None

用于非线性最小二乘曲线拟合(Levenberg-Marquardt)的占位实现。为保持 API 兼容性而存在于模块表中,但目前仅是一个占位符:它接受并验证其参数,但始终返回 None。在此例程实现之前,请优先使用 fmin() 或外部库。

参数:
  • f -- 模型可调用对象 f(x, *params) -> float

  • xdata -- 自变量值的一维类数组对象。

  • ydata -- 因变量值的一维类数组对象,长度与 xdata 相同。

  • p0 -- 初始参数估计的一维类数组对象。

scipy.optimize.fmin(f: Callable[[float], float], x0: float, *, xatol: float = xtolerance, fatol: float = xtolerance, maxiter: int = 200) float

使用下降单纯形(Nelder-Mead)方法查找标量函数 f 的局部极小值的位置。

参数:
  • f -- 可调用对象,接受单个 float 并返回一个 float

  • x0 -- 初始猜测值。

  • xatol -- 位置的绝对容限(默认 xtolerance)。

  • fatol -- 函数值的绝对容限(默认 xtolerance)。

  • maxiter -- 最大迭代次数(默认 200)。

返回:

极小值的位置,类型为 float

scipy.optimize.newton(f: Callable[[float], float], x0: float, *, tol: float = xtolerance, rtol: float = rtolerance, maxiter: int = 50) float

使用 Newton-Raphson(割线)方法查找实值标量函数 f 的零点。

参数:
  • f -- 可调用对象,接受单个 float 并返回一个 float

  • x0 -- 初始猜测值。

  • tol -- 根的绝对容限(默认 xtolerance)。

  • rtol -- 根的相对容限(默认 rtolerance)。

  • maxiter -- 最大迭代次数(默认 50)。

返回:

根的位置,类型为 float