Участник:Смирнова Александра/Нахождение собственных чисел квадратной матрицы методом QR разложения (3)
![]() | Эта работа ждет рассмотрения преподавателем Дата последней правки страницы: 25.10.2016 Авторы этой статьи считают, что задание выполнено. |
Нахождение собственных чисел квадратной матрицы методом QR разложения | |
Последовательный алгоритм | |
Последовательная сложность | ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Объём входных данных | ![]() ![]() |
Объём выходных данных | ![]() |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | ![]() ![]() ![]() ![]() ![]() ![]() |
Ширина ярусно-параллельной формы | ![]() ![]() ![]() ![]() ![]() |
Основные авторы описания: Смирнова А.С., Киямова А.
Задача нахождения собственных значений и собственных векторов для матрицы
Данная задача является одной из важнейших задач линейной алгебры. Собственные вектора и собственные значения применяются в различных областях науки: в аналитической геометрии, при решении систем интегральных уравнений, в математической физике. Однако не существует простых алгоритмов прямого вычисления собственных значений для матриц в общем случае, поэтому данная задача на практике решается численными методами. Одним из таких методов является QR-алгоритм.
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
QR-алгоритм — это численный метод в линейной алгебре, предназначенный для решения полной проблемы собственных значений, то есть отыскания всех собственных чисел матрицы. При этом алгоритм позволяет найти и собственные вектора матрицы. Он был разработан в конце 1950-х годов независимо В. Н. Кублановской(Россия) и Дж. Фрэнсисом(Англия). Открытию QR-алгоритма предшествовал LR-алгоритм, который использовал LU-разложение вместо QR-разложения. В настоящее время LR-алгоритм используется очень редко ввиду своей меньшей эффективности, однако он был важным шагом на пути к открытию QR-алгоритма[2].
Суть базового QR-алгоритма заключается в итерационном приведении матрицы
Однако базовый QR-алгоритм может обладать очень низкой скоростью сходимости, поэтому существует несколько способов ускорить его:
- Перед итерациями привести матрицу
к подобной ей матрице , которая будет иметь форму Хессенберга. Данный шаг позволит ускорить процесс QR-разложения. - Использовать QR-алгоритм со сдвигами.
В данной статье будет рассмотрен только базовый QR-алгоритм.
1.2 Математическое описание алгоритма
1.2.1 QR-разложение матрицы
Основой алгоритма является тот факт, что любую вещественную матрицу можно разложить на произведение двух матриц следующего вида:
, где - ортогональная матрица ( ), - верхняя треугольная матрица.
Данное разложение называется QR-разложением.
Есть несколько алгоритмов вычисления QR-разложения матрицы[3] [4]. Кратко опишем их в данной статье.
1.2.1.1 Метод Хаусхолдера (отражений) QR-разложения квадратной матрицы
- Основная статья: Метод Хаусхолдера (отражений) QR-разложения квадратной матрицы
Суть метода Хаусхолдера заключается в последовательном приведении матрицы
На
Матрица отражения имеет вид
1.2.1.2 Метод Гивенса (вращений) QR-разложения квадратной матрицы
- Основная статья: Метод Гивенса (вращений) QR-разложения квадратной матрицы
Суть метода Гивенса заключается в последовательном приведении матрицы
На каждом шаге задачей матрицы вращения является обнуление одного поддиагонального элемента. Вначале обнуляются все поддиагональные элементы 1-го столбца, затем 2-го и так далее до
Матрицы вращения
1.2.2 QR-алгоритм нахождения собственных чисел
Пусть матрица
.- Пусть имеется матрица
, тогда матрица строится следующим образом:
- Строится QR-разложение:
. - Вычисляется
.
- Строится QR-разложение:
Заметим, что
Таким образом матрицы
1.2.3 Сходимость алгоритма
Предположим, что для
- 1.
, где .
- 1.
- 2.
, где .
- 2.
- 3. Ведущая подматрица порядка
в невырождена.
- 3. Ведущая подматрица порядка
Тогда при
Таким образом, на практике необходимо выполнять итерации до тех пор пока матрица
1.2.4 Вещественный вариант QR-алгоритма
Если вещественная матрица
В дальнейшем, в данной статье, матрицы, имеющие вышеописанную форму, будут называться квазитреугольными.
1.3 Вычислительное ядро алгоритма
QR-алгоритм обладает двумя вычислительными ядрами, которые повторяются на каждой итерации:
1. Вычисление QR-разложения матрицы:
- Вычислительное ядро данного алгоритма состоит из операций скалярного произведения, необходимых для вычисления матрицы отражения, и из операций скалярного произведения, необходимых для пересчета матрицы на каждом шаге.
- Вычислительное ядро данного алгоритма состоит из численных арифметических операций, необходимых для вычисления параметров матрицы вращения, и из операций (эквивалентных перемножению комплексных чисел), необходимых для пересчета матрицы на каждом шаге.
2. Перемножение двух плотных матриц:
1.4 Макроструктура алгоритма
Как уже было описано ранее, QR-алгоритм содержит в себе две макрооперации:
1.Вычисление QR-разложения матрицы:
2.Перемножение двух плотных матриц:
1.5 Схема реализации последовательного алгоритма
Опишем необходимый для реализации цикл при помощи псевдокода:
A - исходная матрица. curA - текущая матрица, на основе которой будет вычисляться QR-разложение на каждом шаге. nextA - новая матрица, полученная после перемножения матриц R и Q. triangular - функция, проверяющая, имеет ли матрица квазитреугольную форму. difference - функция, проверяющая, что элементы двух матриц, стоящие на одинаковых местах, различаются не более чем на eps (данная функция нужна чтобы проверять не только сходимость матрицы к квазитреугольной форме, но и сходимость ее ненулевых элементов).
curA = A nextA = A while ( not (triangular(nextA) & difference(curA,nextA,eps)) ) { curA = nextA findQRdecomposition(curA,Q,R) nextA = R*Q }
1.6 Последовательная сложность алгоритма
Подсчитаем сложность одной итерации QR-алгоритма (расчет сложностей для QR-разложения и перемножения матриц представлен в статьях, посвященных данным алгоритмам).
- QR-разложение матрицы.
- Метод Хаусхолдера (отражений) имеет сложность
. - Метод Гивенса (вращений) имеет сложность
.
- Метод Хаусхолдера (отражений) имеет сложность
- Перемножение двух плотных матриц имеет сложность
. - Проверка матрицы на квазитреугольную форму состоит из набора сравнений элементов с номерами
( ) с нулем (таких элементов ). Поддиагональные элементы с номерами ( ) должны быть проверены на соответствие необходимой квазитреугольной форме. Для этого достаточно для каждого такого элемента проверить следующее условие: (либо поддиагональный элемент равен 0, либо, в противном случае, соседние поддиагональные элементы равны 0, чтобы текущий элемент соответствовал блоку 2-го порядка). Таких проверок поддиагональных элементов будет . После данных проверок следует набор логических операций "И" между результатами всех сравнений (таких операций будет ). - Сравнение новой матрицы с предыдущей состоит из операций вычитания и сравнения для каждой пары ненулевых соответствующих элементов (такие пары имеют номера элементов
( ), количество таких пар равно ), а также из набора логических операций "И" между результатами сравнений (таких операций будет ).
Итого, в сумме получаем
1.7 Информационный граф
На рисунке 1 изображен информационный граф QR-алгоритма. Вершины данного графа обозначают следующее:
- QR - операция QR-разложения матрицы.
- *M - операция перемножения матриц.
- Triang - операция проверки матрицы на квазитреугольную форму.
- Dif - операция проверки различия элементов двух матриц не более чем на некоторое заданное число.
Подробные графы операций QR-разложения (Метод Хаусхолдера (отражений), Метод Гивенса (вращений)) и перемножения матриц можно найти в статьях, посвященных этим алгоритмам. Далее рассмотрим информационные графы операций Triang (рис.2) и Dif (рис.3) на примере матрицы размера
Вершины V соответствуют операции сравнения с 0. Вершины F соответствуют проверке поддиагональных элементов на соответствие квазитреугольной форме, которая была описана в предыдущем разделе. Вершины & соответствуют логической операции "И".
Вершины -V соответствуют операции вычитания и сравнения с 0. Вершины & соответствуют логической операции "И".
1.8 Ресурс параллелизма алгоритма
На макроуровне (который можно увидеть на информационном графе QR-алгоритма) алгоритм не обладает ресурсами параллелизма. Все макрооперации внутри итерации, а также сами итерации выполняются последовательно (за исключением операций Triag и Dif, которые могут выполняться параллельно). Основной ресурс параллелизма заложен отдельно в каждой из макроопераций. На каждой итерации алгоритм имеет следующие параллельные характеристики:
- QR-разложение матрицы (описание ресурсов параллелизма для алгоритмов QR-разложения можно найти в статьях, посвященных этим алгоритмам).
- Метод Хаусхолдера (отражений) имеет высоту ярусно-параллельной формы
и ширину ярусно-параллельной формы . - Метод Гивенса (вращений) имеет высоту ярусно-параллельной формы
и ширину ярусно-параллельной формы .
- Метод Хаусхолдера (отражений) имеет высоту ярусно-параллельной формы
- Перемножение двух плотных матриц имеет высоту ярусно-параллельной формы
и ширину ярусно-параллельной формы . - Проверка матрицы на выходе из итерации.
- Проверка матрицы на квазитреугольную форму состоит из одного яруса сравнений для каждого элемента и последующих ярусов, вычисляющих итоговый результат при помощи логической операции "И". Для вычисления итогового результата можно использовать метод сдваивания, который дает высоту ярусно-параллельной формы порядка логарифма от количества элементов, над которыми совершается операция. Таким образов высота ярусно-параллельной формы будет равна
. Ширина ярусно-параллельной формы достигается на ярусе сравнений для каждого элемента и равна . - Сравнение новой матрицы с предыдущей состоит из одного яруса сравнений для каждого элемента и последующих ярусов, вычисляющих итоговый результат при помощи логической операции "И". Высота ярусно-параллельной формы будет равна
. Ширина ярусно-параллельной формы достигается на ярусе сравнений для каждого элемента и равна .
- Проверка матрицы на квазитреугольную форму состоит из одного яруса сравнений для каждого элемента и последующих ярусов, вычисляющих итоговый результат при помощи логической операции "И". Для вычисления итогового результата можно использовать метод сдваивания, который дает высоту ярусно-параллельной формы порядка логарифма от количества элементов, над которыми совершается операция. Таким образов высота ярусно-параллельной формы будет равна
Таким образом, основной вклад в высоту ярусно-параллельной формы одной итерации вносит операция QR-разложения матрицы и она будет равна
1.9 Входные и выходные данные алгоритма
Входные данные:
- квадратная вещественная плотная матрица
:Undefined control sequence \R .
- квадратная вещественная плотная матрица
Объем входных данных:
(необходимо хранить все элементы матрицы).
Выходные данные:
- собственные значения матрицы
.
- собственные значения матрицы
Объем выходных данных:
(квадратная матрица размера имеет ровно собственных значений при этом некоторые из них могут быть комплексными).
1.10 Свойства алгоритма
- Cоотношение последовательной и параллельной сложности алгоритма квадратично, что дает довольно большой выигрыш.
- Вычислительная мощность, которая показывает, сколько операций приходится на единицу переданных данных, равна
, а значит перемещение данных для их обработки не будет составлять большой проблемы. - Алгоритм является недетерминированным, т.к. заранее неизвестно сколько итераций необходимо совершить до момента сходимости.
- Скорость сходимости алгоритма зависит от собственных значений. Чем ближе по модулю соседние собственные значения, тем меньше скорость сходимости. Этот недостаток призван решить QR-алгоритм со сдвигами.
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
2.7.1 Последовательные реализации
- LAPACK (Linear Algebra PACKage) — библиотека с открытым исходным кодом, содержащая методы для решения основных задач линейной алгебры. Написана на языке Fortran с использованием библиотеки BLAS и является развитием пакета LINPACK. Находится в открытом доступе в соответствии с модифицированной лицензией BSD, в том числе и для коммерческого использования.
- ALGLIB - это кросс-платформенная библиотека численного анализа, поддерживающая несколько языков программирования (C++, C#, Pascal, VBA) и несколько операционных систем (Windows, Linux, Solaris). ALGLIB является свободным программным обеспечением, которое использует двойное лицензирование: оно может быть использовано в соответствии с лицензией GPL (версии 2+), а для использования в коммерческих целях необходимо купить отдельную лицензию.
- Полный алгоритм нахождения собственных значений: подпрограмма RMatrixEVD.
- QR-разложение: подпрограмма rmatrixqr реализует QR-разложение для вещественных матриц, cmatrixqr – для комплексных матриц.
- Перемножение матриц: для перемножения матриц ALGLIB использует соответствующую реализацию библиотеки BLAS.
- Eigen – библиотека шаблонов для линейной алгебры, написанная на языке C++. Eigen – свободно распространяемое программное обеспечение. Начиная с версии 3.1.1, оно лицензируется MPL2, на ранние версии распространяется действие лицензии LGPL3+.
- Полный алгоритм нахождения собственных значений: модуль Eigenvalues module.
- QR-разложение: модуль QR module.
- Перемножение матриц: операторы * и *=.
2.7.2 Параллельные реализации
- ScaLAPACK (Scalable Linear Algebra PACKage) — библиотека с открытым исходным кодом, включающая в себя подмножество процедур LAPACK, переработанных для использования на MPP-компьютерах. ScaLAPACK разработана с использованием PBLAS и BLACS, и предназначена для вычислений на любом компьютере или кластере поддерживающим MPI или PVM. Библиотека в настоящее время написана на языке Fortran. Находится в открытом доступе в соответствии с модифицированной лицензией BSD, в том числе и для коммерческого использования.
- PLAPACK (Parallel Linear Algebra Package) — пакет функций LAPACK для параллельного решения задач линейной алгебры. Пакет функций PLAPACK является альтернативой библиотеке ScaLAPACK. Для осуществления межпроцессорных коммуникаций в PLAPACK использован интерфейс передачи сообщений MPI. При передаче сообщений в PLAPACK в основном используются коллективные операции, такие, как обобщенная передача данных от одного процесса всем процессам (MPI_Scatter), обобщенная передача данных от всех процессов одному процессу (MPI_Gather), широковещательная рассылка (MPI_Bcast) и другие. PLAPACK включает интерфейсы для языков Fortran и С.
3 Литература
- ↑ Ильин В.А., Ким Г.Д. "Линейная алгебра и аналитическая геометрия".
- ↑ Wikipedia: QR-algorithm
- ↑ Метод Хаусхолдера (отражений) QR-разложения квадратной матрицы
- ↑ Метод Гивенса (вращений) QR-разложения квадратной матрицы
- ↑ Тыртышников Е.Е. "Методы численного анализа" — М., Академия, 2007. - 320 c.
- ↑ R. Granat, Bo Kagstrom, D. Kressner "LAPACK Working Note #216: A novel parallel QR algorithm for hybrid distributed memory HPC systems".