eigen関数を使う。固有値、固有ベクトルを求めたい行列を引数に与えると、リストで、固有値と固有ベクトルが一緒に返ってくる。
以下に求めた例を示す。見てのとおり、対称行列でなくても求めることができる。
> mxaa <- matrix(c(3, 1, -2, 0), 2)
> print(mxaa)
[,1] [,2]
[1,] 3 -2
[2,] 1 0
> eigen(mxaa)
eigen() decomposition
$values
[1] 2 1
$vectors
[,1] [,2]
[1,] 0.8944272 0.7071068
[2,] 0.4472136 0.7071068
valuesが固有値、vectorsが固有ベクトル。例えば1つ目の固有ベクトルとその固有ベクトルを取り出すには、以下のようにする。
> eigen(mxaa)$values[1]
[1] 2
> eigen(mxaa)$vectors[1, ]
[1] 0.8944272 0.7071068
2つ目の固有値と固有ベクトル。
> eigen(mxaa)$values[2]
[1] 1
> eigen(mxaa)$vectors[2, ]
[1] 0.4472136 0.7071068
以下、2つの行列の固有値と固有ベクトルを求めた例。
> mxaa <- matrix(c(6, -1, -3, -3, 4, 3, 5, -5, -4), 3)
> print(mxaa)
[,1] [,2] [,3]
[1,] 6 -3 5
[2,] -1 4 -5
[3,] -3 3 -4
> eigen(mxaa)
eigen() decomposition
$values
[1] 3 2 1
$vectors
[,1] [,2] [,3]
[1,] 7.071068e-01 -0.3015113 -3.400738e-15
[2,] 7.071068e-01 -0.9045340 8.574929e-01
[3,] 2.706169e-15 -0.3015113 5.144958e-01
> mxaa <- matrix(c(3, 0, 0, -1, 2, 0, 1, 1, 3), 3)
> print(mxaa)
[,1] [,2] [,3]
[1,] 3 -1 1
[2,] 0 2 1
[3,] 0 0 3
> eigen(mxaa)
eigen() decomposition
$values
[1] 3 3 2
$vectors
[,1] [,2] [,3]
[1,] 1 0.0000000 0.7071068
[2,] 0 0.7071068 0.7071068
[3,] 0 0.7071068 0.0000000