Я хочу инвертировать квадратную симметричную положительно определенную матрицу. Я знаю, что в R есть две функции solve()
и chol2inv()
, но их результаты разные. Мне нужно знать, почему это происходит?
Спасибо.
Я хочу инвертировать квадратную симметричную положительно определенную матрицу. Я знаю, что в R есть две функции solve()
и chol2inv()
, но их результаты разные. Мне нужно знать, почему это происходит?
Спасибо.
Для 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
Вот несколько способов вычисления обратной матрицы, включая 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
range(eigen(A)$values)
чем больше диапазон, тем сложнее точно инвертировать. - person Sean   schedule 11.03.2013