Kita sudah memakai +, *, dan \ di section Array dan Matriks untuk pekerjaan sehari-hari. Section Operasi Matematika ini meninjau kembali operasi aritmetika dari sisi yang lebih dalam: apa yang sebenarnya dihitung MATLAB ketika operator berjalan, kapan matriks diproses sebagai kesatuan aljabar dan kapan sebagai kumpulan angka lepas, serta nama fungsi resmi di balik tiap operator. Pemahaman ini menjadi fondasi bagi seluruh chapter berikutnya — aljabar linear, eigenvalue, hingga sistem persamaan. Cakupan chapter ini:
- Rekap dua keluarga operator: matriks penuh vs elemen-per-elemen
A^2vsA.^2— pangkat matriks dan pangkat elemensqrt,exp,logpada matriks, dan pengecualiansqrtm- Campuran skalar dan array
mldividedanmrdivide: nama resmi pembagian kiri dan kanan
Dua Keluarga Operator #
Aturannya: operator tanpa titik (*, ^, \, /) memperlakukan operand sebagai objek aljabar — perkalian mengikuti aturan baris-demi-kolom, pangkat berarti perkalian berulang; operator bertitik (.*, .^, .\, ./) memproses tiap pasangan elemen pada posisi yang sama. Operator + dan - hanya punya satu bentuk karena penjumlahan dan pengurangan memang bekerja elemen-per-elemen. Mekanismenya: tiap operator adalah panggilan fungsi terselubung — baris A * B sebenarnya memanggil fungsi mtimes(A, B), dan A \ b memanggil mldivide(A, b). Tabel berikut memetakan keduanya:
| Operasi | Operator matriks | Fungsi resmi | Operator elemen | Fungsi resmi |
|---|---|---|---|---|
| Penjumlahan | A + B | plus | (sama) | plus |
| Pengurangan | A - B | minus | (sama) | minus |
| Perkalian | A * B | mtimes | A .* B | times |
| Pangkat | A ^ 2 | mpower | A .^ 2 | power |
| Pembagian kanan | x / A | mrdivide | A ./ B | rdivide |
| Pembagian kiri | A \ b | mldivide | A .\ B | ldivide |
Kebiasaan praktisnya: panggilan fungsi resmi berguna saat kita ingin menyimpan operator ke dalam variabel (function handle) atau membaca pesan galat — pesan Error using * menunjuk fungsi mtimes yang menolak ketidakcocokan dimensi.
Pangkat Matriks vs Pangkat Elemen #
Aturannya: A^2 berarti A * A — perkalian matriks terhadap dirinya sendiri; A.^2 menguadratkan tiap elemen secara terpisah. Mekanismenya: mpower mengalikan baris dengan kolom dan menjumlahkan hasilnya (kombinasi linier), sedangkan power tidak pernah mencampur elemen lintas posisi:
A = [1 2; 3 4];
A2 = A ^ 2; % pangkat matriks: A * A
Ad2 = A .^ 2; % pangkat elemen: tiap elemen dikuadratkan
fprintf('A : %d %d / %d %d\n', A(1,:), A(2,:));
fprintf('A^2 : %d %d / %d %d\n', A2(1,:), A2(2,:));
fprintf('A.^2 : %d %d / %d %d\n', Ad2(1,:), Ad2(2,:));Output yang Dihasilkan:
A : 1 2 / 3 4
A^2 : 7 10 / 15 22
A.^2 : 1 4 / 9 16Elemen (1,1) dari A^2 adalah 1×1 + 2×3 = 7 — dua baris ikut berkontribusi; sedangkan (1,1) dari A.^2 adalah 1² = 1. Keduanya hanya kebetulan berada di posisi yang sama, isinya mewakili dua pertanyaan yang berbeda. A^2 menjawab “apa hasil transformasi A yang diterapkan dua kali”, A.^2 menjawab “berapa kuadrat tiap elemen data”.
Fungsi Matematika Bekerja Elemen-per-Elemen #
Aturannya: fungsi elementer MATLAB — sqrt, exp, log, sin, abs — bekerja elemen-per-elemen pada input berapa pun ukurannya; tidak ada sqrt. dengan titik karena versi bertitik tidak diperlukan. Pengecualian penting: sqrtm, expm, logm (akhiran m = matrix) menghitung versi matriksnya — akar kuadrat matriks M adalah matriks dengan M * M = A, bukan matriks berisi akar tiap elemen:
Rb = sqrt([4 9; 16 25]);
fprintf('sqrt elemen : %d %d / %d %d\n', Rb(1,:), Rb(2,:));
Asq = [5 4; 4 5];
M = sqrtm(Asq);
MM = M * M;
fprintf('sqrtm hasil : %d %d / %d %d\n', M(1,:), M(2,:));
fprintf('M*M cek : %d %d / %d %d\n', MM(1,:), MM(2,:));Output yang Dihasilkan:
sqrt elemen : 2 3 / 4 5
sqrtm hasil : 2 1 / 1 2
M*M cek : 5 4 / 4 5sqrt([5 4; 4 5]) menghasilkan [2.236 2; 2 2.236] (akar tiap elemen), sedangkan sqrtm menghasilkan [2 1; 1 2] — matriks yang jika dikalikan dirinya sendiri kembali ke [5 4; 4 5]. Untuk data (mengubah satuan, menerapkan formula fisika ke tiap titik), fungsi elementer adalah pilihan default; fungsi berakhiran m hanya muncul di analisis matriks.
Skalar dan Array Campuran #
Aturannya: skalar boleh dipasangkan dengan array pada operator mana pun — A + 10, 2 * A, 2 .^ A, 100 ./ A semuanya sah. Mekanismenya: skalar adalah array 1×1, dan aturan kompatibilitas dimensi melebarkannya otomatis mengikuti pasangannya (scalar expansion) — skalar “menular” ke seluruh elemen tanpa kita menyalinnya manual:
As = A + 10;
Pw = 2 .^ A;
fprintf('A + 10 : %d %d / %d %d\n', As(1,:), As(2,:));
fprintf('2 .^ A : %d %d / %d %d\n', Pw(1,:), Pw(2,:));Output yang Dihasilkan:
A + 10 : 11 12 / 13 14
2 .^ A : 2 4 / 8 16Perhatikan 2 .^ A: basis datang dari skalar, pangkat datang dari elemen array — 2¹, 2², 2³, 2⁴. Perkalian skalar 2 * A dan 2 .* A memberi hasil sama, tetapi tulis .* hanya saat operand bisa berupa dua array agar kode konsisten.
Pembagian Kiri dan Kanan: Nama Resmi dan Semantik #
Aturannya: A \ b (pembagian kiri, mldivide) menyelesaikan A * x = b — variabel ada di kiri; r / A (pembagian kanan, mrdivide) menyelesaikan y * A = r — variabel ada di kanan. Mekanismenya: MATLAB tidak benar-benar membagi; solver memilih dekomposisi (LU untuk persegi, QR untuk persegi panjang) lalu menyelesaikan sistem persamaan itu secara numerik — pembagian “cerdas”, bukan pembagian aritmetika biasa:
b = [3; 7];
x = mldivide(A, b); % identik dengan x = A \ b
fprintf('A \\ b -> x : %g %g\n', x);
fprintf('cek A*x : %g %g\n', A * x);
r = [7 10];
y = mrdivide(r, A); % identik dengan y = r / A
fprintf('r / A -> y : %g %g\n', y);
fprintf('cek y*A : %g %g\n', y * A);Output yang Dihasilkan:
A \ b -> x : 1 1
cek A*x : 3 7
r / A -> y : 1 2
cek y*A : 7 10Verifikasi dua arah di atas wajib menjadi kebiasaan: kalikan kembali solusi dengan matriks asal dan cocokkan dengan ruas kanan. Pilih operator mengikuti posisi variabel pada persamaan yang kita tulis di buku catatan, bukan posisi data di kode.
Ringkasan #
Operator tanpa titik (*, ^, \, /) memproses matriks sebagai kesatuan aljabar lewat fungsi resmi mtimes, mpower, mldivide, mrdivide; operator bertitik memproses elemen per posisi lewat times, power, ldivide, rdivide. Fungsi elementer seperti sqrt dan exp selalu bekerja elemen-per-elemen, sementara sqrtm menghitung akar matriks sungguhan. Skalar berpasangan dengan array lewat scalar expansion. Berbekal peta operator ini, kita siap naik ke jantung MATLAB: aljabar linear.