65.9K
CodeProject 正在变化。 阅读更多。
Home

使用二分法求解复数域上多项式的根

2024年6月4日

MIT

2分钟阅读

viewsIcon

7757

downloadIcon

244

使用“扩展”二分法寻找具有复数系数的多项式的根

引言

据我所知,二分法的缺点在于事先难以确定 p(a)*p(b) = -1 的条件,即多项式(在实数域上)何时改变符号。在上一篇文章(使用二分法求解实数和虚数根)中,通过求导多项式来找到这些点。现在,对于复数域上的多项式,只需要“上界”即可。

背景

如果 P(x) = cnxn+an−1xn−1+...+c0,根据柯西半径,所有根都将位于半径为

上界半径 = max { 1, ||c0/cn||, ||c1/cn||, ...,||cn-1/cn|| }。下界半径则是它的倒数,即

下界半径 = 1/(上界半径)。 (如果上界 < 1,则交换上下界)。

如果半径为 1,实部和虚部的范围可能是 ±1 和 ±i。

现在,该应用程序找到在这些界限内,两个点的多项式值的实部和虚部具有相反符号的位置(Re(P(a))=-Re(P(b)) 且 Im(P(a))=-Im(P(b)))。当找到这些点(例如,“a”和“b”)时,可以确定根将位于以 (a+b)/2 为中心,半径为 (a-b)/2 的所有可能的圆的集合内。

历史

版本 1.0.4.0

修复了一些错误。

版本 1.0.8.0

修复了一些错误。

版本 1.0.10.0

修复了 Complex 类中的一个错误。复数求非整数次幂失败,因此最后两个根大多被错误地计算出来。

版本 1.0.11.0

二分法得到了改进,响应速度也提高了。

版本 1.0.12.0 (2024/06/19)

提高了根的精度,尤其是在存在重根时。

版本 1.0.13.0 (2024/06/23)

在此版本中,根的精度是可选择的,因此执行时间也会相应变化。

版本 1.0.14.0 (2024/06/26)

为了提高精度,一些变量的类型从 Double 更改为 Rational。

在通过由“a”和“b”定义的圆的每次成功迭代后,代码会检查 Banach 不动点定理的条件。如果满足条件,则应用牛顿法。

这些更改使得选择精度变得不必要,因此已将其删除。

© . All rights reserved.