Setiap keputusan program dimulai dari satu perbandingan: apakah nilai ini melewati ambang batas? MATLAB menyediakan enam operator pembanding yang bekerja elemen-per-elemen pada array — bukan hanya pada dua angka. Perilaku ini, ditambah jebakan presisi bilangan titik mengambang, membuat bab perbandingan ini wajib dibaca sebelum kita menulis kondisi apa pun yang serius.

Enam Operator Pembanding #

MATLAB memakai notasi yang sebagian mirip bahasa lain, dengan satu pengecualian terkenal: operator “tidak sama dengan” ditulis ~=, bukan !=. Tabel berikut merangkum keenam operator:

OperatorArtiContohHasil
==sama dengan5 == 5true
~=tidak sama dengan5 ~= 3true
<kurang dari3 < 2false
>lebih dari7 > 3true
<=kurang dari atau sama4 <= 4true
>=lebih dari atau sama3 >= 4false

Semua hasil perbandingan berkelas logical: true tersimpan sebagai 1 dan false sebagai 0. Karena itu, class(5 == 5) menghasilkan logical, bukan double.

Perbandingan Array Elemen-per-Elemen #

Kekuatan khusus MATLAB: operator pembanding bekerja langsung pada array. Saat satu operand berupa skalar, MATLAB membandingkan skalar tersebut dengan setiap elemen array (scalar expansion); saat kedua operand berupa array berukuran sama, perbandingan berjalan pasangan demi pasangan:

matlab
nilai = [80 55 90 65];
lulus = nilai >= 60;

fprintf('Nilai : %d %d %d %d\n', nilai);
fprintf('Lulus : %d %d %d %d\n', lulus);

a = [4 7 2];
b = [4 3 9];
fprintf('a == b : %d %d %d\n', a == b);
fprintf('a ~= b : %d %d %d\n', a ~= b);

Output yang Dihasilkan:

text
Nilai : 80 55 90 65
Lulus : 1 0 1 1
a == b : 1 0 0
a ~= b : 0 1 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (nilai >= 60): angka 60 dibandingkan dengan setiap elemen nilai; hasilnya mask logical 1×4. Nilai 55 gagal sehingga posisi kedua bernilai 0.
  2. Baris 7-10 (a == b, a ~= b): kedua vektor dibandingkan posisi demi posisi: elemen pertama sama (1), dua lainnya berbeda (0). Pola ~= menghasilkan kebalikannya.
  3. Hasil berupa array logical yang bisa langsung dipakai sebagai mask: nilai(nilai >= 60) akan mengembalikan [80 90 65] — teknik yang kita bahas pada Chapter Logical Data Type.

Jika kedua array berukuran berbeda dan keduanya bukan skalar, MATLAB menghentikan eksekusi dengan galat ukuran tidak kompatibel. Pastikan operand sebanding sebelum membandingkan.

isequal dan isequaln #

Operator == membandingkan elemen-per-elemen, sehingga tidak cocok untuk menjawab “apakah dua array ini identik seluruhnya?”. Untuk pertanyaan tersebut MATLAB menyediakan isequal(), yang menghasilkan satu nilai logical scalar — true hanya jika kelas, ukuran, dan seluruh isi sama:

matlab
fprintf('isequal(nilai, [80 55 90 65]) : %d\n', isequal(nilai, [80 55 90 65]));
fprintf('isequal([1 2], [1 3])         : %d\n', isequal([1 2], [1 3]));

fprintf('isequal(NaN, NaN)  : %d\n', isequal(NaN, NaN));
fprintf('isequaln(NaN, NaN) : %d\n', isequaln(NaN, NaN));

Output yang Dihasilkan:

text
isequal(nilai, [80 55 90 65]) : 1
isequal([1 2], [1 3])         : 0
isequal(NaN, NaN)  : 0
isequaln(NaN, NaN) : 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (isequal(nilai, ...)): seluruh elemen identik, hasil 1 — tanpa perlu memeriksa mask elemen-per-elemen.
  2. Baris 2 (isequal([1 2], [1 3])): satu elemen berbeda cukup untuk membuat seluruh array “tidak sama”, hasil 0.
  3. Baris 4 (isequal(NaN, NaN)): sesuai standar IEEE 754, NaN tidak pernah sama dengan apa pun termasuk dirinya sendiri — hasil 0.
  4. Baris 5 (isequaln): varian isequaln memperlakukan NaN di posisi yang sama sebagai setara, hasil 1. Gunakan isequaln saat membandingkan data yang mungkin mengandung nilai hilang.

Jebakan Floating Point dan Solusi Toleransi #

Perbandingan == pada bilangan titik mengambang menyimpan jebakan terkenal. Amati sesi berikut:

matlab
x = 0.1 + 0.2;
fprintf('x == 0.3  : %d\n', x == 0.3);
fprintf('selisih   : %g\n', abs(x - 0.3));
fprintf('toleransi : %d\n', abs(x - 0.3) < 1e-10);

Output yang Dihasilkan:

text
x == 0.3  : 0
selisih   : 5.55112e-17
toleransi : 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (x = 0.1 + 0.2): nilai 0.1 dan 0.2 tidak punya representasi biner yang persis; jumlahnya sedikit menyimpang dari 0.3 di digit ke-17.
  2. Baris 2 (x == 0.3): deviasi mikroscopic ini membuat perbandingan eksak menghasilkan false (0), meskipun secara matematis 0.1 + 0.2 = 0.3.
  3. Baris 3 (abs(x - 0.3)): mengukur besarnya penyimpangan aktual — sekitar 5.55×10⁻¹⁷, jauh di bawah eps.
  4. Baris 4 (abs(x - 0.3) < 1e-10): pola yang benar — bandingkan selisih absolut terhadap toleransi. Bila selisih lebih kecil dari toleransi, kedua nilai dianggap sama.

Berkas contoh.m pada bagian bawah halaman menguji keenam operator, isequal/isequaln, serta kasus floating point secara utuh.

Ringkasan #

Enam operator pembanding MATLAB bekerja elemen-per-elemen dan menghasilkan array logical yang siap dipakai sebagai mask. Untuk perbandingan menyeluruh gunakan isequal (atau isequaln bila data mengandung NaN). Hasil komputasi floating point tidak boleh dibandingkan eksak — bandingkan selisihnya terhadap toleransi. Dengan aturan-aturan ini, kondisi kita berdiri di atas fondasi yang bisa dipercaya.