MATLAB lahir sebagai kepanjangan dari MATrix LABoratory, dan aljabar linear tetap menjadi jantung bahasanya. Dua operator paling penting di bab ini adalah perkalian matriks * — dengan aturan inner dimension yang ketat — dan pembagian kiri A\b yang menyelesaikan sistem persamaan linier dalam satu ketikan keyboard. Kita juga akan memakai matriks sebagai transformasi linier (rotasi), membedakan dua jenis transpose, dan mengukur panjang vektor dengan norm. Seluruh contoh menghasilkan angka bulat atau nilai terverifikasi sehingga mudah dicek ulang.

Perkalian Matriks dan Aturan Inner Dimension #

Aturan perkalian matriks: matriks (m×n) hanya dapat dikalikan matriks (n×p), dan hasilnya berukuran m×p. Jumlah kolom operand kiri harus sama dengan jumlah baris operand kanan — keduanya disebut inner dimension. Mekanismenya: setiap elemen hasil c(i,j) adalah jumlah hasil kali baris i dari A dengan kolom j dari B — baris dikombinasikan dengan kolom, bukan elemen dengan elemen.

matlab
A = [2 3; 1 -1];
c = A * [3; 2];                     % (2x2) * (2x1) = 2x1
fprintf('A * [3; 2] = [%d; %d]\n', c);

Output yang Dihasilkan:

text
A * [3; 2] = [12; 1]

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (A * [3; 2]): inner dimension 2 = 2, sah. c(1) = 2×3 + 3×2 = 12 dan c(2) = 1×3 + (−1)×2 = 1 — tiap elemen hasil adalah kombinasi linier dari elemen vektor.

Tabel berikut merangkum kombinasi ukuran yang sah dan yang tidak:

OperasiUkuran AUkuran BUkuran hasilStatus
A * B2×33×42×4sah
A * v2×22×12×1sah
v * A1×22×21×2sah
A * w2×21×2—galat (inner 2 vs 1)

Bila inner dimension dilanggar, MATLAB menampilkan pesan galat klasik berikut:

matlab
A * [3 2]    % vektor baris 1x2: kolom A (2) tidak sama dengan baris (1)
text
Error using *
Inner matrix dimensions must agree.

Matriks × Vektor sebagai Transformasi Linier #

Mengalikan matriks dengan vektor berarti menerapkan transformasi linier terhadap vektor tersebut. Contoh paling intuitif adalah rotasi: matriks R = [0 -1; 1 0] memutar setiap titik bidang sejauh 90 derajat berlawanan arah jarum jam. Properti rotasi yang bisa kita buktikan secara numerik: panjang vektor tidak berubah, dan panjang diukur dengan fungsi norm (norm Euclid, yaitu akar dari jumlah kuadrat elemen):

matlab
R = [0 -1; 1 0];
v = [3; 1];
w = R * v;

fprintf('R * v = [%d; %d]  (v diputar 90 derajat)\n', w);
fprintf('|v| = %g, |w| = %g  (panjang tidak berubah)\n', norm(v), norm(w));

Output yang Dihasilkan:

text
R * v = [-1; 3]  (v diputar 90 derajat)
|v| = 3.16228, |w| = 3.16228  (panjang tidak berubah)

Mari kita bedah baris-baris kode di atas:

  1. Baris 3 (w = R * v): w(1) = 0×3 + (−1)×1 = −1 dan w(2) = 1×3 + 0×1 = 3 — titik (3, 1) berpindah ke (−1, 3), tepat posisi (3, 1) setelah diputar 90 derajat.
  2. Baris 6 (norm(v)): norm menghitung panjang vektor — √(3² + 1²) = √10 ≈ 3.16228. Nilai norm(w) sama persis karena rotasi memang tidak mengubah jarak titik dari titik asal.

Pembagian Kiri A\b: Menyelesaikan Sistem Persamaan #

Masalah nyata: menyelesaikan sistem dua persamaan dengan dua variabel.

text
2x + 3y = 12
 x −  y = 1

Aturan operator \ (pembagian kiri): A\b menghasilkan x yang memenuhi A*x = b. Operator ini memanggil fungsi mldivide (matrix left divide) — jauh lebih praktis dan numerik lebih stabil daripada menghitung inv(A)*b secara manual, karena MATLAB memilih algoritma dekomposisi yang sesuai untuk A:

matlab
A = [2 3; 1 -1];       % koefisien
b = [12; 1];           % ruas kanan
x = A \ b;             % selesaikan A*x = b

fprintf('x = A \\ b  ->  x1 = %g, x2 = %g\n', x(1), x(2));
fprintf('cek A*x     ->  [%d; %d]\n', A * x);

Output yang Dihasilkan:

text
x = A \ b  ->  x1 = 3, x2 = 2
cek A*x     ->  [12; 1]

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (A = [2 3; 1 -1]): tiap baris A menyimpan koefisien satu persamaan; urutan kolom mengikuti urutan variabel (x, y).
  2. Baris 3 (x = A \ b): solusinya x = 3, y = 2 — substitusi membuktikannya: 2×3 + 3×2 = 12 dan 3 − 2 = 1.
  3. Baris 5 (A * x): verifikasi wajib — kalikan kembali solusi dengan A; hasil yang kembali ke b menandakan perhitungan benar.

Pembagian kanan r/A adalah cermin dari A\b: operator / (fungsi mrdivide) menyelesaikan persamaan dengan variabel di ruas kiri, y*A = r:

matlab
r = [8 7];
y = r / A;

fprintf('y = r / A   ->  y1 = %g, y2 = %g\n', y(1), y(2));
fprintf('cek y*A     ->  [%d %d]\n', y * A);

Output yang Dihasilkan:

text
y = r / A   ->  y1 = 3, y2 = 2
cek y*A     ->  [8 7]

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (y = r / A): solusi y = [3 2] memenuhi y*A = (3×2+2×1, 3×3+2×(−1)) = (8, 7) — sesuai ruas kanan r. Sistem yang sama bisa dirumuskan dari kedua sisi; pilih operator yang mengikuti posisi variabel.
  2. Baris 4 (y * A): verifikasi cermin dari kasus A\b — hasil kembali ke r artinya solusi benar.

Kedua operator ini juga menangani matriks non-persegi (solusi kuadrat terkecil) dan sistem besar — dibahas tuntas pada Chapter Sistem Persamaan Linear di Section Operasi Matematika.

Transpose: Konjugat dan Non-Konjugat #

Aturan transpose: operator ' menghasilkan transpose konjugat (baris menjadi kolom dan bagian imajiner kompleks diubah tandanya), sedangkan .' menghasilkan transpose biasa tanpa mengubah bagian imajiner. Untuk data real keduanya identik; untuk data kompleks pilihan operator menentukan hasil:

matlab
M = [1 2 3; 4 5 6];
Mt = M .';

fprintf('M  (2x3) : %d %d %d\n', M(1,:));
fprintf('          %d %d %d\n', M(2,:));
fprintf('Mt (3x2) : %d %d\n', Mt(1,:));
fprintf('          %d %d\n', Mt(2,:));
fprintf('          %d %d\n', Mt(3,:));

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

Output yang Dihasilkan:

text
M  (2x3) : 1 2 3
          4 5 6
Mt (3x2) : 1 4
          2 5
          3 6
imag(z')  : -2 4  (konjugat: tanda dibalik)
imag(z.') : 2 -4  (non-konjugat: tanda tetap)

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (Mt = M .'): matriks 2×3 menjadi 3×2 — baris pertama M menjadi kolom pertama Mt.
  2. Baris 9 (z'): transpose konjugat membalik tanda bagian imajiner: 2 → −2 dan −4 → 4.
  3. Baris 10 (z .'): transpose biasa hanya menukar orientasi; bagian imajiner 2 dan −4 tetap.

Aturan praktisnya: untuk sekadar menukar baris-kolom data (termasuk data kompleks) gunakan .'; operator ' adalah operasi matematis khusus untuk inner product dan matriks Hermitian.

Ringkasan #

Perkalian matriks * tunduk pada aturan inner dimension dan menghasilkan kombinasi linier — dasar bagi transformasi seperti rotasi. Operator A\b (mldivide) dan r/A (mrdivide) menyelesaikan sistem persamaan dari dua sisi, dengan verifikasi A*x atau y*A sebagai kebiasaan wajib. Transpose ' dan .' berbeda hanya pada data kompleks, dan norm mengukur panjang vektor. Berkas contoh.m pada bagian bawah halaman menjalankan seluruh contoh bab ini, termasuk sistem 2×2 dengan solusi bulat.