Misalkan saya memiliki matriks semi-pasti positif S dan saya ingin mendapatkan invers dari akar kuadrat dari matriks ini, yaitu S^(-1/2).

Bolehkah saya melakukan seperti ini?

ei <- eigen(S)
V <- ei$vectors
res <- V %*% diag(1 / sqrt(ei$values)) %*% t(V)

Apakah res sama dengan S^(-1/2)?

Saya hanya melakukan inverse of square root untuk nilai eigen S, apakah ini benar?

Saya tahu bahwa: jika seseorang ingin mendapatkan S^(1/2), maka res <- V %*% diag(sqrt(ei$values)) %*% t(V), yaitu res = S^(1/2).

Bagaimana dengan S^(-1/2)?

Terima kasih.

r
2
BioChemoinformatics 12 Maret 2017, 02:19

2 jawaban

Jawaban Terbaik

Ya. Kita dapat dengan mudah mengambil contoh S dan memeriksa bahwa S kali res kali res adalah matriks identitas:

set.seed(123)
S <- crossprod(matrix(rnorm(9), 3))

ei <- eigen(S)
V <- ei$vectors
res <- V %*% diag(1 / sqrt(ei$values)) %*% t(V)

S %*% res %*% res
##             [,1]        [,2]        [,3]
## [1,]  1.0000e+00 -2.3731e-15 -1.6653e-16
## [2,]  3.3346e-15  1.0000e+00 -6.6613e-16
## [3,] -1.0235e-16  8.3267e-16  1.0000e+00

Perhatikan juga bahwa S dan res komuter, yaitu all.equal(S %*% res, res %*% S) adalah BENAR, sehingga 3 faktor di baris kode terakhir dapat ditulis dalam urutan apa pun.

2
G. Grothendieck 12 Maret 2017, 15:16

Jika, sesuai pertanyaan OP, matriks input positif semi-pasti (dan tidak pasti positif), nilai eigennya tidak akan semuanya positif, dan metode yang diberikan dalam jawaban di atas akan gagal, karena

diag(1 / sqrt(ei$values))

Tidak akan menjadi matriks berhingga.

0
Allin Cottrell 29 Juli 2017, 20:38