Kalikan sebuah matriks A dengan hampir semua vektor, dan arah vektornya ikut berubah: (1, 0) bisa diputar, dimiringkan, atau keduanya. Tetapi hampir setiap matriks menyimpan beberapa arah istimewa yang tidak bergeser sama sekali — matriks hanya memperpanjang atau memendekkan vektor pada arah itu. Vektor seperti ini disebut eigenvector, dan faktor pengali panjangnya disebut eigenvalue, dilambangkan λ. Hubungan keduanya dirangkum dalam satu persamaan: Av = λv.
Persoalan eigenvalue muncul di banyak tempat: analisis komponen utama (PCA) mencari arah data dengan variansi terbesar, analisis getaran mencari frekuensi alami sebuah struktur, dan studi sistem dinamis memakainya untuk menilai apakah suatu keadaan stabil. Bab ini menghitung keduanya dengan np.linalg.eig, memverifikasi definisinya, lalu menutup dengan varian khusus untuk matriks simetris.
np.linalg.eig Mengembalikan Dua Array #
Agar output bersih, kita memakai matriks yang eigenvalue-nya bulat: A = [[4, 1], [2, 3]]. Fungsi np.linalg.eig mengembalikan dua objek sekaligus dalam satu tuple, sehingga cocok dibuka dengan dua variabel:
import numpy as np
A = np.array([[4.0, 1.0],
[2.0, 3.0]])
vals, vecs = np.linalg.eig(A)
print("eigenvalue :", vals)
print("eigenvector:")
print(vecs)Output yang Dihasilkan:
eigenvalue : [5. 2.]
eigenvector:
[[ 0.70710678 -0.4472136 ]
[ 0.70710678 0.89442719]]Baris demi baris:
- Baris 3-4 (
A = ...): matriks persegi 2x2. A tidak harus simetris agareigbisa berjalan. - Baris 5 (
vals, vecs = np.linalg.eig(A)): fungsieigmengembalikan tuple berisi dua array; tuple unpacking memisahkannya menjadivals(array 1-D berisi eigenvalue) danvecs(array 2-D berisi eigenvector). - Baris 6 (
print("eigenvalue :", vals)):[5. 2.]berarti λ1 = 5 dan λ2 = 2. - Baris 8 (
print(vecs)): kolom ke-i darivecsadalah eigenvector untukvals[i]. Kolom pertama [0.70710678, 0.70710678] adalah arah (1, 1) yang dinormalisasi hingga panjangnya 1; kolom kedua [-0.4472136, 0.89442719] adalah arah (-1, 2) dengan panjang 1.
Verifikasi Av = λv #
Definisi eigenvector bisa diuji langsung: A dikali kolom eigenvector harus menghasilkan eigenvalue yang sama dikali eigenvector itu. Pengambilan kolom memakai sintaks dari bab Mengambil Baris dan Kolom:
import numpy as np
A = np.array([[4.0, 1.0],
[2.0, 3.0]])
vals, vecs = np.linalg.eig(A)
print("kolom 0:", np.allclose(A @ vecs[:, 0], vals[0] * vecs[:, 0]))
print("kolom 1:", np.allclose(A @ vecs[:, 1], vals[1] * vecs[:, 1]))Output yang Dihasilkan:
kolom 0: True
kolom 1: TrueUntuk tiap pasangan, baris 6 membandingkan dua ekspresi: A @ vecs[:, 0] adalah hasil transformasi, sedangkan vals[0] * vecs[:, 0] adalah skalar λ dikali vektor yang sama. Keduanya setara dalam toleransi allclose untuk kedua pasangan, sehingga definisi Av = λv terpenuhi. Perbandingan memakai np.allclose, bukan np.array_equal, karena eig bekerja di float64 dan eigenvector keluar sebagai bilangan pecahan.
Interpretasi: Arah yang Tidak Berubah #
eig mengembalikan eigenvector yang sudah dinormalisasi, sehingga angkanya kurang ramah dibaca. Untuk merasakan maksudnya, kita pakai eigenvector yang belum dinormalisasi. Kolom pertama tadi proporsinya (1, 1); mari kita kalikan langsung, lalu bandingkan dengan vektor biasa:
import numpy as np
A = np.array([[4.0, 1.0],
[2.0, 3.0]])
v = np.array([1.0, 1.0])
u = np.array([1.0, 0.0])
print("A @ v =", A @ v)
print("5 * v =", 5 * v)
print("A @ u =", A @ u)Output yang Dihasilkan:
A @ v = [5. 5.]
5 * v = [5. 5.]
A @ u = [4. 2.]Vektor (1, 1) setelah ditransformasi menjadi (5, 5): arahnya masih 45 derajat, panjangnya berlipat lima — persis Av = 5v. Bandingkan dengan u = (1, 0) yang bukan eigenvector: A mengubahnya menjadi (4, 2), dan arahnya ikut berputar. Eigenvector adalah pengecualian yang justru paling berguna, karena perilaku transformasi A bisa dipahami hanya dari apa yang terjadi pada segelintir arah istimewa tersebut.
eigvalsh untuk Matriks Simetris #
Matriks simetris — yang memenuhi S = S.T, dibahas di Transpose Matriks — dijamin memiliki eigenvalue real. NumPy menyediakan fungsi khusus yang memanfaatkan jaminan tersebut: eigvalsh untuk nilai saja dan eigh untuk nilai plus vektor. Keduanya mengembalikan eigenvalue terurut menaik, berbeda dari eig yang urutannya tidak dijamin:
import numpy as np
S = np.array([[2.0, 1.0],
[1.0, 2.0]])
print("eigvalsh :", np.linalg.eigvalsh(S))
vals, vecs = np.linalg.eig(S)
print("eig :", vals)Output yang Dihasilkan:
eigvalsh : [1. 3.]
eig : [3. 1.]Matriks S = [[2, 1], [1, 2]] simetris dan eigenvalue-nya 1 serta 3. Fungsi eigvalsh melaporkannya terurut menaik, [1. 3.]. Fungsi eig pada matriks yang sama mengembalikan [3. 1.] — nilainya benar, tetapi urutannya berbeda. Bila kode mengandalkan urutan (misalnya mengambil λ terbesar sebagai elemen terakhir), gunakan eigvalsh atau eigh.
| Fungsi | Cocok untuk | Mengembalikan | Urutan eigenvalue |
|---|---|---|---|
np.linalg.eig | matriks persegi umum | vals (bisa bertipe complex) dan vecs | tidak dijamin |
np.linalg.eigh | matriks simetris atau Hermitian | vals real dan vecs | menaik |
np.linalg.eigvalsh | matriks simetris atau Hermitian | vals real saja | menaik |