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атрибуты объекта исключения.
Смотрите также
Примечания
Эта функция является обёрткой для 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)