Участник:AleksLevin/Алгоритм Ланцоша вычисления собственных значений симметричной матрицы для точной арифметики (без переортогонализации): различия между версиями
Строка 87: | Строка 87: | ||
*Умножение вектора длины <math>n</math> на вещественное число требует <math style="vertical-align:0%>n</math> операций умножения. | *Умножение вектора длины <math>n</math> на вещественное число требует <math style="vertical-align:0%>n</math> операций умножения. | ||
*Нахождение квадратичной нормы вектора <math style="vertical-align:0%>z</math> длины <math style="vertical-align:0%>n</math> требует <math style="vertical-align:0%>n</math> умножений и <math style="vertical-align:0%>n</math> сложений и ещё 1 операцию извлечения квадратного корня. | *Нахождение квадратичной нормы вектора <math style="vertical-align:0%>z</math> длины <math style="vertical-align:0%>n</math> требует <math style="vertical-align:0%>n</math> умножений и <math style="vertical-align:0%>n</math> сложений и ещё 1 операцию извлечения квадратного корня. | ||
− | *Заключительное нахождение собственных значений и собственных векторов трёхдиагональной матрицы <math style="vertical-align:-30%>T_j</math> размера <math style="vertical-align: | + | *Заключительное нахождение собственных значений и собственных векторов трёхдиагональной матрицы <math style="vertical-align:-30%>T_j</math> размера <math style="vertical-align:-20%>j\times j</math> с помощью QR-алгоритма потребует в худшем случае <math style="vertical-align:-30%>O(j^3)</math> операций<ref>http://num-anal.srcc.msu.ru/lib_na/int_ae/int_ae6.htm (пункт 6.2)</ref>. |
Посчитаем теперь суммарное количество простейших операций на одной итерации алгоритма (без учёта записей в память): | Посчитаем теперь суммарное количество простейших операций на одной итерации алгоритма (без учёта записей в память): |
Версия 15:14, 11 ноября 2016
Основные авторы описания: Левин А.Д. (студент, кафедра вычислительных методов, 604 группа)
Содержание
- 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 Общее описание алгоритма
Данный алгоритм появился в 1950 г. и носит имя венгерского физика и математика Корнелия Ланцоша (венг. Lánczos Kornél). Алгоритм Ланцоша относится к итерационным методам вычисления собственных значений для матриц столь больших порядков
Сам Ланцош указывал, что его метод предназначен для отыскания нескольких собственных векторов симметричных матриц, хотя к методу сразу было обращено внимание, как к способу приведения всей матрицы к трёхдиагональному виду. Двадцатью годами позже канадский математик Крис Пэж показал, что, несмотря на чувствительность к округлениям, алгоритм Ланцоша - эффективное средство вычисления некоторых
Алгоритм Ланцоша для вычисления собственных значений симметричной матрицы
В данной статье рассматривается вариант алгоритма Ланцоша, в котором опущено влияние ошибок округления на вычислительный процесс, хотя на практике этому посвящается отдельное внимание и существуют различные методы решения данной проблемы, такие как частичная или полная переортогонализация. Этим модифицированным методам посвящены отдельные статьи на данном ресурсе.
1.2 Математическое описание алгоритма
Для лучшего понимания описания, данного в этом пункте статьи, рекомендуется ознакомиться с параграфом 6.6 Методы Крыловского подпространства [2, с.313]. Здесь же дано краткое описание всех переменных, математических операций и необходимый теоретический минимум.
Алгоритм Ланцоша для вычисления
В продемонстрированном выше алгоритме
Далее, на практике, матрица
В алгоритме Ланцоша вычислению подлежит столько первых столбцов в матрице
Получение нулевого
Затем на каждом шаге цикла формируется симметричная трёхдиагональная матрица
1.3 Вычислительное ядро алгоритма
Вычислительное ядро рассматриваемого алгоритма (наиболее ресурсно-затратная часть алгоритма) - формирование на каждом шаге цикла промежуточного вектора
1.4 Макроструктура алгоритма
Как уже было упомянуто в данной статье в описании алгоритма, рассматриваемый алгоритм состоит из двух последовательно выполненных алгоритмов: метод Ланцоша для построения последовательности подпространств Крылова и ортонормированных векторов Ланцоша и процедура Рэлея-Ритца получения оптимальных приближений собственных значений и соответствующих собственных векторов исходной матрицы.
В первой части алгоритма, где итерационно строятся Крыловское подпространство и трёхдиагональная матрица
- умножение матрицы на вектор (в свою очередь представляет собой умножение вектора на число и сложение векторов);
- вычисление нормы (скалярное произведение векторов + вычисление квадратного корня);
- скалярное произведение векторов;
- сложение векторов и их умножение на вещественные числа
Умножение матрицы на вектор - весьма дешевая и нетривиальная операция, если предполагать, что исходная матрица
Вторая часть алгоритма - поиск собственных значений матрицы
1.5 Схема реализации последовательного алгоритма
С целью полностью не дублировать пункт
В качестве входных данных имеем: вещественная симметричная матрица
Далее:
- Инициализируем вещественную константу
и векторы и - Итерационно для всех
:- Вычисляем вспомогательный вектор
, используя умножение матрицы на вектор - Вычисляем, используя скалярное произведение векторов, значение
- элемент на главной диагонали трёхдиагональной матрицы - Вычисляем по формуле новое значение и перезаписываем вектор
- Вычисляем значение
- элементы непосредственно над и под главной диагональю той же матрицы - Вычисляем с вектора
очередной столбец матрицы , он же вектор Ланцоша : - Теперь, когда матрица
сформирована на очередном шаге, находим её собственные значения и вектора, например с помощью процедуры Рэлея-Ритца (о используемых на практике методах нахождения подробнее было сказано ранее в математическом описании алгоритма) - Переходим на следующую итерацию:
++
- Вычисляем вспомогательный вектор
1.6 Последовательная сложность алгоритма
Оценим количество операций и сложность последовательного алгоритма, изложенного в предыдущем пункте.
- Для вычисления вектора
умножается матрица размера на вектор длины , и потребуется операций умножения и операций сложения. - Умножение векторов
и длины потребует операций умножения и операций сложения. - При вычислении нового значения вектора
поэлементное сложение двух векторов длины требует операций сложения. - Умножение вектора длины
на вещественное число требует операций умножения. - Нахождение квадратичной нормы вектора
длины требует умножений и сложений и ещё 1 операцию извлечения квадратного корня. - Заключительное нахождение собственных значений и собственных векторов трёхдиагональной матрицы
размера с помощью QR-алгоритма потребует в худшем случае операций[1].
Посчитаем теперь суммарное количество простейших операций на одной итерации алгоритма (без учёта записей в память):
операций умножения/деления операций сложения/вычитания- 1 операция извлечения квадратного корня
Отдельно после всех итераций при
операций для поиска собственных значений и собственных векторов трёхдиагональной матрицы
Итого можно утверждать следующее:
Последовательная сложность одной итерации рассматриваемого алгоритма:
Суммарная сложность алгоритма (
На практике же обычно рассматривается число
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] Парлетт Б. - Симметричная проблема собственных значений. Численные методы //М.: Мир. - 1983. - С. 276-294
[2] James W. Demmel - Вычислительная линейная алгебра. Теория и приложения //Мир. - 2001. С. 381-391
[3] Голуб Дж., Ван Лоун Ч. - Матричные вычисления//М.: Мир. - 1999. - С. 426-436
[5] http://num-anal.srcc.msu.ru/lib_na/int_ae/int_ae6.htm
- ↑ http://num-anal.srcc.msu.ru/lib_na/int_ae/int_ae6.htm (пункт 6.2)
- ↑ Здесь мы полагаем, что мы не вычисляем собственные значения и векторы матрицы
на каждом промежуточном шаге, а лишь единожды затрачиваем действий в конце для нахождения собственных значений и векторов матрицы