Menulis 25 nilai nol satu per satu untuk sebuah tabel bulanan bukan cara kerja engineer — dan MATLAB tahu itu. Kebutuhan nyata sehari-hari berbentuk pola: matriks nol sebagai penampung akumulasi, matriks identitas sebagai titik awal aljabar linear, matriks diagonal untuk bobot, matriks acak untuk simulasi. MATLAB menyediakan pabrik matriks siap pakai untuk setiap pola tersebut. Pada Chapter ini kita pelajari:

  • Matriks seragam: zeros, ones
  • Matriks identitas dan diagonal: eye, diag
  • Matriks ajaib magic serta ubin repmat dan blkdiag
  • Matriks acak rand/randn — dan cara menampilkan hasilnya secara jujur

zeros dan ones: Matriks Seragam #

Aturannya: zeros(m, n) membuat matriks m×n yang seluruh elemennya 0; ones(m, n) membuat matriks yang seluruh elemennya 1. Mekanismenya: kedua fungsi mengalokasikan blok memori bertipe double sebesar m×n elemen sekaligus, lalu mengisinya dengan nilai seragam — jauh lebih cepat daripada menggabungkan nilai satu per satu. Satu argumen (zeros(3)) berarti matriks persegi 3×3.

matlab
matriksNol = zeros(2, 3);
matriksSatu = ones(3);

fprintf('zeros(2,3):\n');
disp(matriksNol);
fprintf('size: %d x %d, class: %s\n', size(matriksNol), class(matriksNol));

fprintf('\nones(3):\n');
disp(matriksSatu);

Output yang Dihasilkan:

text
zeros(2,3):
     0     0     0
     0     0     0
size: 2 x 3, class: double

ones(3):
     1     1     1
     1     1     1
     1     1     1

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (zeros(2, 3)): matriks 2×3 semua nol — pola standar penampung akumulasi (misalnya total penjualan per kota yang belum diisi) dan preallocation yang kita bahas pada Chapter Mengubah Ukuran Array.
  2. Baris 2 (ones(3)): satu argumen berarti matriks persegi; ones(3) = ones(3, 3). Matriks satu dipakai sebagai nilai awal seragam (skala awal bobot, hitungan awal).
  3. Baris 4-7 (fprintf/disp): disp menampilkan isi matriks tanpa header; fprintf melaporkan ukuran dan kelas. Perhatikan bahwa hasilnya tetap kelas double.

eye dan diag: Identitas dan Diagonal #

Fungsi eye(n) membuat matriks identitas n×n — diagonal utamanya 1, sisanya 0. Fungsi diag() punya dua peran: dari vektor ke matriks diagonal, dan dari matriks kembali ke vektor diagonalnya. Bentuk diag(v, k) menempatkan vektor v pada diagonal ke-k (k = 0 diagonal utama, k = 1 di atasnya):

matlab
identitas = eye(3);
diagonal = diag([4 5 6]);

fprintf('eye(3):\n');
disp(identitas);

fprintf('\ndiag([4 5 6]):\n');
disp(diagonal);

Output yang Dihasilkan:

text
eye(3):
     1     0     0
     0     1     0
     0     0     1

diag([4 5 6]):
     4     0     0
     0     5     0
     0     0     6

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (eye(3)): matriks identitas — unsur netral perkalian matriks: A * eye(3) = A. Nama eye dibaca seperti huruf “I” (identitas). eye(2, 3) juga sah: matriks 2×3 dengan diagonal 1 sepanjang yang muat.
  2. Baris 2 (diag([4 5 6])): vektor [4 5 6] diangkat menjadi diagonal utama matriks 3×3 — misalnya bobot per mata ujian. Kebalikannya, diag(matriks) mengembalikan diagonal utama sebuah matriks sebagai vektor kolom.

magic, repmat, dan blkdiag #

magic(n) membuat matriks persegi berisi bilangan 1 sampai n² yang unik, dengan sifat ajaib: jumlah setiap baris, kolom, dan diagonal utamanya sama. Fungsi repmat(A, r, c) menyalin matriks A menjadi ubin r×c; blkdiag(A, B, ...) menyusun matriks blok diagonal dari beberapa matriks:

matlab
ajaib = magic(3);
fprintf('magic(3):\n');
disp(ajaib);
fprintf('Jumlah tiap kolom: %d %d %d\n', sum(ajaib));

fprintf('\nrepmat([1 2; 3 4], 1, 2):\n');
disp(repmat([1 2; 3 4], 1, 2));

fprintf('\nblkdiag([1 2; 3 4], [9 8; 7 6]):\n');
disp(blkdiag([1 2; 3 4], [9 8; 7 6]));

Output yang Dihasilkan:

text
magic(3):
     8     1     6
     3     5     7
     4     9     2
Jumlah tiap kolom: 15 15 15

repmat([1 2; 3 4], 1, 2):
     1     2     1     2
     3     4     3     4

blkdiag([1 2; 3 4], [9 8; 7 6]):
     1     2     0     0
     3     4     0     0
     0     0     9     8
     0     0     7     6

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (magic(3)): matriks 3×3; sum(ajaib) menjumlahkan tiap kolom menjadi vektor baris [15 15 15] — bukti sifat ajaibnya. magic jarang dipakai di produksi, tetapi sering dipakai sebagai data uji yang menarik.
  2. Baris 5 (repmat(..., 1, 2)): matriks 2×2 ditempel dua kali ke kanan → 2×4. Ubin repmat praktis untuk pola berulang, misalnya bobot per grup yang sama.
  3. Baris 8 (blkdiag(...)): dua blok diletakkan di diagonal, sisanya 0. Struktur blok diagonal muncul pada sistem yang terdiri dari komponen independen.

rand dan randn: Matriks Acak #

Fungsi rand(m, n) menghasilkan matriks m×n berisi nilai acak seragam antara 0 dan 1; randn(m, n) menghasilkan nilai acak berdistribusi normal (Gaussian) dengan rata-rata 0 dan simpangan baku 1. Mekanismenya: kedua fungsi membaca generator angka acak global; karena tidak kita atur seed-nya, isi matriksnya berbeda setiap eksekusi:

matlab
dataAcak = rand(2, 3);
dataNormal = randn(1, 10000);

fprintf('size(dataAcak)  : %d x %d, class: %s\n', size(dataAcak), class(dataAcak));
fprintf('size(dataNormal): %d x %d, class: %s\n', size(dataNormal), class(dataNormal));
fprintf('Rata-rata randn (dekat 0): %.4f\n', mean(dataNormal));

Output yang Dihasilkan:

text
size(dataAcak)  : 2 x 3, class: double
size(dataNormal): 1 x 10000, class: double
Rata-rata randn (dekat 0): -0.0031

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (rand(2, 3)): ukuran dan kelas stabil (2×3, double), tetapi enam nilai di dalamnya berubah setiap eksekusi — itulah sebabnya kita menampilkan ukuran, bukan isinya.
  2. Baris 2-4 (randn(1, 10000)): rata-rata 10.000 sampel normal selalu melayang dekat 0 (dan simpangan bakunya dekat 1) — statistik ringkas yang stabil meski isinya acak. Bila skrip dijalankan ulang, angka -0.0031 bergeser sedikit; nilainya tetap “dekat 0”.
FungsiHasilKegunaan tipikal
zeros(m, n)semua 0penampung akumulasi, preallocation
ones(m, n)semua 1nilai awal seragam
eye(n)identitasunsur netral aljabar linear
diag(v)vektor jadi diagonalbobot, matriks khusus
magic(n)ajaib 1..n²data uji
repmat(A, r, c)ubin Apola berulang
blkdiag(A, B)blok diagonalsistem independen
rand(m, n)acak seragam 0..1simulasi, inisialisasi
randn(m, n)acak normalsimulasi noise, Monte Carlo

Berkas contoh.m pada bagian bawah halaman membangun seluruh matriks di atas secara berurutan dan mengujinya dengan disp, size, class, sum, dan mean.

Ringkasan #

Keluarga pabrik matriks menghapus kebutuhan mengetik nilai satu per satu: zeros dan ones untuk matriks seragam, eye dan diag untuk struktur diagonal, magic untuk data uji, repmat dan blkdiag untuk pola susunan, serta rand/randn untuk simulasi. Kebiasaan penting saat bekerja dengan angka acak: verifikasi ukuran dan statistik ringkasnya, bukan nilai individualnya, dan atur rng bila hasil perlu direproduksi. Dengan array di tangan, langkah berikutnya adalah mengambil elemennya — kita masuk ke indexing.