Я хотел бы найти все действительные корни одномерного многочлена. Например, я мог бы использовать алгоритм Дженкинса-Трауба, но я хочу научиться решать его с помощью сопутствующей матрицы.
Я знаю, как превратить многочлен в сопутствующую матрицу, и я нашел скрипт, который выполняет декомпозицию QR: http://quantstart.com/articles/QR-Decomposition-with-Python-and-NumPy
И тут я теряюсь: что делать дальше? Я думаю, что мне нужно вычислить несколько разложений, но когда я это делаю, я всегда получаю один и тот же результат (очевидно). Я также читал, что может быть полезно сначала преобразовать сопутствующую матрицу в форму Хессенберга, но как? Потом есть "сдвиги" - какие они?
Я также нашел 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. Собственные значения треугольной матрицы перечислены на диагонали, и проблема собственных значений решена».
...wait , какая? Я попытался:for i in range(100): Q, R = householder(A) A = mult_matrix(R, Q)
но, похоже, нет никакого прогресса, и я не вижу никаких чисел, даже близких к правильным корням.
Пожалуйста, кто-нибудь может объяснить мне это?
PS: я не хочу слепо использовать LAPACK или что-то подобное, так как хочу понять, как это работает, хотя бы в очень упрощенном виде.
PPS: есть также http://adorio-research.org/wordpress/?p=184 (хотя не уверен, чем он отличается от первого метода...)