You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.optimize.newton的tol参数是否针对输入x而非函数输出值?

关于Scipy中newton函数tol参数的说明

问题结论

是的,scipy.optimize.newton的tol参数默认确实作用于输入变量x的迭代步长,而非目标函数输出f(x)的残差。

测试代码异常的直接原因

你选择了初始点x=0,而你定义的函数fn = lambda x: x*x-60在x=0处的导数值为0,牛顿法(未传入导数参数时默认使用正割法)在该位置无法正常迭代更新x值,两次迭代的x差值直接小于你设置的tol=0.1,所以迭代提前终止,返回了接近0的结果,对应的f(x)自然接近-60。
另外注意你的导入拼写有误,正确导入应为from scipy.optimize import newton,你写的optimise是英式拼写,会导致导入报错。

参数设计说明

newton函数的官方定义中,终止条件为|x_k - x_{k-1}| < tol,即相邻两次迭代的x值的绝对差小于容差时停止迭代。这种设计是数值求根领域的常见实现:

  • 步长容差不受函数缩放影响,比如你将目标函数整体乘以任意常数,x的解精度不会受干扰
  • 如果需要基于f(x)残差的终止条件,可在迭代结束后自行校验fn(res)是否符合要求,或是使用scipy.optimize.root_scalar接口,该接口支持更灵活的终止条件配置

修正后的测试示例

from scipy.optimize import newton
fn = lambda x: x*x-60
# 传入导数,选择非导数零点的初始值8
res = newton(fn, 8, fprime=lambda x: 2*x, tol=0.1, maxiter=10000)
print(res) # 输出约7.746,满足x的步长容差要求
print(fn(res)) # 输出约1e-4量级,残差远小于预期

内容的提问来源于stack exchange,提问作者BlueTrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:36:04