Dua operasi paling sering muncul di rumus aljabar linear adalah transpose (menukar baris dan kolom) dan inverse (membalik efek matriks). MATLAB menyediakan keduanya lewat operator ' dan fungsi inv() — tetapi keduanya punya jebakan: operator ' diam-diam mengkonjugasi bilangan kompleks, dan inv() sering dipakai untuk pekerjaan yang seharusnya diserahkan ke A\b. Chapter ini membedah keduanya sampai ke mekanismenya, lalu memperkenalkan pinv sebagai penyelamat ketika matriks tidak punya inverse sama sekali. Cakupan chapter ini:

  • ' (transpose konjugat) vs .' (transpose biasa) pada data kompleks
  • inv(A) dan verifikasi A*inv(A) = I
  • Angka kondisi (cond) sebagai alasan menghindari inverse
  • pinv untuk matriks singular dan matriks persegi panjang

Dua Jenis Transpose #

Aturannya: operator ' menghasilkan transpose konjugat — baris menjadi kolom sekaligus tanda bagian imajiner dibalik; operator .' menghasilkan transpose biasa yang hanya menukar orientasi. Untuk data real keduanya identik; untuk data kompleks hasilnya berbeda. Mekanismenya: operator ' sebenarnya memanggil fungsi ctranspose (conjugate transpose), sedangkan .' memanggil fungsi transpose:

matlab
z = [1+2i 3-4i];
fprintf('imag(z'')  : %d %d\n', imag(z'));
fprintf('imag(z.'') : %d %d\n', imag(z.'));

Output yang Dihasilkan:

text
imag(z')  : -2 4
imag(z.') : 2 -4

Bagian imajiner z adalah 2 dan −4. Setelah z', tandanya dibalik menjadi −2 dan 4; setelah z.', nilainya utuh. Kapan ctranspose justru yang diinginkan? Saat menghitung inner product kompleks (z' * z) atau bekerja dengan matriks Hermitian — matriks yang sama dengan transpose konjugatnya sendiri:

matlab
H = [2 1+1i; 1-1i 3];
fprintf('H Hermitian: %d\n', isequal(H, H'));

Output yang Dihasilkan:

text
H Hermitian: 1

Matriks H memenuhi H = H' — sifat Hermitian yang muncul di mekanika kuantum dan pengolahan sinyal, dan yang membuat eig mengembalikan eigenvalue real (kita lihat di chapter Eigenvalues). Aturan praktis untuk data: gunakan .' ketika yang dimaksud murni menata ulang tabel atau data pengukuran, karena .' tidak mengubah isi angka sekecil apa pun.

Inverse: Matriks Pembalik #

Aturannya: inv(A) mengembalikan matriks Ai sehingga A * Ai = Ai * A = I — identitas; inverse hanya ada untuk matriks persegi dengan det(A) ≠ 0. Mekanismenya: MATLAB tidak memakai rumus adjoin (yang numerik berbahaya), melainkan faktorisasi LU lalu membalik dua segitiga — karena itu hasil elemen A*inv(A) mendekati identitas hanya sampai orde 1e-16, tidak persis:

matlab
A  = [1 2; 3 4];
Ai = inv(A);
fprintf('inv(A)     : %g %g / %g %g\n', Ai(1,:), Ai(2,:));
fprintf('A*inv(A)~I : %d\n', all(all(abs(A*Ai - eye(2)) < 1e-12)));

Output yang Dihasilkan:

text
inv(A)     : -2 1 / 1.5 -0.5
A*inv(A)~I : 1

Perhatikan pola verifikasinya: karena A*inv(A) tidak jatuh tepat pada eye(2), kita mengecek jaraknya ke identitas dengan toleransi 1e-12, bukan membandingkan kesamaan langsung. Nilai 1 (logical true) menandakan verifikasi lolos.

Kapan Inverse Sebaiknya Dihindari #

Masalah dengan inv(A)*b bukan pada hasil rata-ratanya, melainkan pada biaya dan kerapuhannya: menghitung inverse penuh melakukan kerja yang jauh lebih banyak daripada yang dibutuhkan untuk satu ruas kanan b, dan pembulatan di tiap langkah menumpuk. Ketika matriks ill-conditioned — angka kondisi cond(A) besar — solusi jadi sangat sensitif, dengan atau tanpa inverse:

matlab
D  = diag([1 1e-8]);
fprintf('cond(D)    : %g\n', cond(D));
x  = D \ [1; 1e-8];
xp = D \ [1; 2e-8];
fprintf('x  = D\\b   : %g %g\n', x);
fprintf('xp = D\\bp  : %g %g\n', xp);

Output yang Dihasilkan:

text
cond(D)    : 1e+08
x  = D\b   : 1 1
xp = D\bp  : 1 2

Angka kondisi 1e8 berarti galat relatif input dapat membesar sampai 10⁸ kali di output — dan itulah yang terjadi: ruas kanan berubah hanya 1e-8 (komponen kedua dari 1e-8 menjadi 2e-8, nyaris tak terlihat dibanding total ‖b‖ ≈ 1), tetapi komponen kedua solusi melompat dari 1 menjadi 2. Tidak ada operator yang bisa menyelamatkan matriks semacam ini; yang bisa kita lakukan adalah tahu kondisinya lewat cond lalu mengumpulkan data atau merumuskan ulang masalah.

KriteriaA\b (mldivide)inv(A)*b
Kecepatan untuk satu bsatu faktorisasifaktorisasi + inverse penuh
Stabilitas numeriklebih baikpembulatan menumpuk
Matriks persegi panjangdidukung (least squares)galat (bukan persegi)
Matriks singularperingatan + solusi terbaikgalat / tak berguna
Kapan dipilihdefault untuk A*x = bsaat inv(A) memang dibutuhkan eksplisit

pinv: Pseudo-Inverse untuk Matriks Sulit #

Aturannya: pinv(A) menghitung Moore-Penrose pseudo-inverse — pasangan umum inverse yang ada untuk semua matriks, termasuk yang singular (det = 0) dan yang persegi panjang. Mekanismenya: pinv memfaktorkan A = U*S*V' lewat SVD, membalik hanya nilai singular di atas toleransi galat, lalu menyusun ulang — komponen yang hilang (nilai singular nol) dibiarkan mati, bukan dibagi nol. Pseudo-inverse memenuhi A*pinv(A)*A = A (bukan = I):

matlab
As = [1 2; 2 4];          % singular: kolom kedua = 2 x kolom pertama
Ap = pinv(As);
fprintf('pinv(As)   : %g %g / %g %g\n', Ap(1,:), Ap(2,:));
fprintf('Ap*b       : %g %g\n', Ap * [3; 6]);
fprintf('As*Ap*As~As: %d\n', all(all(abs(As*Ap*As - As) < 1e-12)));

Output yang Dihasilkan:

text
pinv(As)   : 0.04 0.08 / 0.08 0.16
Ap*b       : 0.6 1.2
As*Ap*As~As: 1

Matriks As tidak punya inverse — kolomnya sejajar (rank 1). Namun pinv(As) tetap terdefinisi dan Ap*b memberi solusi least squares bernorma terkecil [0.6; 1.2]. Untuk matriks persegi panjang (misalnya pinv dari matriks 3×2), pinv mengembalikan matriks 2×3 — pasangan solusi least-squares sistem over-determined yang kita bahas di chapter Sistem Persamaan Linear.

Ringkasan #

Operator ' mengkonjugasi data kompleks sedangkan .' murni menukar orientasi — pilih .' untuk menata data. inv(A) menghitung matriks pembalik dengan verifikasi toleransi A*inv(A) ≈ I, tetapi untuk menyelesaikan A*x = b operator A\b lebih cepat dan stabil, apalagi saat cond(A) besar. pinv(A) melengkapi keduanya: pseudo-inverse Moore-Penrose yang tetap hidup untuk matriks singular maupun persegi panjang. Dua sifat kuantitatif matriks yang berkali-kali muncul di chapter ini — det dan rank — kita bedah penuh di chapter berikutnya.