#eigen values and vectors
a <- matrix(c(2, -1, -1, 2), 2)
eigen(a)
我正在尝试在R中找到特征值和特征向量。函数eigen
适用于特征值,但特征向量值有误。有什么办法可以解决这个问题?
答案 0 :(得分:3)
一些文书工作告诉你
(-s, s)
,特征值3的特征向量为s
; (t, t)
,特征值1的特征向量为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
为零空间基础。 my this answer中的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