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

Алгоритм Ланцоша для точной арифметики (без переортогонализации)

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


Алгоритм Ланцоша без переортогонализации
Последовательный алгоритм
Последовательная сложность O(kn^2)
Объём входных данных \frac{n(n + 1)}{2}
Объём выходных данных k(n + 1)
Параллельный алгоритм
Высота ярусно-параллельной формы O(k)
Ширина ярусно-параллельной формы O(n^2)


Основные авторы описания: А.Ю.Заспа, (раздел 2.2)

1 Свойства и структура алгоритма

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

Алгоритм Ланцоша был опубликовн физиком и математиком Корнелием Ланцощем в 1950 году. Этот метод является частным случаем алгоритма Арнольда в случае, если исходная матрица A - симметрична, и был представлен как итерационный метод вычисления собственных значений симметричной матрицы. Этот метод позволяет за k итераций вычислять k приближений собственных значений и собственных векторов исходной матрицы. Хотя алгоритм и был эффективным в вычислительном смысле, но он на некоторое время был предан забвению из-за численной неустойчивости. Только в 1970 Ojalvo и Newman модифицировали алгоритм для использования в арифметике с плавающей точкой. Новый метод получил название алгоритма Ланцоша с полной переортогонализацией. Но эта статья про его исходную версию. На вход алгоритма подается вещественная симметричная матрица A = A^{T},

A = \begin{pmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1\ n-1} & a_{1\ n} \\ a_{12} & a_{22} & a_{23} & \cdots & a_{2\ n-1} & a_{2\ n} \\ a_{13} & a_{23} & a_{33} & \cdots & a_{3\ n-1} & a_{3\ n} \\ \vdots & \vdots & \ddots & \ddots & \ddots & \vdots \\ a_{1\ n-1} & \cdots & \cdots & a_{n-2\ n-1} & a_{n-1\ n-1} & a_{n-1\ n} \\ a_{1\ n} & \cdots & \cdots & a_{n-2\ n} & a_{n-1\ n} & a_{n\ n} \\ \end{pmatrix}

Поэтому достаточно хранить только чуть больше половины элементов исходной матрицы.

Сам алгоритм соединяет в себя метод Ланцоша построения крыловского подпространства с процедурой Релея-Ритца. На каждой итерации строится матрица Q_k = [q_1, q_2, \dots, q_k] размерности n \times k, состоящая из ортонормированных векторов Ланцоша. А в качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы T_k = Q^T_k A Q размерности k \times k.

T_k = \begin{pmatrix} \alpha_1 & \beta_1 \\ \beta_1 & \alpha_2 & \beta_2 \\ & \beta_2 & \ddots & \ddots \\ & & \ddots & \ddots & \beta_{k-1} \\ & & & \beta_{k-1} & \alpha_k \end{pmatrix}

Нахождение собственных значений и собственных векторов такой матрицы значительно проще чем их вычисление для исходной матрицы. Например, они могут быть вычислены с помощью метода «разделяй и властвуй» вычисления собственных значений и векторов симметричной трехдиагональной матрицы. В этом методе эта процедура занимает O(k^3) операций, где константа оказывается на практике довольно мала.

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

Исходные данные: симметрическая матрица A, начальный вектор b.

Вычисляемые данные: собственные вектора матрицы T_k являющиеся столбцами матрицы Q_k V, и матрица собственных значений \Lambda, где V, \Lambda из спектрального разложения T_k = V\Lambda V^T.

Алгоритм на псевдокоде:

\begin{align} q_1 = & \frac{b}{\|b\|_2},\; \beta_0 = 0,\; q_0 = 0\\ for \; & i = 1 \; to \; k \\ & z = Aq_i\\ & \alpha_i = q^T_i z\\ & z = z - \alpha_i q_i - \beta_{i-1}q_{i-1}\\ & \beta_i = \|z\|_2\\ & if \; \beta_i == 0 \; then \; break\\ & q_{i+1} = \frac{z}{\beta_i}\\ end \; & for \end{align}

Затем вычислить собственные значения и собственные вектора матрицы T_k

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

Вычислительным ядром на каждой итерации является вычисление произведения матрицы на вектор:

z = Aq_i

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

Макрооперациями алгоритма являются: умножение матрицы на вектор, скалярное произведение векторов, умножение вектора на число, вычисление собственных векторов и собственных значений трехдиагональной симметричной матрицы.

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

Последовательность исполнения метода следующая:

\begin{align} 1. \, \beta_0 = & 0,\; q_0 = 0,\\ \|b\|_2 = &\sqrt{\sum\limits_{j=1}^{n} b_j^2},\\ 2. \, q_{1_{j}} = &\frac{b_{j}}{\|b\|_2}, \; j = 1,\, \dots \,, n\\ for \; i = & 1 \; to \; k \\ 3. \, z_j & = \sum\limits_{m=1}^{n} a_{jm} q_{i_m}, \; j = 1,\, \dots \,, n\\ 4. \, \alpha_i & = \sum\limits_{j=1}^{n}q_j z_j\\ 5. \, z_j & = z_j - \alpha_i q_{i_j} - \beta_{i-1}q_{i-1_j}, \, j = 1,\, \dots \,, n\\ 6. \, \beta_i & = \|z\|_2 = \sqrt{\sum\limits_{j=1}^{n} z_m^2}\\ if \; \beta_i & == 0 \; then \; break\\ 7. \, q_{i+1_j} & = \frac{z_j}{\beta_i}, \; j = 1,\, \dots \,, n\\ end \; & for \end{align}

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

Для вычисления k собственных значений матрицы порядка n и соответствующих им собственных векторов алгоритмом Ланцоша без переортогонализации в худшем случае требуется:

  • kn^2 + 4 kn + n умножений,
  • k + 1 вычислений квадратного корня,
  • n(k + 1) делений,
  • n + k(n^2+3n-1) сложений (вычитаний),
  • нахождение собственных значений и векторов трехдиагональной симметричной матрицы размера k \times k .

Умножения и сложения (вычитания) составляют основную часть алгоритма.

Для нахождение собственных значений и векторов трехдиагональной симметричной матрицы эффективней всего использовать метод «разделяй и властвуй» вычисления собственных значений и векторов симметричной трехдиагональной матрицы, который требует O(k^3) операций. При классификации по последовательной сложности, таким образом, метод Ланцоша без переортогонализации относится к алгоритмам с квадратичной сложностью.

1.7 Информационный граф

TBD

1.8 Ресурс параллелизма алгоритма

TBD

1.9 Входные и выходные данные алгоритма

TBD

1.10 Свойства алгоритма

TBD

2 Программная реализация

2.1 Существующие реализации