我正在研究多项式根的 Durand-Kerner 迭代方法。它具有二次收敛速度,但是当处理具有重根的多项式时,收敛只是线性的。我一直在寻找 Durand-Kerner 的修改版本,即使对于多个根也可以保持二次收敛速度? 有推荐吗?
我已经获得了一些有关 Zeng 对 Durand-Kerner 方法进行修改的信息,该方法添加了一些错误修正,但我无法验证它的来源。
这是一个我认为应该可行的建议。
从一系列猜测开始
g
。然后像这样进行 3 轮迭代:
p = durand_kerner(poly, g)
q = durand_kerner(poly, p)
g = geometric(poly, g, p, q)
前两次迭代是标准的。第三个对每个索引
i
依次进行这样的工作:
s = p[i] - g[i]
t = q[i] - p[i]
if |t| < |s|:
a = t / s
try replacing q[i] in the i'th equation of durand_kerner
with g[i] + s / (1 - a). Actually do so if it is better
想法是这样的。如果存在不重复的根,则几何步长不会提高。如果有重复的根并且您很接近,则几何步长将是总和
s + a*s + a^2*s + ...
,它应该接近多重根。