Spec-Zone.ru › NumPy 1.18

numpy.linalg.eigh

numpy.linalg.eigh(a, UPLO='L') [source]

Возвращает собственные значения и векторы комплексной эрмитовой (сопряжённо-симметричной) или вещественной симметричной матрицы.

Возвращает два объекта: одномерный массив, содержащий собственные значения a, и двумерный квадратный массив или матрицу (в зависимости от типа входных данных) соответствующих собственных векторов (в столбцах).

Параметры
a(…, M, M) array

Эрмитовы или вещественные симметричные матрицы, для которых необходимо вычислить собственные значения и векторы.

UPLO{‘L’, ‘U’}, optional

Указывает, с использованием какой треугольной части a матрицы (нижней «L», по умолчанию) или верхней «U» производится вычисление. Независимо от этого значения, в вычислении учитываются только вещественные части диагонали, чтобы сохранить понятие эрмитовой матрицы. Следовательно, мнимая часть диагонали всегда будет обрабатываться как ноль.

Возвращает
w(…, M) ndarray

Собственные значения в порядке возрастания, каждое повторяется в соответствии со своей кратностью.

v{(…, M, M) ndarray, (…, M, M) matrix}

Столбец v[:, i] — это нормированный собственный вектор, соответствующий собственному значению w[i]. Возвращает объект матрицы, если a является объектом матрицы.

Возбуждает
LinAlgError

Если вычисление собственных значений не сходится.

См. также

eigvalsh

собственные значения вещественных симметричных или комплексных эрмитовых (сопряжённо-симметричных) массивов.

eig

собственные значения и правые собственные векторы для несимметричных массивов.

eigvals

собственные значения несимметричных массивов.

Примечания

Добавлена в версии 1.8.0.

Применяются правила трансляции, см. документацию numpy.linalg для получения подробностей.

Собственные значения/векторы вычисляются с помощью процедур LAPACK _syevd, _heevd.

Собственные значения вещественных симметричных или комплексных эрмитовых матриц всегда вещественные. [1] Массив v (столбцовых) собственных векторов является унитарным и a, w, и v удовлетворяют уравнениям dot(a, v[:, i]) = w[i] * v[:, i].

Ссылки

1

Г. Странг, Линейная алгебра и её приложения, 2-е изд., Орландо, Флорида, Издательство Academic Press, Inc., 1980, стр. 222.

Примеры

>>> from numpy import linalg as LA
>>> a = np.array([[1, -2j], [2j, 5]])
>>> a
array([[ 1.+0.j, -0.-2.j],
       [ 0.+2.j,  5.+0.j]])
>>> w, v = LA.eigh(a)
>>> w; v
array([0.17157288, 5.82842712])
array([[-0.92387953+0.j        , -0.38268343+0.j        ], # may vary
       [ 0.        +0.38268343j,  0.        -0.92387953j]])
>>> np.dot(a, v[:, 0]) - w[0] * v[:, 0] # verify 1st e-val/vec pair
array([5.55111512e-17+0.0000000e+00j, 0.00000000e+00+1.2490009e-16j])
>>> np.dot(a, v[:, 1]) - w[1] * v[:, 1] # verify 2nd e-val/vec pair
array([0.+0.j, 0.+0.j])
>>> A = np.matrix(a) # what happens if input is a matrix object
>>> A
matrix([[ 1.+0.j, -0.-2.j],
        [ 0.+2.j,  5.+0.j]])
>>> w, v = LA.eigh(A)
>>> w; v
array([0.17157288, 5.82842712])
matrix([[-0.92387953+0.j        , -0.38268343+0.j        ], # may vary
        [ 0.        +0.38268343j,  0.        -0.92387953j]])
>>> # demonstrate the treatment of the imaginary part of the diagonal
>>> a = np.array([[5+2j, 9-2j], [0+2j, 2-1j]])
>>> a
array([[5.+2.j, 9.-2.j],
       [0.+2.j, 2.-1.j]])
>>> # with UPLO='L' this is numerically equivalent to using LA.eig() with:
>>> b = np.array([[5.+0.j, 0.-2.j], [0.+2.j, 2.-0.j]])
>>> b
array([[5.+0.j, 0.-2.j],
       [0.+2.j, 2.+0.j]])
>>> wa, va = LA.eigh(a)
>>> wb, vb = LA.eig(b)
>>> wa; wb
array([1., 6.])
array([6.+0.j, 1.+0.j])
>>> va; vb
array([[-0.4472136 +0.j        , -0.89442719+0.j        ], # may vary
       [ 0.        +0.89442719j,  0.        -0.4472136j ]])
array([[ 0.89442719+0.j       , -0.        +0.4472136j],
       [-0.        +0.4472136j,  0.89442719+0.j       ]])

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.linalg.eigh.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API