инверсия матрицы R

Я хочу инвертировать квадратную симметричную положительно определенную матрицу. Я знаю, что в R есть две функции solve() и chol2inv(), но их результаты разные. Мне нужно знать, почему это происходит?

Спасибо.


person Mohammad    schedule 11.03.2013    source источник
comment
Пожалуйста, сделайте вашу ситуацию воспроизводимой, т.е. предоставьте нам данные и код, необходимые для имитации вашей ситуации. См. stackoverflow.com /questions/5963269/ для получения дополнительных советов о том, как это сделать.   -  person Paul Hiemstra    schedule 11.03.2013
comment
насколько различаются наибольшее и наименьшее собственные значения? то есть для матрицы A range(eigen(A)$values) чем больше диапазон, тем сложнее точно инвертировать.   -  person Sean    schedule 11.03.2013


Ответы (2)


Для solve вам нужно указать исходную матрицу, но для chol2inv вы используете предварительно вычисленное разложение холецкого:

set.seed(1)
a<-crossprod(matrix(rnorm(9),3,3))
a_chol<-chol(a)
solve(a)
            [,1]        [,2]       [,3]
[1,]  1.34638151 -0.02957435  0.8010735
[2,] -0.02957435  0.32780020 -0.1786295
[3,]  0.80107345 -0.17862950  1.4533671
chol2inv(a_chol)
            [,1]        [,2]       [,3]
[1,]  1.34638151 -0.02957435  0.8010735
[2,] -0.02957435  0.32780020 -0.1786295
[3,]  0.80107345 -0.17862950  1.4533671
person Jouni Helske    schedule 11.03.2013

Вот несколько способов вычисления обратной матрицы, включая solve() и chol2inv():

> A <- matrix(c(2, -1, 0, -1, 2, -1, 0, -1, 2), 3)

> solve(A)
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75

> chol2inv(chol(A))
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75

> library(MASS)
> ginv(A)
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75
person NPE    schedule 11.03.2013