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

多项式根计算出现微小虚部的问题及解决方法

NumPy计算多项式根出现微小虚部的解决方法

当使用NumPy计算多项式(x-5)²(x-2)的根时,本该是整数的根5附带了极小的虚部,输出结果如下:

[5.+1.27882372e-07j 5.-1.27882372e-07j 2.+0.00000000e+00j]

重现问题的代码:

import numpy as np
poly=[1,-10,25]  # (x-5)**2
p1 = np.poly1d(poly)
p2 = np.poly1d([1,-2]) # (x-2)
poly2 = p1*p2  # (x-5)**2 * (x-2)
print(poly2.roots) 

print(poly2(5))
print(poly2(2))

解决方案

这是数值计算中常见的浮点精度误差导致的,可通过np.real_if_close函数去除这些可忽略的微小虚部。该函数会将虚部与实部的比值小于指定阈值的复数转换为实数。

修改后的代码:

import numpy as np
poly=[1,-10,25]  # (x-5)**2
p1 = np.poly1d(poly)
p2 = np.poly1d([1,-2]) # (x-2)
poly2 = p1*p2  # (x-5)**2 * (x-2)

# 移除微小虚部,tol设置虚部/实部的阈值
formatted_roots = np.real_if_close(poly2.roots, tol=1e-5) 
# 转换为浮点数值格式
roots = formatted_roots.astype(float)
print(roots)

运行后输出为纯实数数组:[5. 5. 2.]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:19