eigsh#
- scipy.sparse.linalg.eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, mode='normal')[источник]#
Найти k собственных значений и собственных векторов вещественной симметричной квадратной матрицы или комплексной эрмитовой матрицы A.
Решает
A @ x[i] = w[i] * x[i], стандартная задача на собственные значения для собственных значений w[i] с соответствующими собственными векторами x[i].Если указан M, решает
A @ x[i] = w[i] * M @ x[i], обобщенная проблема собственных значений для w[i] собственных значений с соответствующими собственными векторами x[i].Обратите внимание, что нет специализированной процедуры для случая, когда A является комплексной эрмитовой матрицей. В этом случае,
eigsh()будет вызыватьeigs()и возвращать действительные части полученных собственных значений.- Параметры:
- Andarray, разреженная матрица или LinearOperator
Квадратный оператор, представляющий операцию
A @ x, гдеAявляется вещественной симметричной или комплексной эрмитовой. Для режима buckling (см. ниже)Aдолжна быть дополнительно положительно-определённой.- kint, необязательный
Количество требуемых собственных значений и собственных векторов. k должно быть меньше N. Невозможно вычислить все собственные векторы матрицы.
- Возвращает:
- wмассив
Массив из k собственных значений.
- vмассив
Массив, представляющий k собственные векторы. Столбец
v[:, i]является собственным вектором, соответствующим собственному значениюw[i].
- Другие параметры:
- MМатрица N x N, массив, разреженная матрица или линейный оператор, представляющий
операция
M @ xдля обобщенной проблемы собственных значенийA @ x = w * M @ x.
M должна представлять вещественную симметричную матрицу, если A вещественная, и должна представлять комплексную эрмитову матрицу, если A комплексная. Для наилучших результатов тип данных M должен совпадать с типом данных A. Дополнительно:
Если sigma равно None, M симметрична положительно определённая.
Если указана sigma, M является симметричной положительно полуопределенной.
В режиме потери устойчивости M является симметричной неопределённой.
Если sigma равно None, eigsh требует оператор для вычисления решения линейного уравнения
M @ x = b. Это делается внутренне через (разреженное) LU-разложение для явной матрицы M, или через итеративный решатель для общего линейного оператора. Альтернативно, пользователь может предоставить матрицу или оператор Minv, который даетx = Minv @ b = M^-1 @ b.- sigmaвещественный
Нахождение собственных значений около sigma с использованием режима сдвига-инверсии. Это требует оператора для вычисления решения линейной системы
[A - sigma * M] x = b, где M - единичная матрица, если не указано иное. Это вычисляется внутренне через (разреженное) LU разложение для явных матриц A & M, или через итеративный решатель, если либо A, либо M является общим линейным оператором. В качестве альтернативы пользователь может предоставить матрицу или оператор OPinv, что даётx = OPinv @ b = [A - sigma * M]^-1 @ b. Независимо от выбранного режима (normal, cayley или buckling), OPinv должны всегда предоставляться какOPinv = [A - sigma * M]^-1.Обратите внимание, что когда указана сигма, ключевое слово 'which' относится к сдвинутым собственным значениям
w'[i]где:if
mode == 'normal':w'[i] = 1 / (w[i] - sigma).if
mode == 'cayley':w'[i] = (w[i] + sigma) / (w[i] - sigma).if
mode == 'buckling':w'[i] = w[i] / (w[i] - sigma).(см. дальнейшее обсуждение в ‘mode’ ниже)
- v0ndarray, необязательно
Начальный вектор для итерации. По умолчанию: случайный
- ncvint, необязательный
Количество генерируемых векторов Ланцоша ncv должно быть больше k и меньше n; рекомендуется, чтобы
ncv > 2*k. По умолчанию:min(n, max(2*k + 1, 20))- whichstr ['LM' | 'SM' | 'LA' | 'SA' | 'BE']
Если A — комплексная эрмитова матрица, 'BE' недопустимо. Какой k собственные векторы и собственные значения для нахождения:
‘LM’ : Наибольшие по модулю собственные значения.
'SM' : Наименьшие (по модулю) собственные значения.
‘LA’ : Наибольшие (алгебраические) собственные значения.
'SA' : Наименьшие (алгебраические) собственные значения.
‘BE’ : Половина (k/2) с каждого конца спектра.
Когда k нечетное, возвращается на один больше (k/2+1) с верхнего конца. Когда sigma != None, ‘which’ относится к сдвинутым собственным значениям
w'[i](см. обсуждение в 'sigma', выше). ARPACK обычно лучше находит большие значения, чем малые. Если нужны малые собственные значения, рассмотрите использование режима shift-invert для лучшей производительности.- maxiterint, необязательный
Максимальное количество итераций обновления Арнольди. По умолчанию:
n*10- tolfloat
Относительная точность для собственных значений (критерий остановки). Значение по умолчанию 0 подразумевает машинную точность.
- MinvМатрица N x N, массив, разреженная матрица или LinearOperator
См. примечания в M, выше.
- OPinvМатрица N x N, массив, разреженная матрица или LinearOperator
См. примечания к sigma выше.
- return_eigenvectorsbool
Возвращать собственные векторы (True) в дополнение к собственным значениям. Это значение определяет порядок сортировки собственных значений. Порядок сортировки также зависит от which переменная.
- Для which = ‘LM’ или ‘SA’:
Если return_eigenvectors равно True, собственные значения сортируются по алгебраическому значению.
Если return_eigenvectors равно False, собственные значения сортируются по абсолютному значению.
- Для which = 'BE' или 'LA':
Собственные значения всегда сортируются по алгебраическому значению.
- Для which = ‘SM’:
Если return_eigenvectors равно True, собственные значения сортируются по алгебраическому значению.
Если return_eigenvectors равно False, собственные значения сортируются по убыванию абсолютного значения.
- modeстрока [‘normal’ | ‘buckling’ | ‘cayley’]
Укажите стратегию для режима сдвига-инверсии. Этот аргумент применяется только для вещественных A и sigma != None. В режиме сдвига-инверсии ARPACK внутренне решает задачу на собственные значения
OP @ x'[i] = w'[i] * B @ x'[i]и преобразует полученные векторы Ритца x'[i] и значения Ритца w'[i] в желаемые собственные векторы и собственные значения задачиA @ x[i] = w[i] * M @ x[i]. Режимы следующие:- 'normal' :
OP = [A - sigma * M]^-1 @ M, B = M, w’[i] = 1 / (w[i] - sigma)
- ‘buckling’ :
OP = [A - sigma * M]^-1 @ A, B = A, w’[i] = w[i] / (w[i] - sigma)
- ‘cayley’ :
OP = [A - sigma * M]^-1 @ [A + sigma * M], B = M, w’[i] = (w[i] + sigma) / (w[i] - sigma)
Выбор режима повлияет на то, какие собственные значения выбираются ключевым словом 'which', а также может повлиять на устойчивость сходимости (см. обсуждение в [2]).
- Вызывает:
- ArpackNoConvergence
Когда запрошенная сходимость не достигнута.
Текущие сходящиеся собственные значения и собственные векторы можно найти как
eigenvaluesиeigenvectorsатрибуты объекта исключения.
Смотрите также
Примечания
Эта функция является обёрткой для ARPACK [1] Функции SSEUPD и DSEUPD, которые используют неявно перезапускаемый метод Ланцоша для нахождения собственных значений и собственных векторов [2].
Ссылки
[1]Программное обеспечение ARPACK, opencollab/arpack-ng
[2]R. B. Lehoucq, D. C. Sorensen и C. Yang, ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods. SIAM, Philadelphia, PA, 1998.
Примеры
>>> import numpy as np >>> from scipy.sparse.linalg import eigsh >>> identity = np.eye(13) >>> eigenvalues, eigenvectors = eigsh(identity, k=6) >>> eigenvalues array([1., 1., 1., 1., 1., 1.]) >>> eigenvectors.shape (13, 6)