1
我試圖用mpmath.polyroots
找到一個簡單的多項式的根整係數x*(x-4)**3
,當其擴展爲[1, -12, 48, 64, 0]
係數向量。下面的代碼失敗:尋找一個簡單的多項式的根與mpmath
import mpmath
p = [ 1, -12, 48, -64, 0]
print mpmath.polyroots(p,maxsteps=2000)
與錯誤:
Traceback (most recent call last):
File "poly.py", line 3, in <module>
print mpmath.polyroots(p,maxsteps=2000)
File "/usr/local/lib/python2.7/dist-packages/mpmath/calculus/polynomials.py", line 188, in polyroots
% maxsteps)
mpmath.libmp.libhyper.NoConvergence: Didn't converge in maxsteps=2000 steps.
增加的步驟沒有幫助的數量。預期的答案顯然是[0,4,4,4]
。
如果存在多重性,mpmath無法找到多項式的根?我該如何解決這個問題?
由於浮點評估中的擾動,三重根導致數值求解器中的'1e-5'錯誤級別。對於1e-6或更小的典型默認級別,這可能無法解決。通過聚類分析來查找多個或根目錄可能會阻止這種情況。 – LutzL
@LutzL我認爲這個詞的聚類分析可能有不同的看法(例如我的用例就像主成分分析)。聚類分析如何與尋找多根相關? – Hooked
多根在數值行爲與根簇密切相關。我不知道軟件在哪裏完成,但從數學的角度來看,在複平面中識別包含多個或多個根的相對較小的磁盤並找到相應的多項式因子將是有利的。這種中間因式分解不會像多重性根的情況那樣遭受精度損失。但是,小程度的因素可能仍然會導致不穩定的根源,就像這個例子。 – LutzL