Уровень алгоритма

QR-алгоритм, используемый в SCALAPACK

Материал из Алговики
Перейти к навигации Перейти к поиску


QR-алгоритм, используемый в SCALAPACK - алгоритм, использующий все проверенные на настоящее время приёмы ускорения QR-алгоритма для несимметричных вещественных матриц. Включён своими частями в разные подпрограммы пакета SCALAPACK[1]. Состоит из двух основных частей: ортогонально подобного приведения матрицы к хессенберговому виду и QR-итераций для хессенберговой матрицы.

1 Общее описание алгоритма

Суть базового QR-алгоритма заключается в итерационном приведении матрицы A к некоторой унитарно подобной ей матрице A_N при помощи QR-разложения. Матрица A_N является правой верхней треугольной (или блочно треугольной) матрицей, а значит ее диагональ содержит собственные значения (в блочном случае собственные значения матрицы являются собственными значениями диагональных блоков). В силу подобия матриц A и A_N их наборы собственных значений совпадают. Таким образом, задача поиска собственных значений матрицы A сводится к задаче выведения матрицы A_N и поиска собственных значений для нее.

2 Математическое описание

Известно[2], что произвольная квадратная матрица может быть представлена в виде произведения унитарной (в вещественном случае ортогональной) и верхней треугольной матриц. Такое разложение называется QR-разложением.

Пусть A_0 = A — исходная матрица. Для k = 0, 1, 2, \ldots выполняется QR-разложение:

  • A_{k} = Q_kR_k, где Q_k — унитарная (ортогональная) матрица, R_k — верхняя треугольная матрица, и затем найденные матрицы перемножаются в обратном порядке:
  • A_{k+1} = R_kQ_k.

Поскольку A_{k+1} = R_kQ_k = Q_k^{*}A_{k}Q_k, то матрицы A_{k+1} и A_k унитарно подобны для любого k. Поэтому матрицы A_1, A_2, \ldots унитарно подобны исходной матрице A и имеют те же собственные значения.

Существуют доказательства[2] сходимости получающихся матриц к клеточной правой треугольной матрице с диагональными клетками, размеры которых зависят от размеров канонических ящиков Жордана исходной матрицы. Таким образом, проблема собственных значений матрицы сводится к проблемам собственных значений матриц меньшего размера.

2.1 Приёмы ускорения сходимости, используемые в алгоритме

Применение приёмов ускорения является существенной частью рассматриваемого здесь алгоритма. Приёмы делятся на две группы - приёмы ускорения одной итерации алгоритма и приёмы ускорения сходимости итерационного процесса, то есть уменьшения числа итераций.

2.1.1 Использование хессенберговой формы матрицы

Хессенбергова (почти треугольная) форма матрицы интересна в приложении к QR-алгоритму тем, что в случае, если A_0 = A имеет эту форму, то имеют её и все матрицы A_k. Если теперь посмотреть на методы QR-разложения плотных неособенных матриц, то видно, что выполнение разложения A_k = Q_kR_k в случае плотной неособенной A_kтребует (в последовательном варианте) O(n^3) операций, как и последующий процесс вычисления A_{k+1} = R_kQ_k. В случае же, если матрицы хессенберговы, то как QR-разложения плотных хессенберговых матриц, так и вычисления A_{k+1} = R_kQ_k потребуют уже по O(n^2) операций. Это позволяет экономить довольно большие вычислительные ресурсы.

Кроме этого, известно, что в случае, если хессенбергова матрица содержит на нижней кодиагонали только ненулевые элементы, то все кратные собственные значения будут соответствовать одному ящику Жордана[2]. Это означает, что каждое собственное значение с геометрической кратностью выше 1 даст после точного приведения матрицы к хессенбергову виду нули на нижней кодиагонали, что сразу даёт возможность параллельно работать с несколькими диагональными блоками.

Поэтому начальное унитарно подобное приведение матрицы к хессенбергову виду является органически необходимой частью алгоритма[1], несмотря на то, что оно выделено в пакете SCALAPACK в отдельную подпрограмму.

2.1.2 Сдвиги QR-алгоритма

QR-алгоритм со сдвигами позволяет сократить количество итераций, необходимых для сходимости[3]. Пусть у нас есть матрица A_k, тогда процесс перехода к матрице A_{k+1} выглядит следующим образом:

  • На каждом шаге подбирается число \nu_k и ищется следующее QR-разложение: A_k-\nu_kE=Q_kR_k.
  • Вычисляется матрица A_{k+1}: A_{k+1} = R_kQ_k+\nu_kE.

При этом сохраняется свойство подобия матриц A_k и A_{k+1}:

A_{k+1} = R_kQ_k+\nu_kE=Q_{k}^{T}Q_kR_kQ_k+\nu_kE=Q_{k}^{T}(A_k-\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-Q_{k}^{T}(\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-\nu_kE+\nu_kE=Q_{k}^{T}A_kQ_k.

Подбор параметра \nu_k в пакете SCALAPACK осуществляется в зависимости от элементов матрицы A_k. При алгоритме подбора параметров, известном, как правило Фрэнсиса[4], в качестве сдвигов выбираются для каждого из диагональных блоков собственные значения их нижних правых клеток размером 2х2, и среднее количество итераций для большинства матриц получается порядка 2 на одно собственное значение. Существуют, однако, матрицы, для которых правило Фрэнсиса не даёт сходимости, поэтому если по истечении 10 итераций с обычными сдвигами не получилось сходимости, применяют так называемые "особые сдвиги".

2.1.2.1 Особенности вещественного варианта QR-алгоритма

Если вещественная матрица A имеет различные вещественные собственные значения, то QR-алгоритм сходится к матрице с верхней треугольной формой, на диагонали которой находятся собственные значения. Однако вещественная матрица может иметь комплексные собственные значения, и тогда алгоритм будет сходиться не к верхней треугольной матрице, а к блочной верхней треугольной матрице, которая на диагонали содержит блоки 1-го и 2-го порядка. Блоки 1-го порядка будут содержать различные вещественные собственные значения, блоки 2-го порядка соответствуют парам комплексных сопряженных собственных значений[4][5].

A_N= \begin{bmatrix} \blacksquare& \bullet& \bullet& \cdots& \cdots& \cdots& \cdots& \cdots& \bullet\\ 0& \blacksquare& \blacksquare& \bullet& \ddots& \ddots& \ddots& \ddots& \vdots\\ 0& \blacksquare& \blacksquare& \bullet& \bullet& \ddots& \ddots& \ddots& \vdots\\ \vdots& 0& 0& \blacksquare& \bullet& \bullet& \ddots& \ddots& \vdots\\ \vdots& \ddots& 0& 0& \blacksquare& \bullet& \bullet& \ddots& \vdots\\ \vdots& \ddots& \ddots& 0& 0& \blacksquare& \blacksquare& \ddots& \vdots\\ \vdots& \ddots& \ddots& \ddots& 0& \blacksquare& \blacksquare& \ddots& \bullet\\ \vdots& \ddots& \ddots& \ddots& \ddots& \ddots& \ddots& \ddots& \bullet\\ 0& \cdots& \cdots& \cdots& \cdots& \cdots& 0& 0& \blacksquare \end{bmatrix}.

Поэтому выбор сдвигов в алгоритме учитывает, что конечные матрицы будут представленного вида. Чтобы не выполнять итерации в комплексной арифметике, выполняют т.н. неявный двойной сдвиг, давно описанный в литературе[2][4].

2.1.3 Обнуление поддиагональных элементов

После того, как под диагональю какой-либо элемент становится менее порогового значения, его можно считать равным нулю. Это даёт возможность применить разделение диагональных блоков матрицы, соседствующих с ним, и раздельное вычисление их собственных чисел.

  1. Перейти обратно: 1,0 1,1 http://www.netlib.org/scalapack/slug/node63.html#SECTION04335100000000000000
  2. Перейти обратно: 2,0 2,1 2,2 2,3 Воеводин В.В. Вычислительные основы линейной алгебры. М.: Наука, 1977.
  3. Бахвалов Н.С., Жидков Н.П., Кобельков. Г.М. "Численные методы"— 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.
  4. Перейти обратно: 4,0 4,1 4,2 Деммель Д. Вычислительная линейная алгебра. – 2001. - С.261-264.
  5. R. Granat, Bo Kagstrom, D. Kressner "LAPACK Working Note #216: A novel parallel QR algorithm for hybrid distributed memory HPC systems".