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

scipy库PPoly.roots方法疑似Bug:区间内根无法被检测

解答

这不是使用错误,而是PPoly.roots()方法的内部逻辑导致的问题。

核心原因

当extrapolate=False时,该方法仅在每个分段多项式的开区间内搜索根,并且会忽略端点处的近似0值(哪怕数值极接近0,只要不是严格等于0就不会被判定为根)。你的案例中x[1]处的函数值是6.07e-18,属于浮点近似的0而非严格0,因此被排除;同时原区间内的根可能因靠近端点,被方法的根检测逻辑遗漏,导致无结果返回。

当extrapolate=True时,方法会将多项式外推到定义区间之外,外推后的多项式会产生额外根,但同时也涵盖了原区间内的正确根。

解决思路

  • 手动确认根的存在:在区间[x[0], x[1]]内采样计算函数值,能看到函数值从负过渡到正,可直接证明根的存在。
  • 调整端点或区间:若将x[1]处的函数值设为严格0,roots(extrapolate=False)会识别该端点为根;或稍微缩小区间范围,让根落在新的开区间内,方法即可检测到。
  • 换用根查找工具:使用scipy.optimize.root_scalar,传入区间[x[0], x[1]]和多项式函数,可直接找到根,不受PPoly.roots()的端点逻辑限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:08:16