Operator aritmetika adalah alat kerja harian di MATLAB — dari menghitung total belanja sampai menyelesaikan sistem persamaan. Keunikan MATLAB terletak pada dua keluarga operator yang tampak mirip tetapi berperilaku berbeda: operator matriks (*, /, ^) yang mengikuti aturan aljabar linear, dan operator elemen (.*, ./, .^) yang mengolah array elemen-per-elemen. Salah memilih keluarga operator menghasilkan jawaban yang salah tanpa pesan galat — alasan utama bab ini wajib dikuasai sejak awal.

Operator Dasar pada Skalar #

Untuk nilai tunggal, MATLAB memakai operator yang sudah kita kenal: penjumlahan +, pengurangan -, perkalian *, pembagian /, dan pangkat ^. Operator + dan - juga berfungsi sebagai unary: -x menegatifkan nilai x. Tabel berikut merangkum perilakunya:

OperatorOperasiContohHasil
+Penjumlahan7 + 310
-Pengurangan / negasi7 - 3, -74, -7
*Perkalian7 * 321
/Pembagian kanan7 / 32.3333
\Pembagian kiri3 \ 72.3333
^Pangkat2 ^ 101024

Semua operasi di atas menghasilkan double karena kedua operand bertipe double. Perhatikan bahwa pembagian kiri 3 \ 7 sama nilainya dengan 7 / 3; operator \ terasa natural ketika kita menyelesaikan persamaan matriks Ax = b dengan A\b — kebiasaan yang kita pakai pada Section Matematika.

Operasi Matriks vs Operasi Elemen #

Mari kita angkat dua matriks uji:

matlab
A = [1 2; 3 4];
B = [5 6; 7 8];

Perkalian matriks A * B mengikuti aturan aljabar linear: elemen baris i dikalikan elemen kolom j lalu dijumlahkan, dan jumlah kolom A harus sama dengan jumlah baris B. Sebaliknya, A .* B mengalikan elemen di posisi yang sama — operator titik (dot) selalu berarti elemen-per-elemen:

matlab
C = A * B;      % perkalian matriks
D = A .* B;     % perkalian elemen

fprintf('A*B  baris 1: %d %d\n', C(1,1), C(1,2));
fprintf('A*B  baris 2: %d %d\n', C(2,1), C(2,2));
fprintf('A.*B baris 1: %d %d\n', D(1,1), D(1,2));
fprintf('A.*B baris 2: %d %d\n', D(2,1), D(2,2));

Output yang Dihasilkan:

text
A*B  baris 1: 19 22
A*B  baris 2: 43 50
A.*B baris 1: 5 12
A.*B baris 2: 21 32

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (C = A * B): C(1,1) = 1×5 + 2×7 = 19; C(1,2) = 1×6 + 2×8 = 22. Setiap elemen hasil adalah jumlah dua hasil kali — definisi perkalian matriks.
  2. Baris 2 (D = A .* B): D(1,1) = 1×5 = 5; D(1,2) = 2×6 = 12. Setiap elemen dikalikan pasangannya sendiri.
  3. Baris 4-7 (fprintf): pengindeksan C(1,1) membaca elemen baris 1 kolom 1 sehingga kita bisa mencetak hasil baris per baris secara terkendali.

Perbedaan konsekuensinya nyata: A*B mengubah makna matematis (transformasi berurutan), A.*B hanya mengombinasikan data posisi demi posisi. Keluarga operator titik beranggotakan lengkap: .*, ./, dan .^ — misalnya [8 4] ./ [2 4] menghasilkan [4 1], pembagian elemen demi elemen. Saat mengolah data — sensor, tabel, deret waktu — yang kita maksud hampir selalu operator titik.

Aturan dimensi juga berbeda. Ekspresi A * [1; 2] sah karena matriks 2×2 dikalikan vektor kolom 2×1, tetapi A * [1 2] memicu galat: vektor baris berukuran 1×2 tidak cocok. Pesan galat klasiknya:

text
Error using *
Inner matrix dimensions must agree.

Galat ini muncul ketika jumlah kolom operand kiri tidak sama dengan jumlah baris operand kanan. Operator elemen justru lebih toleran: A .* 2 sah karena tiap elemen dikalikan skalar yang sama (perilaku scalar expansion).

Pangkat dan Transpose: Matriks vs Elemen #

Pola yang sama berlaku untuk pangkat. A^2 berarti A*A — perkalian matriks berulang, sah hanya untuk matriks persegi. Adapun A.^2 menguadratkan setiap elemen:

matlab
E = A ^ 2;      % A dikalikan A (matriks)
F = A .^ 2;     % tiap elemen dikuadratkan

fprintf('A^2  baris 1: %d %d\n', E(1,1), E(1,2));
fprintf('A.^2 baris 1: %d %d\n', F(1,1), F(1,2));

Output yang Dihasilkan:

text
A^2  baris 1: 7 10
A.^2 baris 1: 1 4

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (A^2): A^2 = A*A, sehingga E(1,1) = 1×1 + 2×3 = 7 dan E(1,2) = 1×2 + 2×4 = 10.
  2. Baris 2 (A.^2): tiap elemen dikuadratkan sendiri: 1²=1, 2²=4, 3²=9, 16 untuk elemen 4.

Keluarga transpose punya pasangan serupa: operator ' menghasilkan transpose konjugat (baris jadi kolom, bilangan kompleks diubah ke konjugatnya), sedangkan .' menghasilkan transpose biasa tanpa konjugat. Untuk data real keduanya identik; perbedaannya baru terasa pada bilangan kompleks:

matlab
z = 1 + 2i;
fprintf('imag z = %g, imag z'' = %g, imag z.'' = %g\n', ...
        imag(z), imag(z'), imag(z.'));

Output yang Dihasilkan:

text
imag z = 2, imag z' = -2, imag z.' = 2

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (z = 1 + 2i): bilangan kompleks dengan bagian imajiner 2.
  2. Baris 2 (z'): transpose konjugat membalik tanda bagian imajiner menjadi -2.
  3. Baris 2 (z.'): transpose biasa mempertahankan +2 — inilah operator yang tepat untuk sekadar menukar baris-kolom data kompleks.

Tanda '' di dalam teks format fprintf hanyalah cara menulis satu tanda kutip tunggal di dalam char yang juga dibatasi kutip tunggal.

Berkas contoh.m pada bagian bawah halaman menguji seluruh operator di atas: operasi skalar, matriks vs elemen, pangkat vs pangkat elemen, serta kedua jenis transpose.

Ringkasan #

MATLAB menyediakan dua keluarga operator aritmetika: operator matriks (*, /, \, ^, ') untuk aljabar linear dan operator titik (.*, ./, .\, .^, .') untuk komputasi elemen-per-elemen. Pemilihan keluarga yang tepat menentukan kebenaran hasil — khususnya pada data numerik yang hampir selalu menuntut operator elemen. Dengan fondasi ini, kita siap membaca dan menulis ekspresi MATLAB yang lebih panjang.