Участник:AleksLevin/Алгоритм Ланцоша вычисления собственных значений симметричной матрицы для точной арифметики (без переортогонализации)
Основные авторы описания: Левин А.Д. (студент, кафедра вычислительных методов, 604 группа)
Свойства и структура алгоритмов
Общее описание алгоритма
Данный алгоритм появился в 1950 г. и носит имя венгерского физика и математика Корнелия Ланцоша (венг. Lánczos Kornél). Алгоритм Ланцоша относится к итерационным методам вычисления собственных значений для матриц столь больших порядков [math]\displaystyle{ n }[/math], что к ним нельзя применить прямые методы из-за ограничений по времени и памяти.
Сам Ланцош указывал, что его метод предназначен для отыскания нескольких собственных векторов симметричных матриц, хотя к методу сразу было обращено внимание, как к способу приведения всей матрицы к трёхдиагональному виду. Двадцатью годами позже канадский математик Крис Пэж показал, что, несмотря на чувствительность к округлениям, алгоритм Ланцоша - эффективное средство вычисления некоторых [math]\displaystyle{ k }[/math] собственных чисел и соответствующих им собственных векторов [1, c.276].
Алгоритм Ланцоша для вычисления собственных значений симметричной матрицы [math]\displaystyle{ A }[/math] соединяет в себе метод Ланцоша для построения последовательности подпространств Крылова и ортонормированных векторов Ланцоша и процедуру Рэлея-Ритца получения оптимальных приближений собственных значений и соответствующих собственных векторов исходной матрицы [math]\displaystyle{ A }[/math] [2, с.381].
В данной статье рассматривается вариант алгоритма Ланцоша, в котором опущено влияние ошибок округления на вычислительный процесс, хотя на практике этому посвящается отдельное внимание и существуют различные методы решения данной проблемы, такие как частичная или полная переортогонализация. Этим модифицированным методам посвящены отдельные статьи на данном ресурсе.
Математическое описание алгоритма
Для лучшего понимания описания, данного в этом пункте статьи, рекомендуется ознакомиться с параграфом 6.6 Методы Крыловского подпространства [2, с.313]. Здесь же дано краткое описание всех переменных, математических операций и необходимый теоретический минимум.
Алгоритм Ланцоша для вычисления [math]\displaystyle{ k }[/math] собственных значений и собственных векторов вещественной симметричной матрицы [math]\displaystyle{ A=A^T }[/math] в точной арифметике [2, с.381] :
[math]\displaystyle{ \begin{align} q_1 = & b/ \|b\|_2,\; \beta_0 = 0,\; q_0 = 0\\ for \; & j = 1 \; to \; k \\ & z = A\,q_j\\ & \alpha_j = q^T_j z\\ & z = z - \alpha_j q_j - \beta_{j-1}q_{j-1}\\ & \beta_j = \|z\|_2\\ & If \; \beta_j == 0 \; then\; stop\; the\; algorithm \\ & \; q_{j+1} = z / \beta_j \\ & compute\; eigenvalues\; and \;eigenvectors\;of \;matrix \;\;T_j= Q^T_j A Q\;\;and\;estimate \;the\; errors\\ end \; & for \end{align} }[/math]
В продемонстрированном выше алгоритме [math]\displaystyle{ b }[/math] - заданный вещественный вектор. Также полагается известным алгоритм вычисления произведения матрицы [math]\displaystyle{ A }[/math] на вектор [math]\displaystyle{ x }[/math].
Введём матрицу Крылова, определяемую следующим соотношением: [math]\displaystyle{ K_j = [b,Ab,A^2b,...,A^{j-1}b] }[/math].
Далее, на практике, матрица [math]\displaystyle{ K }[/math] заменяется матрицей [math]\displaystyle{ Q }[/math], такой, что при любом числе [math]\displaystyle{ k }[/math] линейные оболочки первых [math]\displaystyle{ k }[/math] столбцов в [math]\displaystyle{ K }[/math] и [math]\displaystyle{ Q }[/math] являются одним и тем же подпространством [2,c.315]. Тогда матрица [math]\displaystyle{ Q }[/math], в отличие от матрицы [math]\displaystyle{ K }[/math], хорошо обусловлена и легко обратима. В результате получаем матрицу [math]\displaystyle{ Q_j = [q_1, q_2, \dots, q_j] }[/math] размерности [math]\displaystyle{ n \times j }[/math], столбцы которой ортогональны, являются базисом подпространства Крылова и называются векторами Ланцоша.
В алгоритме Ланцоша вычислению подлежит столько первых столбцов в матрице [math]\displaystyle{ Q_j }[/math], сколько необходимо для получения требуемого приближения к решению [math]\displaystyle{ A\,x\,=b\,\,(A\,x=\lambda \, x) }[/math].
Затем на каждом шаге цикла формируем симметричную трёхдиагональную матрицу [math]\displaystyle{ T_j = Q^T_j A Q }[/math], к которой применяем процесс Рэлея-Ритца для поиска её собственных значений. Эти собственные значения, они же числа Ритца, и полагаются приближёнными собственными значениями исходной матрицы [math]\displaystyle{ A }[/math].
Вычислительное ядро алгоритма
Вычислительное ядро рассматриваемого алгоритма (наиболее ресурсно-затратная часть алгоритма) - получение на каждом шаге цикла промежуточного вектора [math]\displaystyle{ z }[/math], вычисляемого по формуле: [math]\displaystyle{ z = A\,q_j }[/math]
Макроструктура алгоритма
Как уже было упомянуто в начале данной статьи, рассматриваемый алгоритм состоит из двух последовательно выполненных алгоритмов: метод Ланцоша для построения последовательности подпространств Крылова и ортонормированных векторов Ланцоша и процедуру Рэлея-Ритца получения оптимальных приближений собственных значений и соответствующих собственных векторов исходной матрицы.
Схема реализации последовательного алгоритма
Последовательная сложность алгоритма
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Свойства алгоритма
Программная реализация алгоритма
Особенности реализации последовательного алгоритма
Локальность данных и вычислений
Возможные способы и особенности параллельной реализации алгоритма
Масштабируемость алгоритма и его реализации
Динамические характеристики и эффективность реализации алгоритма
Выводы для классов архитектур
Существующие реализации алгоритма
Литература
[1] Парлетт Б. - Симметричная проблема собственных значений. Численные методы //М.: Мир. - 1983. - С. 276-294
[2] James W. Demmel - Вычислительная линейная алгебра. Теория и приложения //Мир. - 2001. С. 381-391
[3] Голуб Дж., Ван Лоун Ч. - Матричные вычисления//М.: Мир. - 1999. - С. 426-436