Некоторые документы говорят вам
- собственный вектор для собственного значения 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
для базиса нулевого пространства. Функция NullSpace
в моем этом ответе была бы полезна.
## 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
Что именно вы считаете здесь ошибкой? Имейте в виду, что R возвращает собственные векторы, нормализованные к единице длины, и помните, что в данном случае они также определены с точностью до знака.
собственные векторы должны быть похожи на -1 1 1 -1, но они оказываются десятичными, а ответы чисто не десятичными @JuliusVainora
Тогда мой комментарий и ответ @李哲源 объясняют это:
c(-1, 1) / sqrt(1^2+1^2)
равноc(-0.707, 0.707)
.Да, я понял твою точку зрения @JuliusVainora. Я искренне извиняюсь за задержку с ответом@李哲源