Функция linalg.eigh
Функция linalg.eigh вычисляет собственные значения
и собственные векторы эрмитовой (или симметричной для
вещественных матриц) матрицы. Первым параметром функция
принимает квадратную матрицу. Вторым параметром можно
указать, какие именно собственные значения вычислять:
все, только наибольшие или только наименьшие. Возвращает
функция кортеж из двух массивов: массив собственных
значений и массив собственных векторов, где каждый столбец
соответствует собственному вектору.
Синтаксис
np.linalg.eigh(a, [UPLO])
Пример
Давайте вычислим собственные значения и собственные векторы симметричной матрицы 2x2:
import numpy as np
arr = np.array([[1, 2], [2, 1]])
eigvals, eigvecs = np.linalg.eigh(arr)
print("Eigenvalues:", eigvals)
print("Eigenvectors:\n", eigvecs)
Результат выполнения кода:
Eigenvalues: [-1. 3.]
Eigenvectors:
[[-0.70710678 -0.70710678]
[ 0.70710678 -0.70710678]]
Пример
Давайте вычислим собственные значения и собственные векторы эрмитовой матрицы с комплексными элементами:
import numpy as np
arr = np.array([[2, 1+1j], [1-1j, 3]])
eigvals, eigvecs = np.linalg.eigh(arr)
print("Eigenvalues:", eigvals)
print("Eigenvectors:\n", eigvecs)
Результат выполнения кода:
Eigenvalues: [1.26794919 3.73205081]
Eigenvectors:
[[-0.85065081+0.j -0.52573111+0.j ]
[ 0.32505758-0.32505758j -0.52573111+0.52573111j]]
Пример
Давайте используем параметр UPLO для указания, какую часть симметричной матрицы использовать:
import numpy as np
arr = np.array([[1, 2], [2, 1]])
eigvals_lower, eigvecs_lower = np.linalg.eigh(arr, UPLO='L')
eigvals_upper, eigvecs_upper = np.linalg.eigh(arr, UPLO='U')
print("Lower eigenvalues:", eigvals_lower)
print("Upper eigenvalues:", eigvals_upper)
Результат выполнения кода:
Lower eigenvalues: [-1. 3.]
Upper eigenvalues: [-1. 3.]
Пример
Давайте проверим свойство ортогональности собственных векторов симметричной матрицы:
import numpy as np
arr = np.array([[1, 2], [2, 1]])
eigvals, eigvecs = np.linalg.eigh(arr)
dot_product = np.dot(eigvecs[:, 0], eigvecs[:, 1])
print("Dot product of eigenvectors:", dot_product)
Результат выполнения кода:
Dot product of eigenvectors: 0.0
Собственные векторы симметричной матрицы ортогональны, что подтверждается нулевым скалярным произведением.
Смотрите также
-
функцию
eig,
которая вычисляет собственные значения и векторы для общей матрицы -
функцию
eigvals,
которая вычисляет только собственные значения для общей матрицы -
функцию
eigvalsh,
которая вычисляет только собственные значения для эрмитовой матрицы -
функцию
svd,
которая выполняет сингулярное разложение матрицы