Saya bertanya-tanya apa cara yang Anda rekomendasikan untuk menghitung invers dari sebuah matriks?
Cara yang saya temukan sepertinya tidak memuaskan. Sebagai contoh,
> c=rbind(c(1, -1/4), c(-1/4, 1))
> c
[,1] [,2]
[1,] 1.00 -0.25
[2,] -0.25 1.00
> inv(c)
Error: could not find function "inv"
> solve(c)
[,1] [,2]
[1,] 1.0666667 0.2666667
[2,] 0.2666667 1.0666667
> solve(c)*c
[,1] [,2]
[1,] 1.06666667 -0.06666667
[2,] -0.06666667 1.06666667
> qr.solve(c)*c
[,1] [,2]
[1,] 1.06666667 -0.06666667
[2,] -0.06666667 1.06666667
Terima kasih!
r
matrix-inverse
Tim
sumber
sumber
c
).Jawaban:
solve(c)
memberikan kebalikan yang benar. Masalah dengan kode Anda adalah Anda menggunakan operator yang salah untuk perkalian matriks. Anda harus menggunakansolve(c) %*% c
perkalian matriks di R.R melakukan perkalian elemen demi elemen saat Anda memanggil
solve(c) * c
.sumber
Anda dapat menggunakan fungsi ginv () (Moore-Penrose generalized inverse) dalam paket MASS
sumber
Perhatikan bahwa jika Anda peduli dengan kecepatan dan tidak perlu khawatir tentang singularitas,
solve()
sebaiknya diutamakanginv()
karena jauh lebih cepat, karena Anda dapat memeriksa:require(MASS) mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3) t0 <- proc.time() inv0 <- ginv(mat) proc.time() - t0 t1 <- proc.time() inv1 <- solve(mat) proc.time() - t1
sumber