scipy.sparse.linalg.

eigs#

scipy.sparse.linalg.eigs(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, OPpart=None)[источник]#

Найти 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]

Параметры:
Andarray, разреженная матрица или LinearOperator

Массив, разреженная матрица или LinearOperator, представляющий операцию A @ x, где A — вещественная или комплексная квадратная матрица.

kint, необязательный

Количество требуемых собственных значений и собственных векторов. k должно быть меньше N-1. Невозможно вычислить все собственные векторы матрицы.

Mndarray, разреженная матрица или LinearOperator, опционально

Массив, разреженная матрица или LinearOperator, представляющий операцию M@x для обобщенной задачи на собственные значения

A @ x = w * M @ x.

M должна представлять вещественную симметричную матрицу, если A вещественная, и должна представлять комплексную эрмитову матрицу, если A комплексная. Для наилучших результатов тип данных M должен совпадать с типом данных A. Дополнительно:

Если sigma равно None, M положительно определена

Если sigma указан, M положительно полуопределена

Если sigma равно None, eigs требует оператор для вычисления решения линейного уравнения 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. Для вещественной матрицы A сдвиг-инверсия может выполняться либо в мнимом режиме, либо в вещественном режиме, задаваемом параметром OPpart ('r' или 'i'). Обратите внимание, что когда задано sigma, ключевое слово 'which' (ниже) относится к сдвинутым собственным значениям w'[i] где:

Если A вещественный и OPpart == 'r' (по умолчанию),

w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))].

Если A вещественный и OPpart == ‘i’,

w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))].

Если A комплексный, w'[i] = 1/(w[i]-sigma).

v0ndarray, необязательно

Начальный вектор для итерации. По умолчанию: случайный

ncvint, необязательный

Количество сгенерированных векторов Ланцоша ncv должно быть больше, чем k; рекомендуется, чтобы ncv > 2*k. По умолчанию: min(n, max(2*k + 1, 20))

whichstr, ['LM' | 'SM' | 'LR' | 'SR' | 'LI' | 'SI'], опционально

Который k собственные векторы и собственные значения для нахождения:

‘LM’ : наибольшая величина

'SM' : наименьшая величина

'LR' : наибольшая действительная часть

'SR' : наименьшая вещественная часть

‘LI’ : наибольшая мнимая часть

‘SI’ : наименьшая мнимая часть

Когда sigma != None, ‘which’ относится к смещённым собственным значениям w’[i] (см. обсуждение в ‘sigma’, выше). ARPACK обычно лучше находит большие значения, чем малые. Если нужны малые собственные значения, рассмотрите использование режима сдвига-инверсии для лучшей производительности.

maxiterint, необязательный

Максимальное количество итераций обновления Арнольди По умолчанию: n*10

tolfloat, опционально

Относительная точность для собственных значений (критерий остановки) Значение по умолчанию 0 подразумевает машинную точность.

return_eigenvectorsbool, необязательно

Возвращать собственные векторы (True) в дополнение к собственным значениям

Minvndarray, разреженная матрица или LinearOperator, опционально

См. примечания в M, выше.

OPinvndarray, разреженная матрица или LinearOperator, опционально

См. примечания к sigma выше.

OPpart{‘r’ или ‘i’}, опционально

См. примечания в sigma, выше

Возвращает:
wndarray

Массив из k собственных значений.

vndarray

Массив k собственные векторы. v[:, i] является собственным вектором, соответствующим собственному значению w[i].

Вызывает:
ArpackNoConvergence

Когда не достигается запрошенная сходимость. Текущие сошедшиеся собственные значения и собственные векторы можно найти как eigenvalues и eigenvectors атрибуты объекта исключения.

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

eigsh

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

svds

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

Примечания

Эта функция является обёрткой для ARPACK [1] SNEUPD, DNEUPD, CNEUPD, ZNEUPD, функции, которые используют метод неявно перезапускаемого Арнольди для нахождения собственных значений и собственных векторов [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.

Примеры

Найти 6 собственных векторов единичной матрицы:

>>> import numpy as np
>>> from scipy.sparse.linalg import eigs
>>> id = np.eye(13)
>>> vals, vecs = eigs(id, k=6)
>>> vals
array([ 1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j])
>>> vecs.shape
(13, 6)