2015-06-07 4 views
1

Когда я попытался вычислить собственные значения и собственные векторы для следующей матрицы, используя функцию собственного(), в отличие от моих ожиданий наименьшее собственное значение не равно нулю, почему?Собственные значения и собственные векторы в R

> lapMatrix 
     [,1] [,2] [,3] [,4] 
[1,] 0.6 -0.1 -0.5 0.0 
[2,] -0.1 1.0 0.0 -0.9 
[3,] -0.5 0.0 1.0 -0.5 
[4,] 0.0 -0.9 -0.5 1.4 

> eigen(lapMatrix) 
    $values 
[1] 2.277671e+00 1.241300e+00 4.810288e-01 1.297990e-16 

$vectors 
      [,1]  [,2]  [,3] [,4] 
[1,] 0.1359786 0.5205445 0.6786333 0.5 
[2,] -0.5412623 0.3853145 -0.5554889 0.5 
[3,] -0.3480021 -0.7447136 0.2725734 0.5 
[4,] 0.7532858 -0.1611455 -0.3957179 0.5 
+0

'1.297990e-16' довольно близко к нулю. –

+0

, но это не совсем то же самое! есть ли какая-либо функция, чтобы дать мне нулевое собственное значение для этой матрицы? – Zaynab

ответ

1

Вы можете просто круглый результат:

round(eigen(mm)$values,2) 
## [1] 2.28 1.24 0.48 0.00 

Вы можете обернуть это в небольшой функции:

reigen <- 
    function(...,digits =2) round(eigen(...)$values,digits) 

Или с помощью zapsmall, как предложено в комментарии (оно будет автоматически определить количество цифр):

reigen <- 
    function(...,digits =2) zapsmall(eigen(...)$values) 

reigen(mm) 
[1] 2.278 1.241 0.481 0.000 
+1

'zapsmall' тоже должен работать. –

+0

@MamounBenghezal благодарит вас за ваше предложение. Я добавил это в свой ответ. – agstudy

+0

Это необходимо для коррекции на собственные векторы? Не могли бы вы дать код, который вычисляет собственные значения и собственные векторы этой матрицы с тем же порядком? – Zaynab