В числовой линейной алгебре итерация Арнольди является алгоритмом собственных значений и важным примером итерационного метода . Арнольди находит приближение к собственным значениям и собственным векторам общих (возможно, неэрмитовых ) матриц , строя ортонормированный базис подпространства Крылова , что делает его особенно полезным при работе с большими разреженными матрицами .
Метод Арнольди относится к классу алгоритмов линейной алгебры, которые дают частичный результат после небольшого числа итераций, в отличие от так называемых прямых методов , которые должны быть завершены, чтобы дать какие-либо полезные результаты (см., например, преобразование Хаусхолдера ). Частичным результатом в этом случае являются первые несколько векторов базиса, который строит алгоритм.
Применительно к эрмитовым матрицам он сводится к алгоритму Ланцоша . Итерация Арнольди была изобретена У. Э. Арнольди в 1951 году. [1]
Интуитивным методом нахождения наибольшего (по абсолютной величине) собственного значения заданной матрицы размера m × m является степенная итерация : начиная с произвольного начального вектора b , вычисляем Ab , A 2 b , A 3 b , ..., нормализуя результат после каждого применения матрицы A.
Эта последовательность сходится к собственному вектору, соответствующему собственному значению с наибольшим абсолютным значением, . Однако много потенциально полезных вычислений тратится впустую, если использовать только конечный результат, . Это говорит о том, что вместо этого мы формируем так называемую матрицу Крылова :
Столбцы этой матрицы в общем случае не ортогональны , но мы можем извлечь ортогональный базис , с помощью такого метода, как ортогонализация Грама–Шмидта . Таким образом, полученный набор векторов является ортогональным базисом подпространства Крылова , . Мы можем ожидать, что векторы этого базиса будут охватывать хорошие приближения собственных векторов, соответствующих наибольшим собственным значениям, по той же причине, по которой приближается доминирующий собственный вектор.
Итерация Арнольди использует модифицированный процесс Грама–Шмидта для создания последовательности ортонормированных векторов q 1 , q 2 , q 3 , ..., называемых векторами Арнольди , таких, что для каждого n векторы q 1 , ..., q n охватывают подпространство Крылова . Явно алгоритм выглядит следующим образом:
Начнем с произвольного вектора q 1 с нормой 1. Повторим для k = 2, 3, ... q k := A q k −1 для j от 1 до k − 1 h j , k −1 := q j * q k q k := q k − h j , k −1 q j h k , k −1 := ‖ q k ‖ q k := q k / h k , k −1
j - контур проецирует компоненту в направлениях . Это обеспечивает ортогональность всех сгенерированных векторов.
Алгоритм ломается, когда q k является нулевым вектором. Это происходит, когда минимальный многочлен A имеет степень k . В большинстве приложений итерации Арнольди, включая алгоритм собственных значений ниже и GMRES , алгоритм сходится в этой точке.
Каждый шаг k -цикла требует одного произведения матрицы на вектор и приблизительно 4 mk операций с плавающей точкой.
На языке программирования Python с поддержкой библиотеки NumPy :
импортировать numpy как npdef arnoldi_iteration ( A , b , n : int ): """Вычислить базис (n + 1)-подпространства Крылова матрицы A. Это пространство, охватываемое векторами {b, Ab, ..., A^nb}. Параметры ---------- A : array_like Массив размером m × m. b : array_like Начальный вектор (длина m). n : int На единицу меньше размерности подпространства Крылова или, что эквивалентно, *степени* пространства Крылова. Должно быть >= 1. Возвращает ------- Q : numpy.array Массив размером mx (n + 1), где столбцы являются ортонормированным базисом подпространства Крылова. h : numpy.array Массив размером (n + 1) xn. A на базисе Q. Это верхний Хессенберг. """ eps = 1e-12 h = np . zeros (( n + 1 , n )) Q = np . zeros (( A . shape [ 0 ], n + 1 )) # Нормализуем входной вектор Q [:, 0 ] = b / np . linalg . norm ( b , 2 ) # Используем его как первый вектор Крылова для k в диапазоне ( 1 , n + 1 ): v = np . dot ( A , Q [:, k - 1 ]) # Генерируем новый вектор-кандидат для j в диапазоне ( k ): # Вычитаем проекции на предыдущие векторы h [ j , k - 1 ] = np . dot ( Q [:, j ] . conj (), v ) v = v - h [ j , k - 1 ] * Q [:, j ] h [ k , k - 1 ] = np . линалг.норма ( v , 2 ) если h [ k , k - 1 ] > eps : # Добавить полученный вектор в список, если только Q [:, k ] = v / h [ k , k - 1 ] иначе : # Если это произошло, прекратить итерацию. return Q , h return Q , h
Пусть Q n обозначает матрицу размером m на n, образованную первыми n векторами Арнольди q 1 , q 2 , ..., q n , а H n — (верхнюю матрицу Хессенберга ), образованную числами h j , k , вычисленными с помощью алгоритма:
Метод ортогонализации должен быть специально выбран таким образом, чтобы нижние компоненты Арнольди/Крылова были удалены из высших векторов Крылова. Как можно выразить в терминах q 1 , ..., q i +1 по построению, они ортогональны q i +2 , ..., q n ,
Тогда у нас есть
Матрицу H n можно рассматривать как A в подпространстве с векторами Арнольди в качестве ортогонального базиса; A ортогонально проецируется на . Матрицу H n можно охарактеризовать следующим условием оптимальности. Характеристический многочлен H n минимизирует || p ( A ) q 1 || 2 среди всех монических многочленов степени n . Эта задача оптимальности имеет единственное решение тогда и только тогда , когда итерация Арнольди не ломается.
Соотношение между матрицами Q в последующих итерациях определяется выражением
где
представляет собой матрицу размером ( n +1) на n , образованную путем добавления дополнительной строки к H n .
Идея итерации Арнольди как алгоритма собственных значений заключается в вычислении собственных значений в подпространстве Крылова. Собственные значения H n называются собственными значениями Ритца . Поскольку H n является матрицей Хессенберга скромного размера, ее собственные значения можно эффективно вычислить, например, с помощью алгоритма QR или несколько связанного с ним алгоритма Фрэнсиса . Также сам алгоритм Фрэнсиса можно считать связанным с степенными итерациями, работающими на вложенном подпространстве Крылова. Фактически, самая базовая форма алгоритма Фрэнсиса, по-видимому, заключается в выборе b равным Ae 1 и расширении n до полной размерности A . Улучшенные версии включают один или несколько сдвигов, и более высокие степени A могут быть применены за один шаг. [2]
Это пример метода Рэлея-Ритца .
На практике часто наблюдается, что некоторые собственные значения Ритца сходятся к собственным значениям A . Поскольку H n имеет размер n на n , он имеет не более n собственных значений, и не все собственные значения A могут быть приближены. Обычно собственные значения Ритца сходятся к наибольшим собственным значениям A . Чтобы получить наименьшие собственные значения A , вместо этого следует использовать обратную (операцию) A . Это можно связать с характеристикой H n как матрицы, характеристический полином которой минимизирует || p ( A ) q 1 || следующим образом. Хороший способ сделать p ( A ) малым — выбрать полином p таким образом, чтобы p ( x ) было малым, когда x является собственным значением A . Следовательно, нули p (и, следовательно, собственные значения Ритца) будут близки к собственным значениям A .
Однако детали пока не полностью поняты. Это контрастирует со случаем, когда A является эрмитовым . В этой ситуации итерация Арнольди становится итерацией Ланцоша , для которой теория более полна.
Из-за практических соображений хранения общие реализации методов Арнольди обычно перезапускаются после фиксированного числа итераций. Одним из подходов является метод неявного перезапуска Арнольди (Implicitly Restarted Arnoldi Method, IRAM) [3] Лехука и Соренсена, который был популяризирован в свободном и открытом программном пакете ARPACK . [4] Другим подходом является алгоритм Крылова-Шура от GW Stewart, который более стабилен и прост в реализации, чем IRAM. [5]
Обобщенный метод минимальных остатков (GMRES) — это метод решения уравнения Ax = b, основанный на итерации Арнольди.