Участник: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:0%>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>.
+
*Заключительное нахождение собственных значений и собственных векторов трёхдиагональной матрицы <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 Общее описание алгоритма

Данный алгоритм появился в 1950 г. и носит имя венгерского физика и математика Корнелия Ланцоша (венг. Lánczos Kornél). Алгоритм Ланцоша относится к итерационным методам вычисления собственных значений для матриц столь больших порядков , что к ним нельзя применить прямые методы из-за ограничений по времени и памяти.

Сам Ланцош указывал, что его метод предназначен для отыскания нескольких собственных векторов симметричных матриц, хотя к методу сразу было обращено внимание, как к способу приведения всей матрицы к трёхдиагональному виду. Двадцатью годами позже канадский математик Крис Пэж показал, что, несмотря на чувствительность к округлениям, алгоритм Ланцоша - эффективное средство вычисления некоторых собственных чисел и соответствующих им собственных векторов [1, c.276].

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

В данной статье рассматривается вариант алгоритма Ланцоша, в котором опущено влияние ошибок округления на вычислительный процесс, хотя на практике этому посвящается отдельное внимание и существуют различные методы решения данной проблемы, такие как частичная или полная переортогонализация. Этим модифицированным методам посвящены отдельные статьи на данном ресурсе.

1.2 Математическое описание алгоритма

Для лучшего понимания описания, данного в этом пункте статьи, рекомендуется ознакомиться с параграфом 6.6 Методы Крыловского подпространства [2, с.313]. Здесь же дано краткое описание всех переменных, математических операций и необходимый теоретический минимум.

Алгоритм Ланцоша для вычисления собственных значений и собственных векторов вещественной симметричной матрицы в точной арифметике [2, с.381]:


В продемонстрированном выше алгоритме - заданный вещественный вектор. Также полагается известным алгоритм вычисления произведения матрицы на вектор . Введём матрицу Крылова, определяемую следующим соотношением: .

Далее, на практике, матрица заменяется матрицей , такой, что при любом числе линейные оболочки первых столбцов в и являются одним и тем же подпространством [2, c.315]. Тогда матрица , в отличие от матрицы , хорошо обусловлена и легко обратима. В результате получаем матрицу размерности , столбцы которой ортогональны, являются базисом подпространства Крылова и называются векторами Ланцоша.

В алгоритме Ланцоша вычислению подлежит столько первых столбцов в матрице , сколько необходимо для получения требуемого приближения к решению .

Получение нулевого в итерационном процессе - событие, желательное в том смысле, что оно свидетельствует о том, что найдено некоторое подпространство, являющееся в точности инвариантным. На практике же нулевое и близкие к нулю значения получаются редко [3, стр. 429].

Затем на каждом шаге цикла формируется симметричная трёхдиагональная матрица , к которой применяется процесс Рэлея-Ритца для поиска её собственных значений (на практике для поиска этих собственных значений можно использовать любой из специальных методов, изложенных в [3, § 8.4]). Эти собственные значения, они же числа Ритца, и полагаются приближёнными собственными значениями исходной матрицы .

1.3 Вычислительное ядро алгоритма

Вычислительное ядро рассматриваемого алгоритма (наиболее ресурсно-затратная часть алгоритма) - формирование на каждом шаге цикла промежуточного вектора , вычисляемого по формуле:

1.4 Макроструктура алгоритма

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

В первой части алгоритма, где итерационно строятся Крыловское подпространство и трёхдиагональная матрица , можно выделить следующие макрооперации:

  • умножение матрицы на вектор (в свою очередь представляет собой умножение вектора на число и сложение векторов);
  • вычисление нормы (скалярное произведение векторов + вычисление квадратного корня);
  • скалярное произведение векторов;
  • сложение векторов и их умножение на вещественные числа

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

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

1.5 Схема реализации последовательного алгоритма

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

В качестве входных данных имеем: вещественная симметричная матрица размера , известный вещественный вектор длины и число .

Далее:

  • Инициализируем вещественную константу и векторы и
  • Итерационно для всех :
    • Вычисляем вспомогательный вектор , используя умножение матрицы на вектор
    • Вычисляем, используя скалярное произведение векторов, значение - элемент на главной диагонали трёхдиагональной матрицы
    • Вычисляем по формуле новое значение и перезаписываем вектор
    • Вычисляем значение - элементы непосредственно над и под главной диагональю той же матрицы
    • Вычисляем с вектора очередной столбец матрицы , он же вектор Ланцоша :
    • Теперь, когда матрица сформирована на очередном шаге, находим её собственные значения и вектора, например с помощью процедуры Рэлея-Ритца (о используемых на практике методах нахождения подробнее было сказано ранее в математическом описании алгоритма)
    • Переходим на следующую итерацию: ++

1.6 Последовательная сложность алгоритма

Оценим количество операций и сложность последовательного алгоритма, изложенного в предыдущем пункте.

  • Для вычисления вектора умножается матрица размера на вектор длины , и потребуется операций умножения и операций сложения.
  • Умножение векторов и длины потребует операций умножения и операций сложения.
  • При вычислении нового значения вектора поэлементное сложение двух векторов длины требует операций сложения.
  • Умножение вектора длины на вещественное число требует операций умножения.
  • Нахождение квадратичной нормы вектора длины требует умножений и сложений и ещё 1 операцию извлечения квадратного корня.
  • Заключительное нахождение собственных значений и собственных векторов трёхдиагональной матрицы размера с помощью QR-алгоритма потребует в худшем случае операций[1].

Посчитаем теперь суммарное количество простейших операций на одной итерации алгоритма (без учёта записей в память):

  • операций умножения/деления
  • операций сложения/вычитания
  • 1 операция извлечения квадратного корня

Отдельно после всех итераций при  :

  • операций для поиска собственных значений и собственных векторов трёхдиагональной матрицы

Итого можно утверждать следующее:

Последовательная сложность одной итерации рассматриваемого алгоритма:
Суммарная сложность алгоритма ( итераций): [2]

На практике же обычно рассматривается число , поэтому второе слагаемое можно опустить.

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

[4] https://ru.wikipedia.org/wiki/Алгоритм_вычисления_собственных_значений#.D0.9C.D0.B0.D1.82.D1.80.D0.B8.D1.86.D1.8B_.D0.A5.D0.B5.D1.81.D1.81.D0.B5.D0.BD.D0.B1.D0.B5.D1.80.D0.B3.D0.B0_.D0.B8_.D1.82.D1.80.D1.91.D1.85.D0.B4.D0.B8.D0.B3.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.BC.D0.B0.D1.82.D1.80.D0.B8.D1.86.D1.8B

[5] http://num-anal.srcc.msu.ru/lib_na/int_ae/int_ae6.htm

  1. http://num-anal.srcc.msu.ru/lib_na/int_ae/int_ae6.htm (пункт 6.2)
  2. Здесь мы полагаем, что мы не вычисляем собственные значения и векторы матрицы на каждом промежуточном шаге, а лишь единожды затрачиваем действий в конце для нахождения собственных значений и векторов матрицы