我想找到一个单变量多项式的所有实根。例如,我可以使用 Jenkins-Traub 算法,但我想学习如何使用伴随矩阵来解决它。
我知道如何将多项式转换为伴随矩阵,并且我找到了一个执行 QR 分解的脚本:http: //quantstart.com/articles/QR-Decomposition-with-Python-and-NumPy
这就是我迷失的地方:下一步该做什么?我想我必须计算多个分解,但是当我这样做时,我总是得到相同的结果(显然)。我还读到,首先将伴随矩阵转换为 Hessenberg 形式可能很有用 - 但是如何?然后是“轮班”——它们是什么?
我还找到了http://www.nr.com/webnotes/nr3web17.pdf但由于我什么都不懂,我想知道是否有更简单的方法(即使速度较慢或不太稳定)。
换句话说:阅读http://en.wikipedia.org/wiki/QR_algorithm
“让 A 成为我们想要计算其特征值的实矩阵”
好的,那是我的伴生矩阵,对吗?“我们计算来自第一个链接的 QR 分解 Ak=QkRk”,对吗
?Q, R = householder(A)
“然后我们形成 Ak+1 = RkQk”
很容易,只需将 R 和 Q 相乘“在一定条件下,[2] 矩阵 Ak 收敛到一个三角矩阵,即 A 的 Schur 形式。三角矩阵的特征值列在对角线上,特征值问题就解决了。”
……等等,什么?我试过了:for i in range(100): Q, R = householder(A) A = mult_matrix(R, Q)
但似乎没有任何进展,我什至看不到任何接近正确根源的数字。
请问,谁能给我解释一下?
PS:我不想盲目地使用 LAPACK 或类似的东西,因为我想了解它是如何工作的,至少在非常简化的方面。
PPS:还有http://adorio-research.org/wordpress/?p=184(不知道它与第一种方法有什么不同,虽然......)