cv.cm

Pemrograman · Bahasa pemrograman

Tutorial MATLAB untuk pemula

6 menit baca

Jawaban singkat

MATLAB adalah bahasa dan lingkungan komputasi numerik dari MathWorks yang setiap nilainya berupa matriks. Anda menulis A * B untuk perkalian matriks, A .* B untuk perkalian per elemen, indeks dimulai dari 1, dan banyak loop bisa diganti dengan ekspresi vektorisasi. MATLAB sudah menyertakan fitur plot dan banyak toolbox untuk teknik dan sains. GNU Octave adalah alternatif gratis dan open source yang menjalankan sebagian besar kode dasar MATLAB tanpa perubahan.

Apa itu MATLAB dan siapa yang memakainya

MATLAB ("matrix laboratory") bermula sebagai alat buatan Cleve Moler untuk memudahkan akses ke pustaka aljabar linear, lalu menjadi produk komersial MathWorks. MATLAB menggabungkan bahasa pemrograman, desktop interaktif, plot, dan toolbox untuk pemrosesan sinyal, sistem kendali, optimasi, statistika, pengolahan citra, dan machine learning. Simulink, produk pendampingnya, memodelkan sistem dinamis dengan diagram blok.

MATLAB banyak dipakai dalam perkuliahan teknik dan sains, laboratorium riset, serta industri seperti otomotif, kedirgantaraan, dan keuangan. MATLAB memerlukan lisensi berbayar (banyak universitas menyediakannya). GNU Octave adalah perangkat lunak bebas dengan sintaks yang sebagian besar kompatibel; Octave mencakup bahasa inti dan banyak fungsi, tetapi tidak mencakup toolbox MathWorks maupun Simulink.

Instal dan jalankan Hello, world

Instal MATLAB dari MathWorks, gunakan MATLAB Online di browser, atau instal GNU Octave dari octave.org (Windows, macOS, Linux). Kode disimpan dalam file .m. Skrip adalah file berisi perintah; Anda menjalankannya dengan mengetik namanya, tanpa .m, di Command Window.

% hello.m
disp('Hello, world!')
matlab -batch "hello"   # MATLAB from a terminal
octave hello.m          # GNU Octave
# Hello, world!

Komentar diawali %. Baris yang berakhir tanpa titik koma akan mencetak hasilnya, jadi x = 5 menampilkan x = 5, sedangkan x = 5; tidak menampilkan apa pun.

Variabel dan tipe dasar

Variabel dibuat lewat penugasan dan tidak perlu dideklarasikan. Angka secara bawaan bertipe double (floating point 64-bit), dan satu angka pun adalah matriks 1 kali 1.

TipeContohCatatan
doublex = 3.14Tipe numerik bawaan
tipe integern = int32(42)int8 hingga int64, uint8 hingga uint64; aritmetikanya bersifat saturasi
logicalok = trueHasil perbandingan seperti x > 2
array charname = 'Ana'Tanda kutip tunggal; vektor baris berisi karakter
strings = "Ana"Objek string MATLAB; Octave memperlakukan tanda kutip ganda sebagai array char
cell arrayc = {'Ana', 30}Menyimpan nilai dengan tipe berbeda
structp.name = 'Ana'Field bernama
x = 10;
y = 3;
x / y              % 3.3333
mod(x, y)          % 1
x ^ 2              % 100
name = 'Ana';
fprintf('%s is %d years old\n', name, 30)
% Ana is 30 years old
class(x)           % 'double'

Vektor dan matriks

Tanda kurung siku membangun array: spasi atau koma memisahkan kolom, titik koma memisahkan baris. Pengindeksan memakai tanda kurung biasa dan dimulai dari 1; end berarti indeks terakhir dan : berarti "semua".

v = [3 1 4 1 5];
v(1)               % 3
v(end)             % 5
v(2:4)             % [1 4 1]
v * 2              % [6 2 8 2 10]
v(v > 2)           % [3 4 5]   logical indexing
A = [1 2; 3 4];
A(2, :)            % second row: [3 4]
A'                 % transpose:  [1 3; 2 4]
A * A              % matrix product: [7 10; 15 22]
A .* A             % element-wise:   [1 4; 9 16]
b = [5; 11];
x = A \ b          % solves A*x = b: [1; 2]
z = zeros(2, 3);   % also ones, eye, rand
r = 0:0.25:1;      % [0 0.25 0.5 0.75 1]

Operator dengan titik (.*, ./, .^) bekerja per elemen; tanpa titik, operator mengikuti aturan aljabar linear. Operator backslash menyelesaikan sistem persamaan linear dan lebih akurat daripada menghitung inv(A) * b.

Alur kontrol

score = 85;
if score >= 90
    disp('A')
elseif score >= 80
    disp('B')
else
    disp('C')
end

total = 0;
for k = 1:10
    total = total + k;
end
fprintf('total = %d\n', total)   % total = 55

n = 3;
while n > 0
    n = n - 1;
end

switch 'red'
    case {'red', 'green'}
        disp('a color')
    otherwise
        disp('unknown')
end

Setiap blok diakhiri dengan end. Banyak loop bisa diganti dengan ekspresi vektorisasi: loop di atas sama dengan sum(1:10), yang lebih singkat dan biasanya lebih cepat. Jika harus membangun array di dalam loop, alokasikan dulu ukurannya, misalnya result = zeros(1, 1000);.

Fungsi dan fungsi anonim

Sebuah fungsi berada di file sendiri yang namanya sama dengan nama fungsi. Fungsi dapat mengembalikan beberapa output. Pada MATLAB versi terbaru, skrip juga boleh memuat fungsi lokal di akhir file.

% stats.m
function [m, s] = stats(x)
%STATS Mean and sample standard deviation of a vector.
    m = mean(x);
    s = std(x);
end
[m, s] = stats([2 4 4 5 7])   % m = 4.4000, s = 1.8166
[biggest, where] = max([3 9 2])   % biggest = 9, where = 2

f = @(x) x.^2 + 1;            % anonymous function
f(3)                          % 10
f([1 2 3])                    % [2 5 10]
fzero(@(x) x.^2 - 2, 1)       % 1.4142, a root near 1
integral(f, 0, 1)             % 1.3333

Fungsi anonim, dibuat dengan @, sering diteruskan ke fungsi lain seperti fzero, integral, arrayfun, atau rutin optimasi. Tulis dengan operator per elemen (.^) agar juga berfungsi pada vektor.

Struct dan cell array

person.name = 'Ana';
person.age = 30;
fprintf('%s is %d\n', person.name, person.age)   % Ana is 30

c = {'Ana', 30, [1 2 3]};   % cell array with mixed types
c{2}                         % 30 (curly braces get the content)
class(c(2))                  % 'cell' (parentheses get a sub-cell)
names = {'Ana', 'Ben', 'Cleo'};
numel(names)                 % 3
upper(names{1})              % 'ANA'

MATLAB juga memiliki tipe table untuk data berorientasi kolom dengan variabel bernama, mirip spreadsheet; readtable memuat file CSV dan Excel ke dalamnya.

Penanganan error

Munculkan error dengan error, opsional dengan identifier seperti 'demo:negative', dan tangani dengan try ... catch. Objek yang tertangkap (MException di MATLAB) memiliki field identifier dan message.

% safe_sqrt.m
function r = safe_sqrt(x)
    if x < 0
        error('demo:negative', 'Input must be non-negative, got %g', x);
    end
    r = sqrt(x);
end
try
    safe_sqrt(-4);
catch err
    fprintf('%s: %s\n', err.identifier, err.message)
end
% demo:negative: Input must be non-negative, got -4

Gunakan warning(...) untuk masalah yang tidak perlu menghentikan program. Tanpa pengecekan, sqrt(-4) tidak akan gagal sama sekali: hasilnya bilangan kompleks 0 + 2i.

Program lengkap kecil: analisis dan plot data

% temps.m - analyze a week of temperatures
temps = [21.5 23.0 19.8 25.1 24.3 18.9 22.7];
days = 1:numel(temps);

avg = mean(temps);
[hottest, idx] = max(temps);
above = days(temps > avg);

fprintf('Average: %.2f\n', avg)
fprintf('Hottest: %.1f on day %d\n', hottest, idx)
fprintf('Days above average: %s\n', mat2str(above))

plot(days, temps, '-o')
hold on
plot(days, avg * ones(size(days)), '--')
xlabel('Day'); ylabel('Temperature (C)')
title('Temperatures this week')
legend('Daily', 'Average')
% Average: 22.19
% Hottest: 25.1 on day 4
% Days above average: [2 4 5 7]

Skrip memakai logical indexing untuk menemukan hari-hari di atas rata-rata tanpa loop, lalu menggambar grafik garis dengan penanda dan garis rata-rata putus-putus. Kode yang sama berjalan di GNU Octave.

Langkah selanjutnya

  • Dokumentasi MATLAB dari MathWorks, mulai dari halaman getting-started.
  • MATLAB Onramp, kursus pengantar interaktif gratis dari MathWorks.
  • Manual GNU Octave jika Anda memakai Octave, termasuk catatannya tentang kompatibilitas dengan MATLAB.
  • Selanjutnya pelajari vektorisasi, readtable untuk file data, dan fungsi-fungsi plot.

FAQ

Apakah ada MATLAB versi gratis?

MATLAB sendiri memerlukan lisensi, meskipun MathWorks menawarkan masa percobaan dan banyak universitas menyediakan lisensi kampus. GNU Octave adalah program open source gratis yang menjalankan sebagian besar kode dasar MATLAB.

Apa beda * dan .* di MATLAB?

* adalah perkalian matriks dari aljabar linear, yang mensyaratkan dimensi dalam yang cocok. .* mengalikan elemen-elemen yang bersesuaian dari dua array berukuran sama.

Apakah GNU Octave sepenuhnya kompatibel dengan MATLAB?

Tidak sepenuhnya. Sintaks inti, matriks, fungsi, dan plot sebagian besar kompatibel, tetapi Octave tidak punya toolbox MathWorks, Simulink, dan beberapa fitur MATLAB yang lebih baru, serta menerima beberapa bentuk sintaks tambahan miliknya sendiri.

Mengapa MATLAB memulai indeks dari 1?

MATLAB mengikuti notasi matematika, tempat elemen pertama dari vektor atau matriks adalah elemen 1. Fortran, R, dan Julia memakai konvensi yang sama.

Sebaiknya belajar MATLAB atau Python?

Pelajari MATLAB jika mata kuliah, lab, atau perusahaan Anda memakainya, terutama bersama Simulink atau toolbox tertentu. Python dengan NumPy, SciPy, dan Matplotlib gratis serta lebih serbaguna, dan konsepnya bisa dipindahkan di antara keduanya.

Semua tutorial pemrograman