2015-02-13 2 views
2

У меня есть оценка ковариационной матрицыОшибка в обратной матрицы

Я хочу взять инверсию этой матрицы, R дает мне следующую ошибку

A=[ 3529861.470 8785861.47 6920.344 17120.34; 
    8785861.470 26209861.47 17120.344 51920.34; 
    6920.344 17120.34 14.000 34.00; 
    17120.344 51920.34 34.000 104.00] 

«Ошибка в solve.default (l): система является вычислительно сингулярной: номер взаимного условия = 2.14511e-22 ".

однако Matlab делает обратный расчет без сообщения об ошибке. Кто-нибудь знает причину, по которой R дает мне ошибку? Есть ли другой способ расчета обратного

+1

Matlab дает число обусловленности ('конд (A)') из 9.5e12, поэтому матрица на самом деле близка к вырожденной. Возможно, R просто имеет более строгий порог, чем Matlab, чтобы объявить матрицу как близкую к единственному –

+0

номер взаимного условия, которое R дает мне 2.14511e-22. разве не существует способа обойти эту ситуацию в R? – Spandy

+0

Я не знаю R, но в линейной алгебре, если у вас есть большое условное число, алгоритм инвертирования должен быть немного другим (я имею в виду, вы не можете вычислить его с детерминантами, так как вы получите большие числа, вы должны использовать что-то как исключение гауссии). Может быть, вам следует искать различные варианты вычисления обратной матрицы в R –

ответ

5
A <- matrix(c(3529861.470,8785861.47,6920.344,17120.34, 
     8785861.470,26209861.47,17120.344,51920.34, 
    6920.344,17120.34,14.000,34.00, 
    17120.344,51920.34,34.000,104.00), 
    nrow=4,byrow=TRUE) 

solve(A) ## works on my system 

##    [,1]   [,2]   [,3]  [,4] 
## [1,] -1.2515442 0.7617239  535.4871 -349.3141 
## [2,] 0.7617072 -0.4635922 -325.9051 212.5957 
## [3,] 535.4884664 -325.9130639 -229114.3516 149458.2734 
## [4,] -349.3061387 212.5955306 149454.4973 -97492.7335 

eigen(A)$values 
## [1] 2.921525e+07 5.245875e+05 1.440703e+00 -3.061760e-06 

rcond(A) ## condition number 
## [1] 7.516179e-14 

Вы должны быть в состоянии настроить параметр tol, если у вас возникли проблемы обращения матрицы, но это, конечно, делается на свой страх и риск - вы переопределение предупреждая, что операция матрицы может быть численно неустойчивой.

Это с

R Under development (unstable) (2015-02-11 r67792) 
Platform: i686-pc-linux-gnu (32-bit) 
Running under: Ubuntu precise (12.04.5 LTS) 
Смежные вопросы