Keputusan dalam program selalu bermuara pada satu pertanyaan: kondisi ini benar atau salah? MATLAB menjawab dengan kelas logical — tipe data dua-nilai yang menjadi bahasa para kondisi, filter, dan seleksi data. Kekuatan khusus MATLAB: nilai logical bukan cuma untuk if; array logical dapat langsung dipakai sebagai mask untuk memilih elemen array yang lolos kondisi. Pada Chapter ini kita bedah tipe logical dari literal dasarnya sampai pola mask indexing yang khas MATLAB.
true, false, dan Kelas logical #
MATLAB menyediakan dua literal logika: true dan false. Keduanya adalah array 1×1 kelas logical, dan tiap elemen logical hanya memakan 1 byte. Perintah class() memastikannya:
fprintf('class true : %s\n', class(true));
fprintf('class false : %s\n', class(false));Output yang Dihasilkan:
class true : logical
class false : logicalDi balik layar, MATLAB menyimpan true sebagai 1 dan false sebagai 0. Konversi dua arah dengan double() dan logical() memperlihatkan keterkaitan ini:
fprintf('double(true) = %d\n', double(true));
fprintf('logical(5) = %d\n', logical(5));
fprintf('logical(0) = %d\n', logical(0));Output yang Dihasilkan:
double(true) = 1
logical(5) = 1
logical(0) = 0Mari kita bedah baris-baris kode di atas:
- Baris 1 (
double(true)): konversi kedoublememunculkan representasi numeriknya, yaitu 1. - Baris 2 (
logical(5)): angka bukan nol apa pun dianggaptrue— aturan nonzero is true. - Baris 3 (
logical(0)): hanya nol yang menjadifalse.
Aturan nonzero is true ini penting saat kita membaca kode: if 5 sah dan dianggap if true. Meski begitu, menulis kondisi secara eksplisit (if nilai > 0) tetap lebih terbaca daripada mengandalkan angka mentah.
Operator Pembanding Menghasilkan logical #
Sumber utama nilai logical adalah operator pembanding seperti >, ==, atau >=. Saat MATLAB mengevaluasi perbandingan, hasilnya bukan angka biasa, melainkan array kelas logical dengan ukuran sama seperti operand. Perhatikan data suhu pasien berikut:
suhu = [36.5 37.2 38.9 36.8 39.4];
demam = suhu > 37.5;
fprintf('class demam : %s\n', class(demam));
fprintf('nilai demam : %d %d %d %d %d\n', demam);Output yang Dihasilkan:
class demam : logical
nilai demam : 0 0 1 0 1Mari kita bedah baris-baris kode di atas:
- Baris 1 (
suhu = [...]): vektordoubleberisi lima pengukuran suhu. - Baris 2 (
suhu > 37.5): perbandingan dijalankan elemen-per-elemen; tiap elemen menghasilkanlogical1 atau 0. Elemen 38.9 dan 39.4 melampaui 37.5 sehingga posisi ke-3 dan ke-5 bernilai 1. - Baris 4-5 (
class,fprintf): verifikasi menunjukkandemamberkelaslogicaldan isinya pola 0 0 1 0 1.
Kita akan membahas keenam operator pembanding secara mendalam pada Chapter Operator Perbandingan; saat ini cukup pahami bahwa hasil perbandingan selalu bertipe logical.
Logical sebagai Mask Indeks #
Inilah fitur paling khas MATLAB: array logical dapat ditempatkan langsung di dalam kurung indeks sebagai mask untuk memilih elemen yang nilainya true. Pola data(kondisi) mengembalikan hanya elemen-elemen yang lolos:
fprintf('Suhu demam : %.1f %.1f\n', suhu(demam));
fprintf('Indeks demam: %d %d\n', find(demam));
fprintf('Jumlah demam: %d dari %d pengukuran\n', sum(demam), length(suhu));Output yang Dihasilkan:
Suhu demam : 38.9 39.4
Indeks demam: 3 5
Jumlah demam: 2 dari 5 pengukuranMari kita bedah baris-baris kode di atas:
- Baris 1 (
suhu(demam)): maskdemammenyaring vektorsuhu; hanya elemen posisi 3 dan 5 yang lolos, menghasilkan[38.9 39.4]— tanpafordan tanpaif. - Baris 2 (
find(demam)): fungsifind()melaporkan nomor indeks elemen yangtrue, bukan nilainya. Gunakanfindketika posisi yang dibutuhkan, mask ketika nilainya yang dibutuhkan. - Baris 3 (
sum(demam)): karenatruedihitung sebagai 1, menjumlahkan mask langsung menghasilkan banyaknya elemen yang lolos — trik menghitung yang sering dipakai.
Logical dalam Kondisi #
Nilai logical adalah bahan bakar struktur kendali seperti if. Kondisi yang paling sehat berbentuk logical scalar hasil perbandingan:
nilaiUjian = 78;
if nilaiUjian >= 75
fprintf('Hasil: Lulus\n');
else
fprintf('Hasil: Remedial\n');
endOutput yang Dihasilkan:
Hasil: LulusMari kita bedah baris-baris kode di atas:
- Baris 2 (
nilaiUjian >= 75): perbandingan menghasilkanlogicalscalar;78 >= 75bernilaitrue. - Baris 3-5 (
if ... end): blokifmenjalankan cabang yang kondisinyatrue. Struktur kendali lengkap kita bahas pada Section Struktur Kontrol; saat ini cukup lihat bagaimanalogicalmengendalikan jalannya program.
Khusus untuk kondisi berbentuk array, MATLAB memakai aturan tegas: kondisi dianggap true hanya jika array tidak kosong dan semua elemennya bernilai true. Kondisi [1 1] dianggap true, sedangkan [1 0] dianggap false. Agar maksud kode selalu jelas, gunakan all(kondisi) atau any(kondisi) untuk meringkas array menjadi satu logical scalar — dua fungsi ini kita bahas pada Chapter Operator Logika.
Berkas contoh.m pada bagian bawah halaman merangkum mask, find, konversi, dan kondisi dalam satu script yang dapat dijalankan langsung.
Ringkasan #
Kelas logical menyimpan kebenaran sebagai 1 dan 0, lahir dari operator pembanding, dan mengikuti aturan nonzero is true untuk konversi dari angka. Sebagai mask, data(kondisi) memilih elemen yang lolos tanpa perulangan; find memberikan posisinya, dan sum menghitung banyaknya. Nilai logical scalar menjadi bahan bakar if, menjadikan tipe kecil ini salah satu fondasi terpenting MATLAB.