В числовой линейной алгебре алгоритм QR или итерация QR — это алгоритм собственных значений : то есть процедура вычисления собственных значений и собственных векторов матрицы . Алгоритм QR был разработан в конце 1950-х годов Джоном Г. Фрэнсисом и Верой Н. Кублановской , работавшими независимо друг от друга. [1] [2] [ 3] Основная идея заключается в выполнении разложения QR , записи матрицы в виде произведения ортогональной матрицы и верхней треугольной матрицы , умножении множителей в обратном порядке и итерации.
Формально, пусть A будет вещественной матрицей, собственные значения которой мы хотим вычислить, и пусть A 0 := A . На k -м шаге (начиная с k = 0 ) мы вычисляем QR-разложение A k = Q k R k , где Q k - ортогональная матрица (т. е. Q T = Q −1 ), а R k - верхняя треугольная матрица. Затем мы формируем A k +1 = R k Q k . Обратите внимание, что все A k подобны и , следовательно, имеют одинаковые собственные значения. Алгоритм численно устойчив, поскольку он выполняется с помощью ортогональных преобразований подобия.
При определенных условиях [4] матрицы A k сходятся к треугольной матрице, форме Шура матрицы A . Собственные значения треугольной матрицы перечислены на диагонали, и проблема собственных значений решена. При проверке сходимости непрактично требовать точных нулей, [ требуется цитата ], но теорема Гершгорина о круге дает ограничение на ошибку.
В этой грубой форме итерации относительно дороги. Это можно смягчить, сначала приведя матрицу A к верхней форме Хессенберга (что требует арифметических операций с использованием техники, основанной на редукции Хаусхолдера ), с конечной последовательностью ортогональных преобразований подобия, что-то вроде двустороннего разложения QR. [5] [6] (Для разложения QR рефлекторы Хаусхолдера умножаются только слева, но для случая Хессенберга они умножаются как слева, так и справа.) Определение QR-разложения верхней матрицы Хессенберга требует арифметических операций. Более того, поскольку форма Хессенберга уже почти верхнетреугольная (она имеет только один ненулевой элемент под каждой диагональю), использование ее в качестве отправной точки сокращает количество шагов, необходимых для сходимости алгоритма QR.
Если исходная матрица симметрична , то верхняя матрица Хессенберга также симметрична и, следовательно, трехдиагональна , и все A k тоже . Эта процедура требует арифметических операций с использованием метода, основанного на редукции Хаусхолдера. [5] [6] Определение QR-разложения симметричной трехдиагональной матрицы требует операций. [7]
Скорость сходимости зависит от разделения между собственными значениями, поэтому практический алгоритм будет использовать сдвиги, явные или неявные, для увеличения разделения и ускорения сходимости. Типичный симметричный алгоритм QR изолирует каждое собственное значение (затем уменьшает размер матрицы) всего за одну или две итерации, что делает его эффективным и надежным. [ требуется пояснение ]
Базовый алгоритм QR можно визуализировать в случае, когда A — положительно определенная симметричная матрица. В этом случае A можно изобразить как эллипс в 2 измерениях или эллипсоид в более высоких измерениях. Связь между входными данными алгоритма и одной итерацией можно изобразить, как на рисунке 1 (нажмите, чтобы увидеть анимацию). Обратите внимание, что алгоритм LR изображен рядом с алгоритмом QR.
Одна итерация заставляет эллипс наклоняться или «падать» по направлению к оси x. В случае, когда большая полуось эллипса параллельна оси x, одна итерация QR ничего не делает. Другая ситуация, когда алгоритм «ничего не делает», — это когда большая полуось параллельна оси y, а не оси x. В этом случае эллипс можно рассматривать как балансирующий ненадежно, не имея возможности упасть ни в одном направлении. В обеих ситуациях матрица диагональна. Ситуация, когда итерация алгоритма «ничего не делает», называется неподвижной точкой . Стратегия, используемая алгоритмом, — это итерация по направлению к неподвижной точке . Заметьте, что одна неподвижная точка устойчива, а другая неустойчива. Если бы эллипс был отклонен от нестабильной неподвижной точки на очень небольшую величину, одна итерация QR заставила бы эллипс наклониться от неподвижной точки, а не к ней. Однако в конечном итоге алгоритм сойдется к другой неподвижной точке, но это займет много времени.
Стоит отметить, что нахождение даже одного собственного вектора симметричной матрицы невычислимо (в точной вещественной арифметике согласно определениям в вычислимом анализе ). [8] Эта трудность существует всякий раз, когда кратности собственных значений матрицы неизвестны. С другой стороны, такой же проблемы не существует для нахождения собственных значений. Собственные значения матрицы всегда вычислимы.
Теперь мы обсудим, как эти трудности проявляются в базовом алгоритме QR. Это показано на рисунке 2. Напомним, что эллипсы представляют собой положительно определенные симметричные матрицы. Когда два собственных значения входной матрицы приближаются друг к другу, входной эллипс превращается в круг. Круг соответствует кратному единичной матрицы. Почти круг соответствует почти кратному единичной матрицы, собственные значения которой почти равны диагональным элементам матрицы. Поэтому в этом случае задача приблизительного нахождения собственных значений оказывается простой. Но обратите внимание, что происходит с полуосями эллипсов. Итерация QR (или LR) наклоняет полуоси все меньше и меньше по мере того, как входной эллипс приближается к кругу. Собственные векторы могут быть известны только тогда, когда полуоси параллельны осям x и y. Число итераций, необходимых для достижения почти параллельности, неограниченно увеличивается по мере того, как входной эллипс становится более круглым.
Хотя вычислить собственное разложение произвольной симметричной матрицы может быть невозможно, всегда можно возмущение матрицы на произвольно малую величину и вычислить собственное разложение результирующей матрицы. В случае, когда матрица изображена как почти круг, матрицу можно заменить на ту, изображением которой является идеальный круг. В этом случае матрица является кратной единичной матрицы, и ее собственное разложение происходит немедленно. Однако следует помнить, что полученный собственный базис может быть довольно далек от исходного собственного базиса.
Замедление, когда эллипс становится более круглым, имеет обратную сторону: оказывается, что когда эллипс становится более растянутым - и менее круглым - то вращение эллипса становится быстрее. Такое растяжение может быть вызвано, когда матрица , которую представляет эллипс, заменяется на , где приблизительно является наименьшим собственным значением . В этом случае отношение двух полуосей эллипса приближается к . В более высоких измерениях сдвиг, подобный этому, делает длину наименьшей полуоси эллипсоида малой относительно других полуосей, что ускоряет сходимость к наименьшему собственному значению, но не ускоряет сходимость к другим собственным значениям. Это становится бесполезным, когда наименьшее собственное значение полностью определено, поэтому матрицу затем необходимо дефляционировать , что просто означает удаление ее последней строки и столбца.
Проблема с нестабильной неподвижной точкой также должна быть решена. Эвристика сдвига часто предназначена для решения этой проблемы: Практические сдвиги часто являются прерывистыми и рандомизированными. Сдвиг Уилкинсона, который хорошо подходит для симметричных матриц, таких как те, которые мы визуализируем, в частности, является прерывистым.
В современной вычислительной практике алгоритм QR выполняется в неявной версии, что упрощает введение использования множественных сдвигов. [4] Сначала матрица приводится к верхней форме Хессенберга , как в явной версии; затем на каждом шаге первый столбец преобразуется с помощью преобразования подобия Хаусхолдера малого размера в первый столбец [ необходимо разъяснение ] (или ), где , степени , является полиномом, определяющим стратегию сдвига (часто , где и являются двумя собственными значениями конечной главной подматрицы , так называемый неявный двойной сдвиг ). Затем выполняются последовательные преобразования Хаусхолдера размера для того, чтобы вернуть рабочую матрицу к верхней форме Хессенберга. Эта операция известна как погоня за выпуклостью , из-за особой формы ненулевых элементов матрицы вдоль шагов алгоритма. Как и в первой версии, дефляция выполняется, как только один из поддиагональных элементов становится достаточно малым.
Поскольку в современной неявной версии процедуры QR-разложения явно не выполняются, некоторые авторы, например Уоткинс [9], предложили изменить его название на алгоритм Фрэнсиса . Голуб и Ван Лоан используют термин Francis QR step .
Алгоритм QR можно рассматривать как более сложную вариацию базового алгоритма собственных значений "степени" . Напомним, что алгоритм степени многократно умножает A на один вектор, нормализуя после каждой итерации. Вектор сходится к собственному вектору наибольшего собственного значения. Вместо этого алгоритм QR работает с полным базисом векторов, используя разложение QR для повторной нормализации (и ортогонализации). Для симметричной матрицы A при сходимости AQ = QΛ , где Λ — диагональная матрица собственных значений, к которой сходится A , и где Q — это композиция всех ортогональных преобразований подобия, необходимых для этого. Таким образом, столбцы Q являются собственными векторами.
Алгоритму QR предшествовал алгоритм LR , который использует LU-разложение вместо QR-разложения. Алгоритм QR более стабилен, поэтому в настоящее время алгоритм LR используется редко. Однако он представляет собой важный шаг в развитии алгоритма QR.
Алгоритм LR был разработан в начале 1950-х годов Хайнцем Рутисхаузером , который в то время работал научным сотрудником Эдуарда Штифеля в ETH Zurich . Штифель предложил Рутисхаузеру использовать последовательность моментов y 0 T A k x 0 , k = 0, 1, ... (где x 0 и y 0 — произвольные векторы) для нахождения собственных значений A . Рутисхаузер взял алгоритм Александра Эйткена для этой задачи и развил его в алгоритм фактор-разности или алгоритм qd . После организации вычислений в подходящей форме он обнаружил, что алгоритм qd на самом деле является итерацией A k = L k U k (LU-разложение), A k +1 = U k L k , примененной к трехдиагональной матрице, из которой следует алгоритм LR. [10]
Один из вариантов алгоритма QR , алгоритм Голуба-Кахана-Райнша, начинается с приведения общей матрицы к двухдиагональной. [11] Этот вариант алгоритма QR для вычисления сингулярных значений был впервые описан Голубом и Каханом (1965). Подпрограмма LAPACK DBDSQR реализует этот итерационный метод с некоторыми изменениями для покрытия случая, когда сингулярные значения очень малы (Demmel & Kahan 1990). Вместе с первым шагом, использующим отражения Хаусхолдера и, при необходимости, разложение QR , это формирует процедуру DGESVD для вычисления разложения сингулярных значений . Алгоритм QR также может быть реализован в бесконечных измерениях с соответствующими результатами сходимости. [12] [13]