首页 > 解决方案 > R 函数 eigen() 返回的特征向量是否错误?

问题描述

#eigen values and vectors
a <- matrix(c(2, -1, -1, 2), 2)

eigen(a)

我正在尝试在 R 中查找特征值和特征向量。函数eigen适用于特征值,但特​​征向量值存在错误。有没有办法解决这个问题?

特征值和向量的代码

标签: rmatrixeigenvalueeigenvectormatrix-decomposition

解决方案


一些文书工作告诉你

  • 特征值 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功能会有所帮助。

## 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

推荐阅读