Modul MATLAB Unlocked
Modul MATLAB Unlocked
MODUL 2 [Praktikum 5 – 7]
GRAFIK DAN SUARA …………………………………………………… 31
1. Plot 2-Dimensi ……………………………………………………….. 31
2. Lebih Jauh Mengenai Plot …………………………………………… 34
3. Plot 3-Dimensi ……………………………………………………….. 40
3.1. Plot Garis ………………………………………………………. 40
3.2. Plot Permukaan ………………………………………………... 42
3.3. Plot Kontur …………………………………………………….. 44
4. Suara …………………………………………………………………. 46
ii
DAFTAR GAMBAR
DAFTAR TABEL
Tabel 1 ……………………………………………………………………... 10
Tabel 2 ……………………………………………………………………... 17
Tabel 3 ……………………………………………………………………... 17
Tabel 4 ……………………………………………………………………... 23
Tabel 5 ……………………………………………………………………... 24
Tabel 6 ……………………………………………………………………... 32
Tabel 7 ……………………………………………………………………... 33
Tabel 8 ……………………………………………………………………... 34
Tabel 9 ……………………………………………………………………... 37
Tabel 10 ……………………………………………………………………. 44
Tabel 11 ……………………………………………………………………. 46
Tabel 12 ……………………………………………………………………. 66
Tabel 13 ……………………………………………………………………. 66
Tabel 14 ……………………………………………………………………. 67
iii
MODUL 1 [Praktikum 1 – 4]
PENGENALAN MATLAB, VEKTOR DAN MATRIKS
Pendahuluan
MATLAB (MATrix LABoratory) adalah bahasa tingkat tinggi dan interaktif
yang memungkinkan untuk melakukan komputasi secara intensif. MATLAB
telah berkembang menjadi sebuah environment pemrograman yang canggih yang
berisi fungsi-fungsi build in untuk melakukan pengelolahan sinyal, aljabar linear
dan kalkulasi matematis lainnya. MATLAB juga berisi toolbox yang berisi fungs
– fungsi tambahan untuk aplikasi khusus. Penggunaan MATLAB meliputi bidang
:
Matematika dan Komputasi
Pembentukan Algorithm
Akuisisi Data
Pemodelan, simulasi dan Pembuatan Prototype
Analisis Data, Explorasi, dan Visualisasi Grafik
Keilmuan dan Bidang Rekayasa
Beberapa keunggulan Matlab terletak pada:
2. Aspek Komputasional
Analisa matrik dan manipulasinya
Reduksi data dan pengolahan data statistik
FFT, statistic korelasi dan kovarian
Pendukung matrik “sparse”
Fungsi trigonometri dan beberapa fungsi komplek lainnya
Fungsi Bessel, beta, dan fungsi kepadatan lainnya
Persamaan diferensial linier dan nonlinier
3. Aspek Grafik dan Visualisasi
2-D scatter, grafik garis, poligon dan mesh, counter, grafik polar, dan
plot histogram
3-D scatter, grafik garis, poligon, mesh dan plot “wireframe”
1
2
4. Aspek Pemrograman
Struktur control (FOR, WHILE dan IF)
Manipulasi string
Input file berupa ASCII dan biner
Debugging
Dapat berinteraksi dengan bahasa pemrograman C
Gambar 1
Menu dan simbol utama Matlab
Gambar 2
Matlab Help
3
4
1. Memulai Matlab
Setelah melakukan instalasi MATLAB pada PC, perhatikan icon MATLAB
pada tampilan desktop kemudian “doubleclick” pada icon tersebut. Selanjutnya
akan muncul tampilan seperti pada gambar berikut ini.
Gambar 3
Lembar kerja untuk menjalankan fungsi-fungsi Matlab
Pada tampilan awal MATLAB, terlihat beberapa jendela yang merupakan
g. Fungsi M-file
>> disp (‘karakter’) : menampilkan karakter (string)
>> num2str : mengkonversi numerik menjadi string
>> input : meminta user memberikan input
>> pause : menghentikan program sampai user menekan <ENTER>
>> pause(n) : berhenti selama n detik
3. Matriks
Terdapat 3 jenis format data di MATLAB yaitu skalar, vektor dan matriks.
Skalar, ialah suatu bilangan tunggal
Vektor, ialah sekelompok bilangan yang tersusun 1-dimensi. Dalam
MATLAB biasanya disajikan sebagai vektor-baris atau vektor-kolom
Matriks, ialah sekelompok bilangan yang tersusun dalam segi-empat
2-dimensi. Di dalam MATLAB, matriks didefinisikan dengan jumlah
baris dan kolomnya. Di MATLAB terdapat pula matriks berdimensi
3, 4, atau lebih, namun dalam buku ini kita batasi hingga 2-dimensi
saja.
Sebenarnya, semua data bisa dinyatakan sebagai matriks. Skalar bisa
dianggap sebagai matriks satu baris – satu kolom (matriks 1×1), dan vektor bisa
dianggap sebagai matriks 1-dimensi: satu baris – n kolom, atau n baris – 1 kolom
(matriks 1×n atau n×1). Semua perhitungan di MATLAB dilakukan dengan
matriks, sehingga disebut MATrix LABoratory.
Matriks didefinisikan dengan kurung siku ([ ]) dan biasanya dituliskan
baris-per-baris. Tanda koma (,) digunakan untuk memisahkan kolom, dan titik-
koma (;) untuk memisahkan baris. Kita juga bisa menggunakan spasi untuk
memisahkan kolom dan menekan Enter ke baris baru untuk memisahkan baris.
>> vektor2=[2;4;6]
vektor2 =
2
4
6
Terlihat bahwa matrix1 dan matrix2 isinya sama, karenanya kita bisa menekan
Enter untuk membuat baris baru, ataupun menggunakan titik-koma.
gabung2 =
3 5 7
10 20 30
40 50 60
70 80 90
Kita harus ingat bahwa matriks gabungan harus memiliki jumlah baris dan
kolom yang valid sehingga membentuk persegi panjang.
Untuk mengetahui ukuran atau dimensi dari matriks yang ada, kita bisa
gunakan command size dan length. size umumnya digunakan untuk matriks 2-
dimensi, sementara length untuk vektor.
>> length(vektor1)
ans =
3
>> size(matrix1)
ans =
3 3
Menunjukkan panjang vektor1 ialah 3 elemen, dan ukuran matrix1 ialah 3-baris
3-kolom (3×3). Kita juga bisa menyimpan keluaran command dalam variabel
baru.
>> panjang=length(vektor2)
panjang =
3
>> [jml_baris,jml_kolom]=size(gabung5)
jml_baris =
3
jml_kolom =
6
10
Sementara itu, untuk menghitung jumlah elemen dari suatu matriks, kita
pergunakan command prod. Misalkan untuk matriks gabung5, jumlah elemennya
ialah;
>> jml_elemen=prod(size(gabung5))
jml_elemen =
18
Berbagai matriks khusus yang kerap kita pergunakan dalam perhitungan bisa
dibuat secara efisien dengan command yang telah ada di MATLAB.
Tabel 1
ones(n) membuat matriks satuan (semua elemennya berisi angka 1)
berukuran n×n.
ones(m,n) membuat matriks satuan berukuran m×n.
>> mat_2=zeros(2,4)
mat_2 =
0 0 0 0
0 0 0 0
>> bil_acak_uniform=rand(1,10)
bil_acak_uniform =
Columns 1 through 7
0.9501 0.2311 0.6068 0.4860 0.8913 0.7621 0.4565
Columns 8 through 10
0.0185 0.8214 0.4447
12
>> gaussian_noise=randn(5,1)
gaussian_noise =
-0.4326
-1.6656
0.1253
0.2877
-1.1465
Setiap kali kita menggunakan command rand dan randn, kita akan selalu
mendapatkan nilai keluaran yang berbeda. Hal ini merupakan salah satu
sifat bilangan acak.
Untuk vektor:
nama_vektor( indeks )
Untuk matriks:
nama_matriks( indeks_baris , indeks_kolom )
>> clear
>> vektor_ini = [1 3 5 7 9];
>> vektor_itu = [9; 8; 7; 6; 5];
>> matrix = [10 20 30; 40 50 60; 70 80 90];
>> vektor_ini(1)
ans =
1
>> vektor_itu(2)
ans =
8
>> matrix(1,2)
ans =
20
>> [matrix(1,1) matrix(1,2) matrix(1,3)]
ans =
10 20 30
Kita juga bisa mengambil beberapa baris dan kolom sekaligus dari suatu
matriks dengan operator titik-dua (:). Dalam hal ini tanda titik-dua berarti
“sampai dengan”.
Mengambil elemen baris ke-1 sampai ke-2, kolom ke-2 sampai ke-3 dari matrix
>> matrix(1:2,2:3)
ans =
20 30
50 60
80
Dengan menggunakan indeks, kita bisa mengubah nilai elemen matriks yang telah
ada.
>> vektor_ini(1)=1000
vektor_ini =
1000 3 5 7 9
>> vektor_itu(2:4)=[-1; –1; –1]
vektor_itu =
9
-1
-1
-1
5
>> matrix(3,:)=100*ones(1,3)
matrix =
10 20 30
40 50 60
100 100 100
Deret bilangan merupakan hal yang kerap kita temui dalam pengolahan
data, terutama berkaitan dengan plot data dan proses iterasi (perhitungan
berulang-ulang). Misalkan kita memiliki data tegangan suatu baterai pada setiap
16
menit selama 1 jam. Dalam menyajikan data “waktu”, kita harus membuat vektor
berisi deret. Kita tentunya bisa melakukannya secara manual seperti ini:
>> time=[1, 2, 3, 4, …, 60]
Tetapi akan lebih efisien jika deret diciptakan menggunakan operator titik-dua.
Formulanya ialah:
Sekarang kita akan berlatih menggunakan operator titik-dua untuk membuat deret
berikut:
x = 0, 100, 200, 300, 400, … , 2200, 2300
y = -10, -9.5, -9, -8.5, … -0.5, 0, 0.5, … , 9, 9.5, 10
z = 10, 9.95, 9.9, 9.85, 9.8, 9.75, … , 1, 0.95, 0.9, … , 0.05, 0
>> x=0:100:2300;
>> y=-10:0.5:10;
>> z=10:-0.05:0;
Tabel 2
linspace(a,b,n) membuat vektor baris berisi n titik yang terpisah merata
secara linier antara a dan b.
Contoh:
>> linspace(0,10,11)
ans =
0 1 2 3 4 5 6 7 8 9 10
>> logspace(0,2,10)
ans =
Columns 1 through 7
1.0000 1.6681 2.7826 4.6416 7.7426 12.9155 21.5443
Columns 8 through 10
35.9381 59.9484 100.0000
Terdapat beberapa command yang bisa digunakan untuk menukar, merotasi, dan
menyusun kembali elemen matriks.
Tabel 3
fliplr(A) menukar posisi elemen matriks A secara melintang, yaitu
sebelah kiri ditukar dengan sebelah kanan.
flipud(A) menukar posisi elemen matriks A secara membujur, yaitu
18
Contoh
>> A=[0:3; 4:7]
A =
0 1 2 3
4 5 6 7
>> fliplr(A)
ans =
3 2 1 0
7 6 5 4
>> flipud(A)
ans =
4 5 6 7
0 1 2 3
>> rot90(A)
ans =
3 7
2 6
1 5
0 4
19
>> reshape(A,1,8)
ans =
0 4 1 5 2 6 3 7
>> reshape(A,4,2)
ans =
0 2
4 6
1 3
5 7
Selisih =
-4 -4
-4 -4
Tambah50 =
50 51
52 53
20
di mana:
Contoh berikutnya ialah perkalian dua vektor, yang juga mengikuti aturan
perkalian matriks, karena vektor sesungguhnya sama dengan matriks 1-
dimensi.
>> x=[3 2 1], y=[100;10;1]
x =
3 2 1
y =
100
10
1
z2 =
300 200 100
30 20 10
3 2 1
dot-product: x•y =
cross-product: x×y =( )
-13.0000
Sehingga kita dapatkan solusi = 6 dan = -13. Atau kita juga bisa
mendapatkan solusi tersebut dengan operator pembagian terbalik:
>> X=A\B
X =
6.0000
-13.0000
Sebagai bahan latihan, cobalah Anda pecahkan persamaan linier dengan tiga
variabel berikut ini.
x + 2y + 3z = 2
4x + 5y + 6z = -5,5
7x + 8y – 9z = -49
3.8. Transposisi
Salah satu operasi yang penting dalam matriks ialah transposisi, dituliskan
dalam MATLAB dengan operator petik tunggal ( ‘ ) dan titik-petik ( .’ ). Operasi
ini mempertukarkan baris dan kolom dari suatu matriks atau vektor.
Tabel 4
petik tunggal ( ‘ ) operasi transposisi untuk matriks berisi bilangan riil, atau
transposisi dan konjugasi untuk matriks kompleks.
titik-petik ( .’ ) operasi transposisi tanpa konjugasi. Untuk matriks riil,
operator ini memberi hasil yang sama dengan petik tunggal
Mari kita praktekkan contoh berikut ini untuk memahami kedua operator di atas.
>> Mat_riil=[1 0; 3 5], Mat_kompleks=[1+2i 3i; 1 2+3i]
Mat_riil =
1 0
3 5
Mat_kompleks =
1.0000 + 2.0000i 0 + 3.0000i
24
>> Transp_riil=Mat_riil',Transp_kompleks=Mat_kompleks'
Transp_riil =
1 3
0 5
Transp_kompleks =
1.0000 - 2.0000i 1.0000
0 - 3.0000i 2.0000 - 3.0000i
>> Transp_riil2=Mat_riil.'
Transp_riil2 =
1 3
0 5
>> Transp_kompleks2=Mat_kompleks.'
Transp_kompleks2 =
1.0000 + 2.0000i 1.0000
0 + 3.0000i 2.0000 + 3.0000i
3.9. Operasi Elemen-per-Elemen
Di dalam MATLAB, operasi matematik juga bisa dilakukan elemen-per-
elemen. Dalam hal ini matriks atau vektor yang terlibat harus berukuran sama.
Operasi yang bisa dilakukan ialah perkalian/pembagian, penjumlahan/
pengurangan, serta pangkat. Operator yang digunakan diawali dengan tanda
“titik” (kecuali penjumlahan/pengurangan), yaitu:
Tabel 5
+ – Tambah dan kurang (elemen-per-elemen)
.* ./ .\ Kali, bagi, bagi terbalik (elemen-per-elemen)
.^ Pangkat (elemen-per-elemen)
25
>> A+B
ans =
8 3
3 5
>> A.*B
ans =
7 -10
2 0
>> B./A
ans =
7.0000 -2.5000
2.0000 0
>> B.^2
ans =
49 25
4 0
>> A.^B
ans =
1 -32
1 1
>> 2.^B
26
ans =
128 32
4 1
Perhatikan bahwa hasil operasi juga berupa matriks berukuran sama dengan A
dan B.
Pada contoh berikutnya kita coba operasi antar vektor.
>> a.*b
ans =
12 10 6
>> c.*d
ans =
50
200
450
>> a.*c
??? Error using ==> .*
Matrix dimensions must agree.
Perhatikan bahwa ukuran a dan c tidak cocok sehingga muncul pesan error (a
berukuran 1×3 sementara c 3×1).
>> b.^a, c./d+2
ans =
64 25 6
ans =
4
27
4
4
>> c./2.*d.^2
ans =
125
1000
3375
>> n=-3:3
n =
-3 -2 -1 0 1 2 3
ans =
-2 -1 -1 0 1 1 2
ans =
-2 -1 -1 0 0 1 1
ans =
-1 -1 0 0 1 1 2
>> rem(n,3)
ans =
0 -2 -1 0 1 2 0
Contoh kasus:
Anda ditugasi membuat tabel trigonometri: sinus dan cosinus untuk sudut-
sudut istimewa: 0°, 30°, 45°, 60°, 90°, ... , 360°. Dalam tugas ini akan digunakan
pula command sort untuk mengurutkan data dan disp untuk menampilkan isi
variabel di layar.
Mula-mula, kita definisikan x sebagai sudut-sudut istimewa, berupa sudut
kelipatan 30° mulai 0° hingga 360°. Kemudian kita tambahkan empat sudut
istimewa: 45°, 135°, 225°, dan 315°, lalu kita urutkan isi vektor x.
>> clear
>> x=0:30:360;
>> x=[x 45 135 225 315];
>> x=sort(x)
x =
Columns 1 through 13
0 30 45 60 90 120 135 150 180 210 225 240 270
Columns 14 through 17
300 315 330 360
29
>> t=x.*pi/180;
>> y1=sin(t); y2=cos(t);
Selanjutnya kita buat matriks tiga kolom bernama tabel berisi: sudut, sin, dan cos.
>> tabel=[x;y1;y2]';
>> judul=' sudut sin cos';
Ingat, vektor x, y1, dan y2 berupa satu baris; padahal kita ingin menampilkannya
memanjang ke bawah berupa kolom, jadi perlu dilakukan transposisi.
1. Plot 2-Dimensi
Untuk memvisualisasi data secara 2-dimensi ataupun 3-dimensi, kita
menggunakan berbagai command plotting; di mana command yang paling dasar
ialah plot. Anda bisa praktekan contoh berikut ini.
>> x = 1:8; y=[20 22 25 30 28 25 24 22];
>> plot(x,y)
Akan muncul window baru berisi figure hasil plotting. Perhatikan kegunaan dari
ikon yang ada.
Gambar 4
Jendela figure
31
32
Seperti yang Anda lihat, titik (1,20), (2,22), (3,25), (4,30), dst... terhubung
dengan garis lurus. Sekarang Anda bisa coba untuk membalik urutan sintaks dan
mengamati grafik yang dihasilkan!
>> plot(y,x)
Setiap gambar di figure window, bisa Anda print melalui menu FilePrint
(Ctrl+P), atau Anda simpan FileSave (Ctrl+S), ataupun Anda ekspor sebagai
file JPG, EMF, BMP, dsb dengan FileExport.
Untuk menambahkan judul, label, dan grid ke dalam hasil plot Anda,
digunakan command berikut ini.
Tabel 6
xlabel memberi label pada sumbu-x
ylabel memberi label pada sumbu-y
title memberi judul di atas area plot
grid on memunculkan grid di dalam area plot
grid off menghapus grid
Sekarang mari kita lihat contoh plot yang lain. Kita akan memplot kurva
pada rentang hingga .
>> clear
>> x=-3:0.1:3; %inkremen=0.1 agar kurva terlihat mulus
>> y=x.^3;
>> plot(x,y)
>> xlabel('Sumbu X'), ylabel('Sumbu Y')
>> title('Kurva Y=X^3')
>> grid on
33
Gambar 5
Contoh plot: kurva Y = X3
Ketika Anda menggunakan command plot, gambar sebelumnya di figure window
akan terhapus. Lalu bagaimana jika kita ingin memplot beberapa fungsi dalam
satu figure sekaligus? Dalam hal ini kita bisa gunkan command hold.
Tabel 7
hold on untuk ‘menahan’ gambar sebelumnya supaya tak terhapus ketika
ditimpa gambar baru
hold off untuk menonaktifkan command hold
Gambar 6
Hasil plot dengan “hold on”
Gambar 7
Pembagian area plot dengan “subplot”
Tabel 8 (lanjutan)
plot(x,y,’string’) menciptakan plot 2-dimensi dari vektor x versus vektor y,
dengan property yang ditentukan oleh string, sebagai berikut:
Warna Jenis Garis Jenis Point
b biru - utuh . titik
g hijau : titik-titik o lingkaran
r merah -. titik-strip x tanda ×
c biru muda -- putus-putus + tanda +
m ungu * tanda *
y kuning s bujur sangkar
k hitam d permata
w putih v segitiga ke bawah
^ segitiga ke atas
< segitiga ke kiri
> segitiga ke kanan
p segilima
h segienam
36
Misalkan:
plot(x,y,’r-’) memplot x versus y dengan garis utuh warna merah
plot(x,y,’k*’) menempatkan tanda * warna hitam untuk setiap titik x versus y.
plot(x,y,’g--s’) memplot dengan garis putus-putus warna hijau dan
menempatkan tanda bujur sangkar di setiap titik x versus y.
Perlu diingat bahwa ‘string’ dalam plot bersifat opsional. Apabila tidak
dituliskan maka digunakan garis utuh warna biru.
Tabel 8 (lanjutan)
plot(x1,y1,’string1’,x2,y2,’string2’,x3,y3,’string3’, ... )
menciptakan sejumlah plot sekaligus dalam satu area plot: x1
versus y1 dengan property string1, x2 versus y2 dengan property
string2, dan seterusnya
legend(‘ket1’,’ket2’,’ket3’, ...)
menambahkan legenda ke dalam plot yang telah dibuat; ket1
untuk plot pertama, ket2 untuk plot kedua, dan seterusnya
axis off menghilangkan tampilan sumbu koordinat pada plot
axis on menampakkan kembali sumbu koordinat
Berbagai fungsi yang berkaitan dengan plot di atas, berlaku pula untuk plot
diskrit, plot logaritmik dan plot dalam koordinat polar.
37
Tabel 9
stem( ... ) sama dengan plot( ... ), tetapi menampilkan y sebagai data
diskrit
semilogy( ... ) sama dengan plot( ... ), kecuali sumbu-y menggunakan skala
logaritmik (basis 10)
semilogx( ... ) sama dengan plot( ... ), kecuali sumbu-x menggunakan skala
logaritmik
loglog( ... ) sama dengan plot( ... ), tetapi sumbu-x dan sumbu-y
menggunakan skala logaritmik
polar(theta,rho,’string’)
membuat plot dalam koordinat polar dari sudut theta (satuan
radian) versus radius rho, dengan property ditentukan oleh
string
Kini saatnya mencoba berbagai command di atas dalam contoh berikut ini.
Pertama, kita akan mencoba memplot kurva eksponensial negatif seperti pada
contoh subbab 5.1 secara lebih efisien.
>> clear
>> x=linspace(0,5,500);
>> y1=exp(-x); y2=exp(-0.5*x); y3=exp(-0.25*x);
>> y4=exp(-0.1*x);
>> plot(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25',' A=0.1')
38
>> figure
>> semilogy(x,y1,x,y2,x,y3,x,y4)
>> grid on
>> xlabel('sumbu-x'), ylabel('sumbu-y')
>> title('Kurva y = exp(-Ax)')
>> legend('A=1','A=0.5','A=0.25',' A=0.1')
Misalkan kita ingin menyempitkan area plot pada y = 1 hingga saja, maka:
>> axis([0 5 1e-2 1])
Gambar 8
Contoh plot semi-logaritmik
Dalam contoh kedua, kita akan memplot gelombang sinus, cosinus, kotak, dan
gigi gergaji dengan melibatkan command subplot.
39
>> figure
>> t=0:0.05:10;
>> sinus=sin(2*pi*0.25*t);
>> cosinus=cos(2*pi*0.25*t);
>> kotak=square(2*pi*0.25*t);
>> gigi=sawtooth(2*pi*0.25*t);
>> subplot(2,2,1);
>> plot(t,sinus), title('sinus 1/4 Hz')
>> subplot(2,2,2);
>> plot(t,cosinus), title('cosinus 1/4 Hz')
>> subplot(2,2,3);
>> plot(t,kotak), title('kotak 1/4 Hz')
>> subplot(2,2,4);
>> plot(t,gigi), title('gigi gergaji 1/4 Hz')
Gambar 9
Contoh penggunaan subplot
40
Dalam contoh ketiga, kita akan mencoba memplot suatu fungsi matematis dalam
koordinat polar. Diinginkan plot fungsi:
= sin2(3 )
Gambar 10
Contoh plot dengan command “polar”
3. Plot 3-Dimensi
Dalam subbab ini akan dibahas tiga macam plot 3-dimensi: plot garis, plot
permukaan (surface), dan plot kontur.
3.1. Plot Garis
Mari kita mulai dengan plot garis di dalam ruang 3-dimensi. Ini mirip
dengan plot 2-dimensi, tetapi kali ini kita gunakan command plot3( ... ), dan
dibutuhkan vektor z, untuk dimensi ketiga.
41
Gambar 11
Contoh plot 3-dimensi dengan command “plot3”
Perhatikan bahwa command label, title, grid, axis, hold, dan subplot
juga berlaku di sini. Anda juga bisa merotasi gambar 3- dimensi tersebut dengan
cara men-klik ikon rotate dan dragging mouse di atas gambar.
>> t=0:0.1:25;
>> X=sin(t); Y=cos(t); Z=0.5*t;
>> plot3(X,Y,Z)
42
Gambar 12
Contoh penggunaan “plot3”
Sebagai contoh:
>> batas_x = -10:1:10; batas y = -10:4:10;
>> [X,Y] = meshgrid(batas_x,batas_ y);
>> Z = X.^2 + Y.^2;
>> mesh(X,Y,Z);
>> surf(X,Y,Z);
Gambar 13
Hasil plot dengan “mesh” dan “surf”
Amatilah perbedaan hasil antara mesh dan surf ! Anda juga bisa menambahkan
“label” dan “title” seperti plot pada umumnya.
44
Sekarang kita coba contoh yang lain untuk memplot fungsi 3- dimensi
>> x = linspace(-10,10,40); y = x;
>> [X,Y] = meshgrid(x,y);
>> R = sqrt(X.^2+Y.^2);
>> Z = sin(R)./(R+eps);
>> surf(X,Y,Z);
Gambar 14
Plot 3-dimensi dari fungsi sin(r) / r
di sini kita menggunakan variabel eps, untuk mencegah perhitungan 0/0 ketika
R = 0.
3.3. Plot Kontur
Fungsi dua variabel, misalkan bisa kita gambarkan konturnya
dalam dua dimensi dengan command berikut ini:
Tabel 10
contour(X,Y,Z) menggambar kontur dari nilai di Z dengan 10 level.
Elemen Z diterjemahkan sebagai level-level di atas
bidang (x,y)
C = contour(X,Y,Z) menghitung matriks kontur C
contour(X,Y,Z,n) menggambar kontur dengan n level
45
Mari kita gambarkan kontur dari fungsi sin(r)/r di atas, lalu bandingkan dengan
plot permukaannya:
>> figure; contour(X,Y,Z);
>> figure; meshc(X,Y,Z);
Gambar 15
Contoh plot kontur
46
5. Suara
Untuk menyuarakan suatu vektor, ataupun membaca dan menyimpan file
audio berformat WAV, digunakan command berikut ini:
Tabel 11
[x,Fs] = wavread(‘nama_file’)
membaca file WAV dan menyimpannya dalam vektor x, serta
mengembalikan frekuensi sampling Fs dari file tersebut.
Command ini juga bisa membaca file WAV multi kanal
wavwrite(x,Fs,’nama_file’)
menuliskan file WAV dari vektor x dengan frekuensi sampling Fs
sound(x,Fs)
menyuarakan vektor x dengan frekuensi sampling Fs
soundsc(x,Fs)
sama seperti sintaks sebelumnya, namun vektor x terlebih
dahulu diskalakan pada selang
File yang akan dibaca harus tersimpan di direktori Matlab\work, atau Anda harus
merinci drive, direktori dan nama file jika file tersimpan di direktori lain.
Sebagai gambaran, marilah kita dengarkan suara berikut ini.
Pertama, suara pitch 400 Hz berdurasi 2 detik.
>> Fs=8000; %frekuensi sam pling 8 kHz
>> t=0:1/Fs:2; %sinyal berdur asi 2 detik
>> frek=400; %frekuensi sin yal 400 Hz
>> m=cos(2*pi*frek*t);
>> sound(m,Fs); %suara dari m
>> wavwrite(m,Fs,’tone_400Hz.wav’); ...
%Menyimpan vektor m ke dalam file
Pada bab-bab yang lalu, Anda telah belajar berinteraksi dengan MATLAB
menggunakan command window. Sekarang, katakanlah Anda harus
mempergunakan sederetan command secara berulang- ulang di dalam sesi
MATLAB yang berbeda. Akan sangat repot jika Anda harus mengetikkan
command tersebut secara manual di command window setiap kali Anda butuhkan.
Namun dengan M- file, deretan command tersebut bisa Anda simpan dalam
bentuk skrip teks. Kapan saja Anda butuhkan, skrip tersebut bisa
dijalankan/dieksekusi secara otomatis dengan cara mengetikkan nama M-file
yang bersangkutan di command window.
Kali ini kita akan belajar mengenal M-file dengan contoh sederhana.
Namun demikian perlu diketahui bahwa MATLAB sebenarnya merupakan
bahasa pemrograman umum, seperti halnya Basic, C, Java, Pascal, Fortran, dll.
Sehingga dalam bab ini kita akan menitikberatkan pada pelajaran pemrograman
komputer.
1. Membuat M-File
Untuk menuliskan skrip M-file, Anda bisa mulai dengan membuka file
baru. Caranya ialah melalui menu di main window: File Open atau File New M-
file; atau dengan mengklik ikon yang ada di jendela utama. Sebuah jendela editor
akan terbuka seperti gambar berikut ini.
47
48
Gambar 17
Jendela editor M-file
Gambar 16
Jendela editor M-file
Dengan editor ini, kita bisa membuka sejumlah M-file, melakukan editing,
ataupun mencoba menjalankannya dan melakukan debuging (mencari kesalahan
di dalam skrip).
Sementara itu, untuk menyimpan M-file, Anda bisa lakukan dengan menu:
FileSave atau FileSave As; ataupun dengan mengklik ikon yang ada.
Namun demikian, sebenarnya Anda juga bisa menuliskan M-file dengan sebarang
editor teks, seperti MS Word, Notepad, dll.; yang penting Anda menyimpan file
tersebut dengan ekstensi *.m.
2. M-File Sebagai Skrip Program
Pada bagian ini, kita akan menggunakan M-file untuk menjalankan
sederetan command yang kita tuliskan sebagai skrip. Mari kita mulai dengan
skrip sederhana untuk menghitung rata-rata dari lima bilangan. File ini kita
namakan rata_rata.m.
49
Gambar 17
Memilih direktori untuk menjalankan M-file
50
>> clear
>> rata_rata
hasil =
150
>> whos
Name Size Bytes Cl ass
Perhatikan bahwa:
Di dalam M-file, setiap command diakhiri dengan titik-koma supaya hasil
perhitungan di tiap baris tidak ditampilkan di command window. Kecuali
pada hasil perhitungan yang ingin kita tampilkan, tidak diakhiri titik-koma.
Variabel yang didefinisikan di dalam M-file akan disimpan oleh MATLAB
ketika M-file telah dieksekusi.
Di dalam editor, skrip yang kita tuliskan akan memiliki warna tertentu:
hijau untuk komentar
hitam untuk variabel dan command
biru untuk statement pemrograman.
51
Sekarang, marilah kita mencoba M-file lain untuk menghitung sisi miring suatu
segi tiga siku-siku dengan formula phytagoras, menghitung luasnya, dan
kelilingnya.
% Program menghitung segi-3 siku-siku: segi3.m
% Untuk menghitung sisi miring, lu as, dan keliling
% Menghitung keliling
Keliling = Sisi_A + Sisi_B + Sisi_C
Sekarang Anda bisa mencoba sendiri membuat program yang lebih menantang,
seperti menghitung dan memplot fungsi 2 ataupun 3-dimensi dengan M-file.
52
Deklarasi fungsi di M-file harus dilakukan pada baris awal dengan sintaks:
Sebagai contoh awal, kita akan membuat fungsi untuk menghitung sisi miring,
luas, dan keliling segitiga; seperti program yang ada pada contoh sebelumnya.
%Fungsi untuk menghitung segi-3 si ku-siku: segitiga.m
%Untuk menghitung sisi miring, lua s, dan keliling
% Menghitung keliling
Kll = Sisi_A + Sisi_B + Sisi_C;
>> clear
>> [Hyp,Area,Circum]=segitiga(12,1 6)
Hyp =
20
Area =
96
Circum =
48
Dari contoh sederhana tersebut, ada beberapa hal yang perlu kita perhatikan:
Dalam fungsi segitiga, terdapat dua argumen input (Sisi_A, Sisi_B), dan
tiga argumen output (Sisi_C, Luas, Kll).
Ketika dipanggil di command window, kita bisa menggunakan nama
argumen input/output yang berbeda dengan di M-file, namun urutannya
tidak berubah. Di dalam contoh, argumen Sisi_A dan Sisi_B kita isi
dengan bilangan, sementara argumen Sisi_C, Luas, dan Keliling kita
panggil dengan Hyp, Area, dan Circum.
54
>> whos
Name Size Bytes Class
Ketika membuat fungsi dengan M-file, nama file harus sama dengan
nama fungsi yang dideklarasikan dalam sintaks function ...
Aturan penamaan M-file sama dengan penamaan variabel! Lihat
kembali aturan tersebut di subbab 2.2
Perlu diperhatikan bahwa fungsi yang telah kita buat pada dasarnya sama dengan
fungsi yang telah ada di MATLAB, semisal fungsi sin(x) ataupun sqrt(x).
Misalkan kita memanggil fungsi tanpa menyebutkan argumen output, maka
keluaran akan disimpan di ans.
55
% Menghitung kombinasi
kombinasi = factorial(n)/factorial (r)/factorial(n-r);
% Menampilkan keluaran
disp(‘Jumlah kombinasi yang ada = ‘,kombinasi);
Kita coba jalankan program tersebut:
>> hit_komb
Menghitung Kombinasi
---------------------
56
5. Control Statement
Seperti halnya bahasa program pada umumnya, kita bisa mengendalikan
arah program dengan berbagai cara, berupa percabangan arah program
berdasarkan kondisi tertentu, ataupun loop (perhitungan berulang) ketika kita
melakukan iterasi.
5.1. Statement if … elseif … else … end
Ini merupakan statement untuk percabangan program berdasarkan
satu/beberapa kondisi tertentu. Sintaks yang digunakan dalam MATLAB
meliputi:
if kondisi
Command yang dijalankan jika kondisi dipenuhi
end
if kondisi
Command yang dijalankan jika kondisi dipenuhi
else
Dijalankan jika kondisi tidak dipenuhi
end
57
if kondisi1
Command yang dijalankan jika kondisi1 dipenuhi
elseif kondisi2
Dijalankan jika kondisi2 dipenuhi
elseif kondisi3
Dijalankan jika kondisi3 dipenuhi
elseif ...
...dst...
else
Dijalankan jika kondisi manapun tidak dipenuhi
end
jangan keliru menuliskan elseif dan else if, karena keduanya berbeda.
Yang pertama untuk menguji kondisi alternatif setelah kondisi di if
terdahulu tak dipenuhi; tetapi yang kedua berarti nested-if.
58
Switch nama_variabel
case{kondisi1,kondisi2,...}
Dijalankan jika kondisi1 atau kondisi2 dst...
dipenuhi
case{kondisiA,kondisiB,...}
Dijalankan jika kondisiA atau kondisiB dst...
dipenuhi
Case(...)
...dst...
default
Dijalankan jika kondisi manapun tidak dipenuhi
end
Adapun sintaks yang digunakan untuk membatasi loop mirip dengan yang kita
pakai untuk membuat deret (lihat kembali subbab 3.5). Misalkan untuk
menampilkan bilangan kelipatan 3 dari 30 sampai 100.
59
for k = 30:3:100
k
end
Hasilnya ialah:
k =
30
k =
33
k =
...
k =
99
Sementara untuk nilai inkeremen = 1, cukup dituliskan nilai awal dan akhir.
Misalkan untuk mendaftar bilangan bulat dari –10 hingga 10 dan menyimpannya
dalam satu vektor.
Vektor=[];
for k = -10:10 %dalam hal ini inkremen = 1
Vektor = [Vektor k];
end
Vektor
Menghasilkan:
Vektor =
Columns 1 through 13
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2
60
Columns 14 through 21
3 4 5 6 7 8 9 10
y = Ax2
dengan berbagai nilai parameter A, yaitu 0,5 , 1 , 1,5 , dan 2. Dalam hal ini indeks
vektor A kita iterasi dari 1 hingga indeks terakhir.
figure;
x = linspace(-4,4,500); % mendefinisikan nilai x
A = 0.5:0.5:2; % mendefinisikan vektor A
for i = 1:length(A)
y = A(i)* x.^2;
plot(x,y);
hold on;
end
grid on;
Menghasilkan:
Gambar 18
Contoh plot 4 kurva parabola dengan “for”
61
Perhatikan bahwa setiap selesai satu loop, variabel (dalam contoh di atas ialah i)
akan otomatis mengalami inkremen. Demikian seterusnya hingga nilai_akhir
(yaitu length(A)) tercapai dan program dilanjutkan ke baris selanjutnya.
while kondisi
Command untuk dijalankan jika kondisi dipenuhi
end %keluar dari loop jika kondisi tidak dipenuhi
Menghasilkan:
Gambar 19
Contoh plot 4 kurva dengan “while”
for i = 2:floor(N/2)
if rem(N,i) == 0
prima=0;
% ternyata N tidak prima,
% flag 'prima' kita set jadi nol
break; % Keluar dari loop
end
end
64
% Menampilkan hasil:
if prima == 0
disp(N), disp('bukan bilangan prima!');
else
disp(N), disp('adalah bilangan prima!');
end
>> apa_prima(37)
37
adalah bilangan prima!
>> apa_prima(27)
27
bukan bilangan prima!
>> apa_prima(-27)
Masukan harus bilangan bulat positif
Perlu diingat bahwa fungsi apa_prima di atas tidak memiliki argumen keluaran,
karena hasil perhitungan langsung kita tampilkan di layar menggunakan disp,
sehingga hasil tersebut tidak bisa disimpan dalam variabel.
65
function y = hit_taknol(x)
% x : vektor masukan
% y : vektor berisi bilangan tak nol dari x
y = [];
for i=1:length(x)
if x(i)==0
continue
else
y=[y x(i)];
end
end
>> y = hit_taknol(x)
y =
2.0000 -3.6000 3.0000 -0.6000 10.0000
66
Tabel 13
A dan B di sini bisa berupa skalar, vektor, maupun matriks, asalkan ukuran A dan
B sama.
Adapun tabel kebenaran yang digunakan pada setiap operasi logika tersebut ialah
sebagai berikut:
67
Tabel 14
A B A&B A|B xor(A,B) A
nol nol 0 0 0 1
nol bukan nol 0 1 1 1
bukan nol nol 0 1 1 0
bukan nol bukan nol 1 1 0 0
Perlu diperhatikan bahwa operasi logika memiliki prioritas untuk dihitung lebih
dahulu, kemudian diikuti operasi aritmatika, lalu operasi perbandingan.
>> D=A|B|C
D =
1 1 0 1 1
>> E = xor(~A,B)
E =
1 0 1 0 1
Sekarang, mari kita mencoba membuat fungsi untuk menentukan suatu tahun
termasuk kabisat atau tidak. Jangkauan tahun yang bisa dihitung ialah 1900
hingga 2500. Kita ketahui bahwa tahun kabisat terjadi pada tahun-tahun
berkelipatan 4, kecuali tahun akhir abad; namun untuk tahun akhir abad
berkelipatan 400 termasuk kabisat pula.
68
if thn<1900 | thn>2500
disp('Tahun yang valid: 1900 - 2500');
hasil=[];
return
end
if sum(sum(thn<1900 | thn>2500))~= 0
disp('Tahun yang valid: 1900 - 2500');
hasil=[];
return
end
hasil = rem(thn,4)==0 & ...
(rem(thn,100)~=0|rem(thn,400)==0);
70
Sekarang kita bisa coba untuk menentukan tahun kabisat antara 1980 hingga
1990.
>> iskabisat(1980:1990)
ans =
1 0 0 0 1 0 0 0 1 0 0