当多项式只有 <n 个唯一(精确)根时,numpy.roots() 会 return n 个不同的浮点数吗?
Will numpy.roots() ever return n different floats when a polynomial only has <n unique (exact) roots?
我认为标题说明了一切,但为了具体起见,假设我有一些名为 "coeffs" 的数字列表。假设具有所述系数的多项式恰好有 k 个唯一根,以下代码是否会将 number_of_unique_roots 设置为大于 k 的数字?
import numpy as np
number_of_unique_roots = len(set(np.roots(coeffs)))
是的。
>>> len(set(numpy.roots([1, 6, 9])))
2
>>> numpy.roots([1, 6, 9])
array([-3. +3.72529030e-08j, -3. -3.72529030e-08j])
更准确地说,具有 k 重根的多项式 f(x)
的扰动 f(x)+eps·g(x)
通常具有唯一的根,并且 k 重根分离成一个几乎对称的星形原始 k 重根周围的 k 个顶点,其距离与 eps^(1/k)
成正比。
多项式的数值计算(64 位 doubles
)带有取消错误,尤其是在根附近。这可以解释为 eps=1e-16
的扰动。因此,与其他答案一样,双根分裂成两个根,距离为 1e-8
,原始根位于中间。 4 重根将导致大小为 ~1e-4
等的正方形或菱形结构
我认为标题说明了一切,但为了具体起见,假设我有一些名为 "coeffs" 的数字列表。假设具有所述系数的多项式恰好有 k 个唯一根,以下代码是否会将 number_of_unique_roots 设置为大于 k 的数字?
import numpy as np
number_of_unique_roots = len(set(np.roots(coeffs)))
是的。
>>> len(set(numpy.roots([1, 6, 9])))
2
>>> numpy.roots([1, 6, 9])
array([-3. +3.72529030e-08j, -3. -3.72529030e-08j])
更准确地说,具有 k 重根的多项式 f(x)
的扰动 f(x)+eps·g(x)
通常具有唯一的根,并且 k 重根分离成一个几乎对称的星形原始 k 重根周围的 k 个顶点,其距离与 eps^(1/k)
成正比。
多项式的数值计算(64 位 doubles
)带有取消错误,尤其是在根附近。这可以解释为 eps=1e-16
的扰动。因此,与其他答案一样,双根分裂成两个根,距离为 1e-8
,原始根位于中间。 4 重根将导致大小为 ~1e-4
等的正方形或菱形结构