Rank sebuah matriks adalah banyaknya baris (atau kolom) yang bebas linear — seberapa banyak informasi yang benar-benar dibawa matriks tersebut. Baris yang merupakan kelipatan atau gabungan baris lain tidak menambah informasi apa pun, dan rank mengabaikannya. Angka ini menentukan nasib banyak persoalan: apakah matriks bisa di-inverse, apakah sistem persamaan punya solusi tunggal, dan berapa banyak parameter bebas yang layak dipaskan ke data.

Di NumPy, rank dihitung dengan satu panggilan np.linalg.matrix_rank. Bab ini menunjukkan pemakaiannya pada matriks full-rank dan matriks singular, menghubungkan rank dengan keterbalikan matriks, lalu membongkar cara fungsi ini bekerja: menghitung SVD dan menghitung nilai singular yang melewati ambang batas.

Menghitung Rank dengan np.linalg.matrix_rank #

Contoh berikut membandingkan tiga matriks: matriks full-rank yang sudah kita kenal, matriks dengan baris duplikat, dan matriks identitas:

python
import numpy as np

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[1, 2],
              [1, 2]])
C = np.eye(3)
print(np.linalg.matrix_rank(A))
print(np.linalg.matrix_rank(B))
print(np.linalg.matrix_rank(C))

Output yang Dihasilkan:

text
2
1
3
  1. Baris 3-4 (A): baris [1, 2] dan [3, 4] tidak bisa saling diperoleh satu sama lain, sehingga keduanya bebas; rank 2.
  2. Baris 5-6 (B): baris kedua [1, 2] duplikat baris pertama — informasinya cuma satu arah; rank 1.
  3. Baris 7 (C): matriks identitas 3x3 punya tiga baris yang jelas-jelas bebas; rank 3.
  4. Baris 8-10: matrix_rank mengembalikan bilangan bulat sederhana: 2, 1, 3.
MatriksRankAlasan
[[1, 2], [3, 4]]2kedua baris bebas linear
[[1, 2], [1, 2]]1baris kedua duplikat baris pertama
np.eye(3)3setiap baris bebas

Rank, Determinan, dan Keterbalikan #

Untuk matriks persegi n x n berlaku kesetaraan yang penting: matriks bisa di-inverse tepat ketika rank-nya n (full rank). Jika rank di bawah n, matriks menjadi singular — determinannya nol (Chapter Determinant), np.linalg.inv gagal (Chapter Inverse Matriks), dan np.linalg.solve menolak bekerja (Chapter Penyelesaian Sistem Persamaan Linear). Kita buktikan ketiga tanda itu sekaligus pada matriks B yang ber-rank 1:

python
import numpy as np

B = np.array([[1, 2],
              [1, 2]])
print(np.linalg.det(B))
try:
    np.linalg.solve(B, np.array([1.0, 2.0]))
except np.linalg.LinAlgError as e:
    print("LinAlgError:", e)

Output yang Dihasilkan:

text
0.0
LinAlgError: Singular matrix
  1. Baris 5 (print(np.linalg.det(B))): determinant 0.0 — ciri khas matriks yang baris-barisnya bergantung.
  2. Baris 6-9 (blok try/except): solve dibungkus try/except karena kegagalannya sudah pasti; pesan LinAlgError: Singular matrix dicetak agar output tetap deterministik.

Rank dari SVD dan Pengaruh Parameter tol #

Di balik layar, matrix_rank menghitung SVD (Chapter Singular Value Decomposition) lalu menghitung banyaknya nilai singular yang melewati ambang batas. Ambang default-nya S.max() * max(bentuk) * epsilon mesin — rumus yang kita coba sendiri pada bab sebelumnya. Parameter tol bisa kita kirim sendiri bila definisi “kecil” perlu disesuaikan:

python
import numpy as np

A = np.array([[1, 2],
              [3, 4]])
U, S, Vh = np.linalg.svd(A)
tol = S.max() * max(A.shape) * np.finfo(S.dtype).eps
print((S > tol).sum())
D = np.array([[1e-08, 0.0],
              [0.0, 1.0]])
print(np.linalg.matrix_rank(D))
print(np.linalg.matrix_rank(D, tol=1e-04))

Output yang Dihasilkan:

text
2
2
1
  1. Baris 5-6: ambil nilai singular A dan hitung ambang tol dengan rumus yang sama dipakai matrix_rank.
  2. Baris 7 ((S > tol).sum()): hitungan manual menghasilkan 2 — identik dengan matrix_rank(A) pada bab sebelumnya.
  3. Baris 8-9 (D): matriks diagonal dengan entri 1e-08 dan 1.0. Nilai singularnya adalah 1.0 dan 1e-08.
  4. Baris 10: dengan ambang default (~4.4e-16), 1e-08 masih dianggap informasi sungguhan; rank 2.
  5. Baris 11: dengan tol=1e-04, entri 1e-08 dianggap derau; rank 1.

Kapan kita perlu mengatur tol sendiri? Tiga situasi yang umum:

  1. Data buatan atau eksak (rumus, matriks identitas): ambang default sudah tepat.
  2. Hasil pengukuran dengan derau: nilai singular kecil bisa jadi bekas derau sensor; pilih tol di atas dugaan besar derau.
  3. Skala data ekstrem (sangat besar atau sangat kecil): normalisasikan data, atau kirim tol relatif terhadap skala tersebut.

Rank yang rendah berarti sistem sebenarnya punya lebih sedikit persamaan bebas daripada kelihatannya — dan itulah alasan persoalan dunia nyata sering tidak punya solusi eksak sama sekali. Cara menemukan solusi terbaik yang mungkin untuk sistem semacam itu dibahas pada Chapter Least Squares.