拜斯托根查找法需要非常好的初始近似值来收敛二次因子。
我尝试了各种常数、随机数、分数(通过Lin计算-a1/a2,-a0/a2)等方法,但都没有成功。
请问有没有人知道选择这些因子的好方法?
例如:
1*x^8 + 118*x^7 + 1*x^6 + 2*x^5 - 2*x^4 - 3*x^3 + 3*x^2 + 2*x + 1
使用初始近似值0.1、0.2查找根需要的时间是使用0.2、2.0的3倍。
或者:
1*x^8 - 36*x^7 + 546*x^6 - 4536*x^5 + 22449*x^4 - 67284*x^3 + 118124*x^2 - 109584*x + 40320
使用0.1、1.2比使用0.1、0.1略慢(约50%)
尝试使用柯西(Cauchy)的界限进行初始二次逼近:
R=0
for i in range(1,n+1):
R=max(abs(a[i]/a[0]),R)
R=1+R
phi=2*pi*random()
x1=complex(R*cos(phi),R*sin(phi))
x2=complex(x1.real,-x1.imag)
r=-x1.real-x2.real
s=(x1*x2).real
很遗憾,这并没有真正加快收敛速度。
x^8+118*x^7
。它有一个根x=-118
和七个根x=0
。在小扰动下,这不会改变太多。对于小根,主导项x^8
是一个小扰动,支配二项式是 7 次多项式118*x^7+1
。因此,对于具有小根的二次因子,这基本上是奇次情况。如果收敛到复杂解,则行为良好,如果是实根,则发散或收敛缓慢。 - Lutz Lehmann