Я пытаюсь использовать 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' в числовом решателе из-за возмущений в оценке с плавающей запятой. С типичным уровнем по умолчанию «1е-6» или меньше это может быть невозможно разрешить. Кластерный анализ для поиска нескольких или близких корней может помешать этому. – LutzL
@ LutzL Я думаю о кластерном анализе, возможно, в другом свете (например, мой вариант использования для него был бы похож на анализ основных компонентов). Как кластерный анализ связан с поиском нескольких корней? – Hooked
Множественные корни тесно связаны в численном поведении с кластерами корней. Я не знаю, где это делается в программном обеспечении, но с математической точки зрения было бы полезно идентифицировать относительно небольшие диски в комплексной плоскости, которые содержат несколько или несколько корней и найти соответствующие полиномиальные факторы. Эта промежуточная факторизация не страдает от потери точности, как в случае корня с кратностью. Однако факторы малой степени могут по-прежнему приводить к нестабильным корням, как в примере. – LutzL