scipy.sparse.linalg.

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 атрибуты объекта исключения.

Смотрите также

eigs

собственные значения и собственные векторы для общей (несимметричной) матрицы A

svds

сингулярное разложение для матрицы A

Примечания

Эта функция является обёрткой для 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)