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 menghitung tiap elemen hasil menurut aturan baris demi kolom. Elemen pada baris ke- dan kolom ke- dari hasil merupakan jumlah hasil kali elemen baris dari dengan elemen kolom dari , yaitu
Aturan tersebut mensyaratkan banyak kolom sama dengan banyak baris . Matriks berukuran hanya dapat dikalikan dengan matriks berukuran , dan hasilnya berukuran . 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- dari hasil adalah kombinasi linear kolom-kolom dengan bobot yang diambil dari kolom ke- dari ,
sehingga matriks dapat dibaca sebagai daftar bobot yang menata kombinasi kolom-kolom . 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.
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))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
4Ketiga keluaran yang sama menegaskan pandangan kolom tersebut. Perkalian penuh menghasilkan matriks berukuran , dan kolom pertamanya adalah . Mengalikan dengan kolom pertama menghasilkan kolom yang sama, dan kombinasi linear dengan bobot [3 2 1] dari kolom pertama 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 dengan matriks yang ukuran dalamnya 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)
endoperator *: 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 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 berubah menjadi dan elemen pindah ke posisi . Transpos juga bekerja sama dengan perkalian melalui identitas 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.
A = [1 0 2; -1 3 1];
size(A)
size(A')
disp(A')ans =
2 3
ans =
3 2
1 -1
0 3
2 1Ukuran A adalah dan ukuran A' adalah , 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 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 dengan 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.
% 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));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.001Matriks berukuran dengan determinan sepuluh memiliki invers bersih, dan hasil kali tampil sebagai identitas pada tampilan lima angka penting. Matriks yang determinannya hanya 0.001 memiliki kondisi sekitar , dan patokan kasarnya adalah 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)*buntuk menyelesaikan sistem linear. Membentuk invers penuh melakukan kerja yang jauh lebih banyak daripada yang dibutuhkan, dan hasilnya kurang presisi dibandingkan penyelesaian langsung. Operator backslashA\bmenyelesaikan 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. Periksacond(A)ketika data berasal dari pengukuran yang membawa ketidakpastian. - Menganggap
A*Bsama denganB*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 dengan menghasilkan , 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, sedangkanA.'hanya menukar baris dan kolom. inv(A)terdefinisi untuk matriks persegi nonsingular, dancond(A)memperkirakan sensitivitas hasil terhadap error pembulatan sebelum invers dihitung.- Perkalian matriks tidak komutatif, sehingga urutan operan merupakan bagian dari makna perhitungan.
Referensi#
- mtimes, * — MathWorks — Rujukan resmi perkalian matriks beserta syarat dimensinya.
- inv — MathWorks — Rujukan invers matriks lengkap dengan catatan kapan invers sebaiknya tidak dibentuk.
- cond — MathWorks — Rujukan bilangan kondisi untuk beberapa pilihan norma.
- transpose, .’ — MathWorks — Rujukan transpos tanpa konjugasi elemen kompleks.