Некоторые бумажные работы говорят вам
- собственный вектор для собственного значения 3 равен
(-s, s)
для любого ненулевого действительного значения s
; - собственный вектор для собственного значения 1 равен
(t, t)
для любого ненулевого действительного значения t
.
Масштабирование собственных векторов до единичной длины дает
s = ± sqrt(0.5) = ±0.7071068
t = ± sqrt(0.5) = ±0.7071068
Масштабирование хорошо, потому что если матрица действительно симметрична,Матрица собственных векторов ортонормирована, так что ее обратная является транспонированной.Возьмем вашу реальную симметричную матрицу a
, например:
a <- matrix(c(2, -1, -1, 2), 2)
# [,1] [,2]
#[1,] 2 -1
#[2,] -1 2
E <- eigen(a)
d <- E[[1]]
#[1] 3 1
u <- E[[2]]
# [,1] [,2]
#[1,] -0.7071068 -0.7071068
#[2,] 0.7071068 -0.7071068
u %*% diag(d) %*% solve(u) ## don't do this stupid computation in practice
# [,1] [,2]
#[1,] 2 -1
#[2,] -1 2
u %*% diag(d) %*% t(u) ## don't do this stupid computation in practice
# [,1] [,2]
#[1,] 2 -1
#[2,] -1 2
crossprod(u)
# [,1] [,2]
#[1,] 1 0
#[2,] 0 1
tcrossprod(u)
# [,1] [,2]
#[1,] 1 0
#[2,] 0 1
Как найти собственные векторы, используя метод из учебника
Метод из учебника заключается в решении однородныхсистема: (A - λI)x = 0
для основы Null Space.Функция NullSpace
в my this answer была бы полезна.
## your matrix
a <- matrix(c(2, -1, -1, 2), 2)
## knowing that eigenvalues are 3 and 1
## eigenvector for eigenvalue 3
NullSpace(a - diag(3, nrow(a)))
# [,1]
#[1,] -1
#[2,] 1
## eigenvector for eigenvalue 1
NullSpace(a - diag(1, nrow(a)))
# [,1]
#[1,] 1
#[2,] 1
Как видите, они не "нормализованы".В отличие от этого, pracma::nullspace
дает «нормализованные» собственные векторы, так что вы получите что-то, согласующееся с выводом eigen
(с точностью до возможного переворота знака):
library(pracma)
nullspace(a - diag(3, nrow(a)))
# [,1]
#[1,] -0.7071068
#[2,] 0.7071068
nullspace(a - diag(1, nrow(a)))
# [,1]
#[1,] 0.7071068
#[2,] 0.7071068