Operasi matriks

Melakukan perkalian matriks, transposisi, dan invers beserta syarat dimensinya.

Daftar isi

Perkalian matriks, transposisi, dan invers adalah tiga operasi yang mengubah MATLAB dari kalkulator array menjadi mesin aljabar linear. Topik ini membahas makna perkalian matriks sebagai kombinasi linear kolom serta syarat dimensi yang mengikat tiap operasi. Transposisi dibahas beserta perubahan bentuk matriksnya, kemudian invers untuk matriks persegi nonsingular lengkap dengan pemeriksaan kondisi melalui cond. Setelah membaca topik ini, ketiga operasi dapat digunakan secara sengaja dengan dimensi yang terencana, dan pesan error dimensi dapat dibaca sebagai laporan ukuran operan yang jelas.

Perkalian matriks sebagai kombinasi linear kolom#

Perkalian matriks ABA B menghitung tiap elemen hasil menurut aturan baris demi kolom. Elemen pada baris ke-ii dan kolom ke-jj dari hasil merupakan jumlah hasil kali elemen baris ii dari AA dengan elemen kolom jj dari BB, yaitu

cij=ai1b1j+ai2b2j+⋯+aikbkj=∑p=1kaip bpj c_{ij} = a_{i1} b_{1j} + a_{i2} b_{2j} + \cdots + a_{ik} b_{kj} = \sum_{p=1}^{k} a_{ip}\, b_{pj}

Aturan tersebut mensyaratkan banyak kolom AA sama dengan banyak baris BB. Matriks berukuran (n×k)(n \times k) hanya dapat dikalikan dengan matriks berukuran (k×m)(k \times m), dan hasilnya berukuran (n×m)(n \times m). Dua ukuran yang bertemu di tengah tanda kali itulah yang harus cocok, sedangkan dua ukuran di tepi menentukan bentuk hasilnya.

Rumus penjumlahan di atas menyembunyikan satu makna yang lebih penting daripada mekanikanya. Kolom ke-jj dari hasil adalah kombinasi linear kolom-kolom AA dengan bobot yang diambil dari kolom ke-jj dari BB,

A bj=b1j a1+b2j a2+⋯+bkj ak A\,\mathbf{b}_j = b_{1j}\,\mathbf{a}_1 + b_{2j}\,\mathbf{a}_2 + \cdots + b_{kj}\,\mathbf{a}_k

sehingga matriks dapat dibaca sebagai daftar bobot yang menata kombinasi kolom-kolom AA. Pandangan kolom inilah yang membuat perkalian matriks muncul di banyak rumus teknik, misalnya pada perubahan basis koordinat dan sistem persamaan. Contoh berikut membandingkan perkalian penuh dengan kombinasi linear kolomnya secara langsung.

matlab Perkalian matriks dan kombinasi linear kolomnya
A = [1 0 2; -1 3 1];   % 2 x 3
B = [3 1; 2 1; 1 0];   % 3 x 2
C = A * B
disp('kolom pertama C:')
disp(C(:, 1))
disp('A dikali kolom pertama B:')
disp(A * B(:, 1))
disp('kombinasi linear kolom A dengan bobot [3 2 1]:')
disp(3*A(:, 1) + 2*A(:, 2) + 1*A(:, 3))
text Keluaran
C =

   5   1
   4   2

kolom pertama C:
   5
   4
A dikali kolom pertama B:
   5
   4
kombinasi linear kolom A dengan bobot [3 2 1]:
   5
   4

Ketiga keluaran yang sama menegaskan pandangan kolom tersebut. Perkalian penuh menghasilkan matriks CC berukuran 2×22 \times 2, dan kolom pertamanya adalah [54]\begin{bmatrix} 5 \\ 4 \end{bmatrix}. Mengalikan AA dengan kolom pertama BB menghasilkan kolom yang sama, dan kombinasi linear 3 a1+2 a2+1 a33\,\mathbf{a}_1 + 2\,\mathbf{a}_2 + 1\,\mathbf{a}_3 dengan bobot [3 2 1] dari kolom pertama BB menghasilkan kolom yang sama pula. Dua bentuk terakhir tidak perlu dihitung dalam praktik karena operator * sudah mengerjakan semuanya sekaligus, tetapi keduanya menjelaskan isi yang sebenarnya dihitung oleh operator itu.

Syarat dimensi dan pesan errornya#

Ketika ukuran dalam tidak cocok, operator * menolak perhitungan sebelum satu elemen pun dihitung, dan penolakan itu menghentikan skrip pada saat itu juga. Skrip yang perlu tetap berjalan dapat membungkus pernyataan berisiko dengan try dan catch, lalu mencetak pesan errornya melalui disp(e.message) agar penyebabnya terbaca tanpa menghentikan keseluruhan alur. Contoh berikut mengalikan matriks (2×3)(2 \times 3) dengan matriks (2×2)(2 \times 2) yang ukuran dalamnya tidak cocok.

matlab Perkalian dengan dimensi yang tidak cocok
A = [1 0 2; -1 3 1];   % 2 x 3
D = [1 2; 3 4];        % 2 x 2
try
  A * D
catch e
  disp(e.message)
end
text Keluaran
operator *: nonconformant arguments (op1 is 2x3, op2 is 2x2)

Pesan tersebut melaporkan ukuran kedua operan secara lengkap, sehingga ketidakcocokannya dapat diperiksa tanpa membuka ulang definisi matriks. Banyak kolom A adalah tiga sedangkan banyak baris D adalah dua, sehingga hasil kali tidak terdefinisi. Perbaikannya salah satu dari dua arah, yaitu mengganti D dengan matriks berukuran (3×m)(3 \times m) atau menukar urutan menjadi D * A apabila makna perhitungannya memang mengizinkan.

Transposisi matriks#

Operator petik A' menukar baris menjadi kolom sekaligus kolom menjadi baris, sehingga matriks berukuran (n×k)(n \times k) berubah menjadi (k×n)(k \times n) dan elemen (i,j)(i, j) pindah ke posisi (j,i)(j, i). Transpos juga bekerja sama dengan perkalian melalui identitas (AB)′=B′A′(A B)' = B' A' yang membalik urutan operan. Identitas ini menjadi alat utama menyusun ulang rumus ketika bentuk akhir yang dibutuhkan berupa vektor baris alih-alih vektor kolom. Satu pengecualian perlu dicatat, yaitu A' sebenarnya menjalankan transpos konjugat yang juga membalik tanda bagian imajiner elemen kompleks, sedangkan A.' menjalankan transpos biasa tanpa mengubah nilai elemen. Keduanya identik pada data riil dan baru berbeda ketika data kompleks masuk ke perhitungan.

matlab Ukuran dan isi transpos
A = [1 0 2; -1 3 1];
size(A)
size(A')
disp(A')
text Keluaran
ans =

   2   3

ans =

   3   2

   1  -1
   0   3
   2   1

Ukuran A adalah (2×3)(2 \times 3) dan ukuran A' adalah (3×2)(3 \times 2), sesuai pertukaran baris dan kolom. Isi A' memperlihatkan baris pertama A, yaitu [1 0 2], kini menjadi kolom pertama. Transpos sering digunakan untuk menyiapkan data, misalnya mengubah vektor baris hasil linspace menjadi vektor kolom, atau membentuk matriks simetrik melalui penjumlahan A+A′A + A' yang nilainya sama dengan transposnya sendiri. Kebiasaan penulisan yang teliti memilih .' ketika maksudnya sekadar menukar orientasi, karena pilihan itu tetap benar saat data kompleks muncul kemudian.

Invers matriks persegi dan kondisinya#

Invers hanya terdefinisi untuk matriks persegi yang nonsingular, yaitu matriks dengan determinan tidak nol, dan memenuhi A A−1=IA\,A^{-1} = I dengan II matriks identitas. Fungsi inv(A) menghitung invers tersebut secara langsung. Kualitas invers tidak hanya ditentukan oleh keberadaan invers, tetapi juga oleh bilangan kondisi (condition number) yang dilaporkan cond(A), yaitu perbandingan nilai singular terbesar terhadap terkecil. Kondisi yang besar menandakan matriks nyaris tunggal sehingga error pembulatan pada data masuk diperbesar pada hasil keluar.

matlab invers_matriks.m
% invers_matriks.m: menghitung invers matriks persegi dan memeriksa kondisinya

M = [4 7; 2 6];
Minv = inv(M);
disp('invers M:')
disp(Minv)
disp('M * inv(M):')
disp(M * Minv)

S = [1 2; 2 4.001];
fprintf('kondisi M    : %.3f\n', cond(M));
fprintf('kondisi S    : %.3e\n', cond(S));
fprintf('determinan S : %.3f\n', det(S));
text Keluaran
invers M:
   0.6000  -0.7000
  -0.2000   0.4000
M * inv(M):
   1   0
   0   1
kondisi M    : 10.404
kondisi S    : 2.501e+04
determinan S : 0.001

Matriks MM berukuran 2×22 \times 2 dengan determinan sepuluh memiliki invers bersih, dan hasil kali M⋅M−1M \cdot M^{-1} tampil sebagai identitas pada tampilan lima angka penting. Matriks SS yang determinannya hanya 0.001 memiliki kondisi sekitar 2,5×1042{,}5 \times 10^4, dan patokan kasarnya adalah log⁡10\log_{10} kondisi yang memperkirakan banyak digit presisi yang rawan hilang, yaitu sekitar empat digit untuk matriks ini. Ketika determinan tepat nol, inv tidak menghasilkan jawaban yang berguna dan justru mengeluarkan peringatan bahwa matriks tunggal terhadap presisi mesin, sehingga pemeriksaan cond sebelum menghitung invers menjadi kebiasaan yang murah.

Kesalahan umum#

  • Menghitung inv(A)*b untuk menyelesaikan sistem linear. Membentuk invers penuh melakukan kerja yang jauh lebih banyak daripada yang dibutuhkan, dan hasilnya kurang presisi dibandingkan penyelesaian langsung. Operator backslash A\b menyelesaikan sistem tanpa membentuk invers eksplisit dan menjadi idiom baku pada MATLAB.
  • Memercayai invers tanpa memeriksa cond. Determinan yang tidak nol hanya menandakan invers secara teori, sedangkan kondisi yang besar membuat hasil numeriknya tidak stabil. Periksa cond(A) ketika data berasal dari pengukuran yang membawa ketidakpastian.
  • Menganggap A*B sama dengan B*A. Perkalian matriks tidak komutatif. Kedua bentuk bahkan tidak selalu sama-sama terdefinisi, dan ketika keduanya terdefinisi, hasilnya umumnya berbeda, sehingga urutan operan selalu diperiksa ulang.

Ringkasan#

  • Perkalian (n×k)(n \times k) dengan (k×m)(k \times m) menghasilkan (n×m)(n \times m), dan tiap kolom hasil adalah kombinasi linear kolom-kolom operan pertama dengan bobot dari kolom operan kedua.
  • Operator petik A' menukar baris dan kolom sekaligus mengonjugasi elemen kompleks, sedangkan A.' hanya menukar baris dan kolom.
  • inv(A) terdefinisi untuk matriks persegi nonsingular, dan cond(A) memperkirakan sensitivitas hasil terhadap error pembulatan sebelum invers dihitung.
  • Perkalian matriks tidak komutatif, sehingga urutan operan merupakan bagian dari makna perhitungan.

Referensi#