Kali ini kita akan membahas tentang diagonalisasi pada matriks.
Dalam banyak kasus, kita harus menghitung A^r, di mana A adalah matriks persegi n x n dan r adalah bilangan bulat positif yang besar. Dalam hal ini, jika kita secara langsung menghitung A^r, waktu komputasi akan mahal dan kita mungkin juga memiliki banyak kesalahan numerik dalam komputer. Oleh karena itu, kita ingin menyederhanakan Ar agar dapat menghitungnya dengan efisien. Salah satu ide kunci untuk menyederhanakan A^r adalah diagonalisasi. Pada bagian ini, kita akan membahas diagonalisasi pada matriks persegi.
Diagonalisasi adalah proses membagi matriks persegi menjadi matriks diagonal D dengan matriks invertibel Q, seperti yang dijelaskan dalam contoh sebelumnya. Secara matematis, jika kita memiliki matriks persegi A, kita ingin menemukan matriks invertibel Q dan matriks diagonal D sehingga A = QDQ^(-1).
Proses diagonalisasi sangat penting dalam aljabar linear karena memungkinkan kita untuk menyederhanakan operasi pada matriks seperti pemangkatan, perhitungan nilai-nilai eigen, dan perhitungan fungsi matriks yang kompleks.
Dalam prakteknya, untuk diagonalisasi matriks, kita perlu mencari nilai-nilai eigen dan vektor eigen dari matriks tersebut. Jika kita memiliki n nilai eigen yang berbeda (dengan vektor eigen yang sesuai), kita dapat membentuk matriks diagonal D dengan menggunakan nilai-nilai eigen di diagonal utama. Matriks invertibel Q terbentuk dari vektor eigen yang dikolomkan.
Diagonalisasi matriks dapat sangat berguna dalam mempermudah perhitungan dan analisis matriks, terutama ketika kita perlu menghitung pemangkatan matriks untuk bilangan bulat positif yang besar.
Diagonalisasi
Anggap kita memiliki matriks persegi A. Seperti yang ditunjukkan dalam Contoh Pekerjaan, sering kali kita perlu menghitung Ar untuk sebuah bilangan bulat positif r yang besar. Agar dapat menghitungnya, akan bagus jika kita dapat membagi-bagi A sebagai Q D Q1 di mana D adalah matriks diagonal dan Q adalah matriks invertibel.
Sebuah matriks persegi n x n A disebut diagonalisasi jika dapat dituliskan sebagai A = Q . D . Q^-1, di mana D adalah matriks diagonal dan Q adalah matriks invertibel.
Kemudian kita dapat mendekomposisi matriks A sebagai:
Q <-matrix(c(1,1,-1,1),2,2)
D <-matrix(c(3,0,0,1),2,2)
Q %*%D%*% solve(Q)
## [,1] [,2]
## [1,] 2 1
## [2,] 1 2
Pertanyaan selanjutnya adalah, kapan sebuah matriks persegi A dapat diagonalisasi dan bagaimana cara menghitung diagonalisasi dari A? Beberapa teorema berikut berguna dalam menjawab pertanyaan ini:
Teorema 6.5: Anggap A adalah matriks n x n. Maka A dapat diagonalisasi jika dan hanya jika A memiliki n vektor eigen yang linear independen.
Teorema ini menyatakan bahwa untuk sebuah matriks A dapat diagonalisasi, jumlah vektor eigen yang linear independen harus sama dengan ukuran matriks (n). Dengan kata lain, kita perlu menemukan n vektor eigen yang tidak memiliki hubungan linier satu sama lain.
Untuk menghitung diagonalisasi matriks A, langkah-langkah umumnya adalah:
Dengan mengikuti langkah-langkah di atas, Anda dapat menghitung diagonalisasi matriks A jika matriks tersebut memenuhi syarat memiliki n vektor eigen yang linear independen.
Misalnya lagi kita punya vektor 2x2 sebagai berikut :
A <-matrix(c(2,-1,1,-1,-3,1,3,3,3),3,3)
eigen(A)
## eigen() decomposition
## $values
## [1] 4.397382 -3.824458 1.427076
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.7437078 0.2542122 0.8674476
## [2,] 0.1624484 0.9508909 -0.3981322
## [3,] 0.6484668 -0.1765859 -0.2983713
Teorema 6.7: Anggap A adalah matriks n x n. Jika A memiliki n nilai eigen yang berbeda, maka A dapat diagonalisasi.
Teorema ini menyatakan bahwa jika matriks A memiliki n nilai eigen yang berbeda, maka matriks A dapat diagonalisasi. Dalam konteks ini, “nilai eigen yang berbeda” berarti setiap nilai eigen memiliki jumlah aljabarik yang berbeda, sehingga tidak ada nilai eigen yang menjadi “ganda” atau memiliki aljabarik yang sama.
Contoh lagi, kita punya vektor 2x2,
B <-matrix(c(1,0,3,-2,2,-3,1,-3,-2),3,3)
eigen(B)
## eigen() decomposition
## $values
## [1] 4.50349224 -3.56576496 0.06227272
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.5276592 -0.01504018 -0.7715961
## [2,] -0.6521968 -0.47442002 -0.5343413
## [3,] 0.5442565 -0.88017012 -0.3451359
Jika kita ingin mendapatkan matriks D dan Q dari nilai-nilai eigen dan vektor eigen dari matriks A di R, Anda dapat melakukan langkah-langkah berikut:
p <-eigen(A)$vectors
D <-diag(eigen(A)$values)
p %*%D%*%solve(p)
## [,1] [,2] [,3]
## [1,] 2 -1 3
## [2,] -1 -3 3
## [3,] 1 1 3
Perhatikan bahwa kita menggunakan fungsi solve() untuk menghitung invers dari matriks. Sebagai alternatif dari solve(), kita dapat menggunakan fungsi inv().
Practical Applications
Anggap kita memiliki probabilitas transisi untuk urutan DNA seperti yang ditunjukkan dalam matriks berikut:
library(magick)
## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
inp_img <- image_read("paDiagonalization.png")
plot(inp_img)
Juga, anggap kita memiliki urutan yang diamati sebagai berikut: ACTGTTC. Kita dapat memandang urutan ini sebagai kata yang terdiri dari empat huruf, yaitu A, C, G, dan T. Selanjutnya, kita ingin menghitung probabilitas mengamati urutan ini setelah waktu evolusi yang lama. Dalam hal ini, untuk membuatnya lebih sederhana, kita memodelkannya sebagai rantai Markov waktu diskret daripada rantai Markov waktu kontinu. Di sini, kita juga mengasumsikan bahwa setiap posisi di dalam kata, yaitu setiap lokasi dalam urutan, saling bebas, sehingga yang perlu kita lakukan adalah menghitung probabilitas munculnya A, C, G, atau T.
Dalam konteks ini, kita perlu menghitung probabilitas munculnya setiap huruf (A, C, G, dan T) secara terpisah. Jika kita asumsikan bahwa probabilitas munculnya setiap huruf adalah konstan seiring dengan waktu evolusi yang lama, kita dapat menggunakan persamaan sebagai berikut:
Probabilitas(A) = jumlah kemunculan A dalam urutan / panjang urutan Probabilitas(C) = jumlah kemunculan C dalam urutan / panjang urutan Probabilitas(G) = jumlah kemunculan G dalam
Untuk menghitung probabilitas munculnya A, C, G, atau T, kita perlu menghitung distribusi batas (limiting distribution). Distribusi batas dapat dihitung dengan melakukan:
inp_img <- image_read("limit.png")
plot(inp_img)
dimana phi adalah sebuah vektor :
inp_img <- image_read("vektor.png")
plot(inp_img)
Untuk menghitung batas ini, pertama-tama kita perlu mendiagonalisasi matriks P.
Dalam R, kita akan menggunakan fungsi eigen() untuk mendiagonalisasi matriks transisi P. Pertama, tentukan matriks:
A <-matrix(c(1/4,1/5,1/3,1/6,1/4,1/5,1/3,
1/3, 1/4,2/5,1/6,1/3,1/4,1/5,1/6,1/6),4,4)
A
## [,1] [,2] [,3] [,4]
## [1,] 0.2500000 0.2500000 0.2500000 0.2500000
## [2,] 0.2000000 0.2000000 0.4000000 0.2000000
## [3,] 0.3333333 0.3333333 0.1666667 0.1666667
## [4,] 0.1666667 0.3333333 0.3333333 0.1666667
Kemudian kita gunakan fungsi eigen():
p <-eigen(A)$vectors
D <-diag(eigen(A)$values)
p %*%D%*%solve(p)
## [,1] [,2] [,3] [,4]
## [1,] 0.2500000+0i 0.2500000+0i 0.2500000+0i 0.2500000+0i
## [2,] 0.2000000-0i 0.2000000+0i 0.4000000+0i 0.2000000+0i
## [3,] 0.3333333+0i 0.3333333-0i 0.1666667-0i 0.1666667+0i
## [4,] 0.1666667+0i 0.3333333+0i 0.3333333+0i 0.1666667+0i
Sekali lagi, perhatikan bahwa kita menggunakan fungsi solve() untuk menghitung invers dari matriks p. Sebagai alternatif dari solve(), kita dapat menggunakan fungsi inv().
Di sini, “*” mengacu pada bilangan kompleks. Mari kita definisikan phi sebagai distribusi seragam (uniform distribution), yaitu:
inp_img <- image_read("v2.png")
plot(inp_img)
ini <-c(1/4,1/4,1/4,1/4)
ini
## [1] 0.25 0.25 0.25 0.25
ini %*% p %*% D^(10000) %*% solve(p)
## [,1] [,2] [,3] [,4]
## [1,] 0.2435175+0i 0.276212+0i 0.2841037+0i 0.1961669+0i
Oleh karena itu, probabilitas munculnya A, C, G, atau T adalah sebagai berikut: ==> 0.2435175+0i ==> 0.276212+0i ==> 0.2841037+0i ==> 0.1961669+0i
Sekian pembahasan kita tentang diagonalisasi pada matriks.