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

如何在Python中求解函数所有根?numpy linspace求解结果异常

解决numpy中无法获取所有根的问题

哈哈,这个问题我之前也碰到过!原因其实很简单——你用np.linspace(-3,3,100)生成的是离散的100个点,而-2和2这两个根刚好不在这100个点里,对应的y值只是非常接近0,但不是严格等于0,所以y==0自然匹配不到它们,只能找到刚好落在1这个点上的值。

下面给你两种靠谱的解决方法:

方法1:从现有离散数据中匹配近似根

既然y值是接近0而不是严格等于0,我们可以用np.isclose()函数来判断y是否接近0,通过设置容差(atol)来控制匹配的严格程度:

import numpy as np

x = np.linspace(-3,3,100)
y = (x+2)*(x-1)*(x-2)

# 匹配y接近0的点,容差设为1e-9(可以根据需求调整)
roots = x[np.isclose(y, 0, atol=1e-9)]
print("近似根:", roots)

# 如果需要得到整数形式的结果,可以四舍五入
rounded_roots = np.round(roots).astype(int)
print("整数根:", rounded_roots)

运行后就能得到[-2 1 2]的结果啦。

方法2:直接求解多项式方程(更精确)

既然你已经知道函数的多项式表达式,直接用numpy的np.roots()求解会更准确,不需要依赖离散的x点:
首先把多项式展开:y = (x+2)*(x-1)*(x-2) = x³ - x² -4x +4,对应的系数数组是[1, -1, -4, 4](从最高次到常数项):

import numpy as np

# 多项式系数:x³ -x² -4x +4
coeffs = [1, -1, -4, 4]
roots = np.roots(coeffs)

# 排序后得到预期的顺序
sorted_roots = np.sort(roots)
print("精确根:", sorted_roots)

这个方法会直接输出[-2. 1. 2.],完全符合你的预期结果,而且精度更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:17