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
magicserta ubinrepmatdanblkdiag - 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.
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:
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 1Mari kita bedah baris-baris kode di atas:
- 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. - 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). - Baris 4-7 (
fprintf/disp):dispmenampilkan isi matriks tanpa header;fprintfmelaporkan ukuran dan kelas. Perhatikan bahwa hasilnya tetap kelasdouble.
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):
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:
eye(3):
1 0 0
0 1 0
0 0 1
diag([4 5 6]):
4 0 0
0 5 0
0 0 6Mari kita bedah baris-baris kode di atas:
- Baris 1 (
eye(3)): matriks identitas — unsur netral perkalian matriks:A * eye(3)=A. Namaeyedibaca seperti huruf “I” (identitas).eye(2, 3)juga sah: matriks 2×3 dengan diagonal 1 sepanjang yang muat. - 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:
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:
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 6Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
magic(3)): matriks 3×3;sum(ajaib)menjumlahkan tiap kolom menjadi vektor baris[15 15 15]— bukti sifat ajaibnya.magicjarang dipakai di produksi, tetapi sering dipakai sebagai data uji yang menarik. - Baris 5 (
repmat(..., 1, 2)): matriks 2×2 ditempel dua kali ke kanan → 2×4. Ubinrepmatpraktis untuk pola berulang, misalnya bobot per grup yang sama. - 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:
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:
size(dataAcak) : 2 x 3, class: double
size(dataNormal): 1 x 10000, class: double
Rata-rata randn (dekat 0): -0.0031Mari kita bedah baris-baris kode di atas:
- 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. - 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.0031bergeser sedikit; nilainya tetap “dekat 0”.
| Fungsi | Hasil | Kegunaan tipikal |
|---|---|---|
zeros(m, n) | semua 0 | penampung akumulasi, preallocation |
ones(m, n) | semua 1 | nilai awal seragam |
eye(n) | identitas | unsur netral aljabar linear |
diag(v) | vektor jadi diagonal | bobot, matriks khusus |
magic(n) | ajaib 1..n² | data uji |
repmat(A, r, c) | ubin A | pola berulang |
blkdiag(A, B) | blok diagonal | sistem independen |
rand(m, n) | acak seragam 0..1 | simulasi, inisialisasi |
randn(m, n) | acak normal | simulasi 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.