Итерация Арнольди
В числовой линейной алгебре является итерация Арнольди алгоритмом собственных значений и важным примером итерационного метода . Арнольди находит приближение к собственным значениям и собственным векторам общих (возможно, неэрмитовых ) матриц путем построения ортонормированного базиса подпространства Крылова , что делает его особенно полезным при работе с большими разреженными матрицами .
Метод Арнольди принадлежит к классу алгоритмов линейной алгебры, которые дают частичный результат после небольшого числа итераций, в отличие от так называемых прямых методов , которые должны завершиться, чтобы дать какие-либо полезные результаты (см., например, преобразование Хаусхолдера ). Частичным результатом в этом случае являются первые несколько векторов основы, которую строит алгоритм.
Применительно к эрмитовым матрицам он сводится к алгоритму Ланцоша . Итерация Арнольди была изобретена WE Arnoldi в 1951 году. [1]
Подпространства Крылова и степенная итерация
[ редактировать ]Интуитивный метод поиска наибольшего (по абсолютному значению) собственного значения заданной m × m. матрицы размера — итерация степени : начиная с произвольного начального вектора b , вычисляем Ab , A 2 б , А 3 b ... нормализуя результат после каждого применения матрицы A. ,
Эта последовательность сходится к собственному вектору, соответствующему собственному значению с наибольшим абсолютным значением: . Однако большая часть потенциально полезных вычислений тратится впустую, если используется только конечный результат. . Это говорит о том, что вместо этого мы формируем так называемую матрицу Крылова :
Столбцы этой матрицы, как правило, не ортогональны , но мы можем извлечь ортогональный базис с помощью такого метода, как ортогонализация Грама – Шмидта . Таким образом, полученный набор векторов является ортогональным базисом подпространства Крылова , . Мы можем ожидать, что векторы этого базиса будут охватывать хорошие аппроксимации собственных векторов, соответствующих наибольшие собственные значения по той же причине, что аппроксимирует доминирующий собственный вектор.
Итерация Арнольда
[ редактировать ]Итерация Арнольди использует модифицированный процесс Грама-Шмидта для создания последовательности ортонормированных векторов q 1 , q 2 , q 3 , ..., называемых векторами Арнольди , таких, что для каждого n векторы q 1 , ... , q n охватывают подпространство Крылова . В явном виде алгоритм выглядит следующим образом:
Start with an arbitrary vector q1 with norm 1.
Repeat for k = 2, 3, ...
qk := A qk−1
for j from 1 to k − 1
hj,k−1 := qj* qk
qk := qk − hj,k−1 qj
hk,k−1 := ‖qk‖
qk := qk / hk,k−1
- петля J проецирует компонент в направлениях . Это обеспечивает ортогональность всех сгенерированных векторов.
Алгоритм не работает, когда q k является нулевым вектором. Это происходит, когда полином A минимальный имеет степень k . В большинстве приложений итерации Арнольди, включая приведенный ниже алгоритм собственных значений и GMRES , алгоритм сходится в этой точке.
Каждый шаг k -цикла требует одного произведения матрицы на вектор и примерно 4 мк операций с плавающей запятой.
На языке программирования Python с поддержкой библиотеки NumPy :
import numpy as np
def arnoldi_iteration(A, b, n: int):
"""Compute a basis of the (n + 1)-Krylov subspace of the matrix A.
This is the space spanned by the vectors {b, Ab, ..., A^n b}.
Parameters
----------
A : array_like
An m × m array.
b : array_like
Initial vector (length m).
n : int
One less than the dimension of the Krylov subspace, or equivalently the *degree* of the Krylov space. Must be >= 1.
Returns
-------
Q : numpy.array
An m x (n + 1) array, where the columns are an orthonormal basis of the Krylov subspace.
h : numpy.array
An (n + 1) x n array. A on basis Q. It is upper Hessenberg.
"""
eps = 1e-12
h = np.zeros((n + 1, n))
Q = np.zeros((A.shape[0], n + 1))
# Normalize the input vector
Q[:, 0] = b / np.linalg.norm(b, 2) # Use it as the first Krylov vector
for k in range(1, n + 1):
v = np.dot(A, Q[:, k - 1]) # Generate a new candidate vector
for j in range(k): # Subtract the projections on previous vectors
h[j, k - 1] = np.dot(Q[:, j].conj(), v)
v = v - h[j, k - 1] * Q[:, j]
h[k, k - 1] = np.linalg.norm(v, 2)
if h[k, k - 1] > eps: # Add the produced vector to the list, unless
Q[:, k] = v / h[k, k - 1]
else: # If that happens, stop iterating.
return Q, h
return Q, h
Свойства итерации Арнольди
[ редактировать ]Пусть Q n обозначает m x матрицу размером 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 минимизирует п ( А ) 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 как матрицы, характеристический полином которой минимизирует || п ( А ) q 1 || следующим образом. Хороший способ добиться малого p ( A ) — это выбрать полином p так, чтобы ( x ) было малым всякий раз, когда x является собственным значением A. p Следовательно, нули p (и, следовательно, собственные значения Ритца) будут близки к собственным значениям A .
Однако детали еще не до конца изучены. Это контрастирует со случаем, когда A является эрмитовым . В этой ситуации итерация Арнольди становится итерацией Ланцоша , для которой теория является более полной.

Перезапущена итерация Арнольди.
[ редактировать ]Из практических соображений хранения общие реализации методов Арнольди обычно перезапускаются после фиксированного количества итераций. Одним из подходов является метод неявного перезапуска Арнольди (IRAM). [3] от Lehoucq и Sorensen, который был популяризирован в бесплатном пакете программного обеспечения с открытым исходным кодом ARPACK . [4] Другой подход — алгоритм Крылова-Шура Г. В. Стюарта, который более стабилен и прост в реализации, чем IRAM. [5]
См. также
[ редактировать ]Обобщенный метод минимальных невязок (GMRES) — это метод решения Ax = b, основанный на итерации Арнольди.
Ссылки
[ редактировать ]- ^ Арнольди, МЫ (1951). «Принцип минимизации итераций при решении матричной проблемы собственных значений» . Ежеквартальный журнал прикладной математики . 9 (1): 17–29. дои : 10.1090/qam/42792 . ISSN 0033-569X .
- ^ Дэвид С. Уоткинс. Алгоритм Фрэнсиса, Университет штата Вашингтон. Проверено 14 декабря 2022 г.
- ^ РБ Лехук и Д.С. Соренсен (1996). «Методы дефляции для неявно перезапущенной итерации Арнольди». Журнал SIAM по матричному анализу и его приложениям . 17 (4): 789–821. дои : 10.1137/S0895479895281484 . hdl : 1911/101832 .
- ^ РБ Лехук; Округ Колумбия Соренсен и К. Ян (1998). «Руководство пользователя ARPACK: Решение крупномасштабных задач на собственные значения с помощью неявно перезапущенных методов Арнольди» . СИАМ. Архивировано из оригинала 26 июня 2007 г. Проверено 30 июня 2007 г.
- ^ Стюарт, GW (2002). «Алгоритм Крылова-Шура для решения больших собственных задач» . Журнал SIAM по матричному анализу и его приложениям . 23 (3): 601–614. дои : 10.1137/S0895479800371529 . ISSN 0895-4798 .
- У. Е. Арнольди, «Принцип минимизации итераций в решении проблемы собственных значений матрицы», Ежеквартальный журнал прикладной математики , том 9, страницы 17–29, 1951.
- Юсеф Саад , Численные методы решения больших задач на собственные значения , Издательство Манчестерского университета, 1992. ISBN 0-7190-3386-1 .
- Ллойд Н. Трефетен и Дэвид Бау, III, Численная линейная алгебра , Общество промышленной и прикладной математики, 1997. ISBN 0-89871-361-7 .
- Яшке, Леонхард: Предобусловленные методы Арнольди для систем нелинейных уравнений . (2004). ISBN 2-84976-001-3
- Реализация: Matlab поставляется со встроенным ARPACK. Как хранимые, так и неявные матрицы можно анализировать с помощью функции eigs() .