Степенной метод: как численно находят собственные значения матрицы
Степенной метод: итерации с умножением на матрицу выдают максимальное по модулю собственное число и вектор. Ручной прогон, Рэлей, сдвиги, обратный метод.
У Google миллиарды веб-страниц, и каждой нужен рейтинг важности. Рейтинг — это компоненты собственного вектора матрицы ссылок размером в миллиарды строк: PageRank — гигантский степенной метод на матрице переходов цепи Маркова, крутящийся на обычном железе. Умножай вектор на матрицу, нормируй, повторяй — и спектр сам проявится. Здесь разбираем эту идею в миниатюре: от итераций в столбик до отношения Рэлея, сдвигов и моста к QR-алгоритму.
Почему характеристический многочлен — тупик#
В курсе линейной алгебры собственные значения ищут через характеристическое уравнение: для матрицы 2×2 это квадратное уравнение, для 3×3 — кубическое. Логичный ход — продолжить и для больших матриц. Упираемся в стену: начиная с пятой степени формул корней не существует в принципе (теорема Абеля—Руффини), а характеристическое уравнение степени 1000 — это 1001 коэффициент, миллион слагаемых в старших и никакого шанса на честное решение.
Даже если многочлен как-то выписать, корни катастрофически чувствительны к коэффициентам. Классический пример Уилкинсона: у многочлена все корни — целые числа от 1 до 20. Сдвиньте коэффициент при на — и пара вещественных корней 10 и 11 превращается в комплексные . Коэффициенты характеристического многочлена считаются через определители с округлениями — спектр оказывается испорчен ещё до решения уравнения. Отсюда железное правило численной линейной алгебры: не превращай матрицу в многочлен, работай с ней напрямую.
Степенной метод: одно умножение за итерацию#
Степенной метод игнорирует многочлен целиком. Нужна одна операция — умножение матрицы на вектор. Стартуем с любого вектора и повторяем:
Почему это вообще работает? Разложим стартовый вектор по собственным векторам: Каждое умножение тянет из слагаемого свой множитель, и после шагов Если строго больше остальных модулей, слагаемое с обгоняет всех: нормированный вектор поворачивается к , а норма тянется к . Из каждой итерации выжимают три вещи:
- оценка по норме: — длина вектора до нормирования
- оценка по компонентам: — частное соответствующих компонент
- критерий остановки: — приращение оценки застопорилось; тот же принцип, что в методе Ньютона
Практическая деталь: в стартовом векторе должна быть хоть капля , то есть . Если точно ортогонален главному направлению, метод уползёт к следующему собственному вектору. В машинной арифметике округления обычно сами подмешивают нужную каплю, но рассчитывать на это как на гарантию не стоит.
Прогоняем руками: матрица с корнями 5 и 2#
Достаточно теории — посчитаем. Берём матрицу, которую уже щупали в интерактиве:
Собственные значения и , векторы и . Проверьте умножением: и . Отношение модулей обещает сходимость к пятёрке со скоростью «ошибка в 2,5 раза меньше за шаг». Стартуем с .
- Умножаем:
- Норма до нормирования: — первая оценка
- Нормируем: — направление уже развернулось от оси к биссектрисе
- Вторая итерация: , норма , нормируем:
- Угол между и — около , хотя на старте было
| $k$ | $x_k$ | $\|A x_{k-1}\|$ | $r(x_k)$ Рэлея | угол к $v_1$ |
|---|---|---|---|---|
| 0 | (1; 0) | — | 4,000 | 45° |
| 1 | (0,894; 0,447) | 4,472 | 5,000 | 18,4° |
| 2 | (0,789; 0,614) | 5,099 | 5,077 | 7,1° |
| 3 | (0,741; 0,672) | 5,091 | 5,042 | 2,8° |
| 4 | (0,721; 0,693) | 5,044 | 5,018 | 1,1° |
| 5 | (0,713; 0,702) | 5,019 | 5,008 | 0,4° |
| 6 | (0,709; 0,705) | 5,008 | 5,003 | 0,2° |
Предел виден невооружённым глазом: — нормированный собственный вектор, а оценки тают к . Заметьте две честные подробности. Норма немонотонна: — матрица несимметрична, путь к пределу виляет. И Рэлей на первом шаге случайно попал точно в — совпадение, а не закономерность: после второго шага ошибка вернулась к типичному затуханию.
Ошибка тает в 2,5 раза за итерацию#
Скорость степенного метода зашита в спектре: ошибка примерно пропорциональна — отношению модулей первого соперника и лидера. Здесь : 0,4; 0,16; 0,064; 0,026… Углы в таблице послушно делятся на 2,5: . Перевод в знаки: при , то есть каждые два-три шага метод выигрывает один верный десятичный знак.
Медленно? По меркам Гаусса — да, но сравнение нечестное. Итерация стоит умножений для плотной матрицы, а для разреженной — числа ненулевых элементов, которых может быть вместо . Память — один вектор, . Именно поэтому метод жив на гигантских разреженных задачах, где плотные алгоритмы не помещаются ни во время, ни в диски: PageRank с демпфированием 0,85 жмёт ошибку в раз — за сотню итераций в раз, и этого хватает на весь веб.
Отношение Рэлея и сдвиг: точность и наведение#
Норма — грубая оценка собственного числа. Существует точный скалярный функционал:
Если отклонён от собственного вектора на угол , то ошибка — второй порядок против первого у нормы. В таблице это видно: на шаге 2 угол , и Рэлей даёт — ошибка против по норме; на шестом шаге Рэлей уже . Отношение Рэлея — это ещё и способ остановиться красиво: когда нужен с запасом точности, итерации завершают по нему, а не по норме.
Вторая работа скаляра — наведение. Матрица имеет собственные значения : векторы те же, спектр сдвинут целиком. Подбирая , можно сделать наибольшим по модулю нужное число. Пример: сдвиг даёт для матрицы-героя числа и — теперь доминирует , то есть то самое , к которому исходный метод не собирался. Бонус: отношение модулей улучшается с до — сходимость почти втрое резвее. Нашли — прибавьте сдвиг: .
Обратный степенной метод: где взять вектор#
Практика ставит задачу наоборот: приближение найдено — сдвигом, QR, из постановки задачи, — а нужен собственный вектор. Ответ изящен: итерировать с обратной матрицей. Собственные значения суть , собственные векторы — те же. Для матрицы-героя:
У два собственных числа: (вектор ) и (вектор ). Обратный степенной метод сходится к вектору наименьшего по модулю матрицы . Связка «сдвиг плюс обращение» — главный инструмент всего семейства: чем ближе к искомому , тем сильнее доминирует нужное число и тем быстрее сходимость; при почти точном сдвиге вектор проявляется за одну-две итерации. Обратную матрицу никто не строит явно — на каждом шаге решают систему итерационно, теми же методами, что и обычные СЛАУ.
От степенного метода — к QR-алгоритму#
Одну мысль стоит унести с собой: возведение в степень само ищет собственные направления. Считаем степени матрицы-героя: , , . Отношение второй компоненты к первой внутри столбцов: и , затем и , затем и . Столбцы сползают друг к другу — оба поворачиваются к направлению . Матрица, возведённая в большую степень, забывает всё, кроме доминирующего направления.
QR-алгоритм — промышленное продолжение этой идеи. На каждом шаге матрицу раскладывают в произведение ортогональной и треугольной и переставляют множители: . Ортогональность заменяет жёсткое нормирование степенного метода, и процесс сходится сразу ко всем собственным значениям — фактически диагонализация без единого характеристического многочлена. Современные реализации (приведение к Хессенбергу плюс сдвиги) находят весь спектр плотной матрицы за , а векторы дочитывают уже знакомыми обратными итерациями со сдвигами.
Когда степенной метод не сходится#
| Ситуация | Что видите | Что делать |
|---|---|---|
| , знаки разные ( и ) | итерации прыгают между двумя направлениями, оценка λ дрожит | сдвиг : числа и , модули разведены — сходится к |
| комплексная пара (поворотная матрица) | вектор вращается по кругу, норма стоит на месте | сдвиг нарушает равенство модулей пары |
| дефектная матрица, жорданова клетка | сходится к пятёрке, но вязко: ошибка | сдвиги или QR; степенной в лоб — страдание |
| (соперники близки) | формально сходится, фактически — ждёте вечность | сдвиг рядом с нужным и обратные итерации |
Общий знаменатель всех болезней один: метод смотрит только на модули. Сравнялись два модуля — выделенного направления больше нет, и тянуть не к чему. Сдвиг лечит почти всё, потому что меняет расклад модулей, не трогая векторы; именно поэтому в промышленных алгоритмах сдвиги стоят на каждом шаге.
- Степенной метод: умножай на , нормируй, повторяй — сходится к наибольшему по модулю , если спектр честно разделён
- Оценки числа: норма , частное компонент, отношение Рэлея — точнее всех, ошибка
- Скорость — ; сдвиг перестраивает спектр и наводит метод на нужный корень
- Обратный степенной метод достаёт векторы; пара «QR + обратные итерации» — сердце numpy.linalg.eig и LAPACK
- PageRank — тот же степенной метод на матрице миллиардов строк; ошибка сжимается в раз за итерацию
Прогоните степенной метод на своей матрице из задачника и сверьте с ответом: посчитать три итерации в столбик — пять минут, а понимание приходит именно из ручного счёта. Потренироваться можно в тренажёре численных методов. Теория собственных пар разобрана в уроке линейной алгебры, а словарные статьи про собственный вектор и диагонализацию матрицы пригодятся, если разложение вызывает вопросы.
Матрица имеет собственные значения , и . К какому числу сойдётся степенной метод?
Для матрицы-героя ошибка убывает как . Сколько итераций выигрывают один дополнительный десятичный знак?
Степенной метод применили к , где — матрица-герой . Он сошёлся к числу . Какое собственное значение это даёт?
Частые вопросы
Почему степенной метод находит наибольшее по модулю собственное значение?
Каждое умножение на умножает -ю компоненту разложения на . После итераций соотношение слагаемых — : всё, что по модулю меньше единицы, гаснет. Выживает слагаемое с максимальным модулем — вектор поворачивается к , а норма тянется к . Метод слышит только самый громкий голос спектра; второй по громкости определяет скорость затухания.
Что делать, если два собственных значения равны по модулю, например 5 и −5?
Итерации зажаты между двумя направлениями: чётные шаги тянут к одному вектору, нечётные — к другому, оценка λ дрожит и не сходится. Лечение — сдвиг: у числа и , модули разведены, метод сходится к , откуда . Комплексная пара лечится тем же приёмом: сдвиг нарушает равенство модулей. Внутри QR-алгоритма сдвиги применяют на каждом шаге.
Как численно найти наименьшее собственное значение матрицы?
Обратным степенным методом: итерировать с , чьи собственные числа обратны к . Доминирует , поэтому метод сходится к наименьшему по модулю значению и попутно даёт его вектор. Обращать матрицу явно не нужно: на каждом шаге решают систему , для разреженных матриц — итерационно. Со сдвигом метод достаёт любое , ближайшее к , и очень быстро.
Зачем нужен степенной метод, если есть QR-алгоритм?
QR находит весь спектр плотной матрицы за — но и стоит этих . Когда матрица гигантская и разреженная, а нужно одно число, — как в PageRank на графе из миллиардов страниц, — степенной метод вне конкуренции: итерация — одно умножение разреженной матрицы на вектор. Методы родственники: QR — ортогонализованная версия степенного, а векторы оба дочитывают обратными итерациями со сдвигами.
Готовитесь к контрольной?
Чеклист тем по «Численные методы»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Численные методы»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →