modul praktikum komputasi geofisika berbasis...
TRANSCRIPT
1 | P a g e
Oleh
DIAN DARISMA, M.T MUHAMMAD YANIS, M.SI
Prodi Teknik Geofisika, Fakultas Teknik Uiversitas Syiah Kuala
2020
MODUL PRAKTIKUM KOMPUTASI GEOFISIKA
BERBASIS MATLAB
Revisi
2 | P a g e
DAFTAR ISI
PERTEMUAN 1 ............................................................................................................................................................ 3
SEJARAH MATLAB ............................................................................................................................................... 3
PENGENALAN MATLAB ...................................................................................................................................... 3
M-FILE MATLAB .................................................................................................................................................... 5
PERTEMUAN 2 ............................................................................................................................................................ 8
MATLAB OPERATOR ............................................................................................................................................ 8
PERTEMUAN 4 .......................................................................................................................................................... 11
OPERASI MATRIKS ............................................................................................................................................. 11
PERTEMUAN 6 .......................................................................................................................................................... 17
IF END .................................................................................................................................................................... 17
PERTEMUAN 7 .......................................................................................................................................................... 20
FOR LOOP ............................................................................................................................................................. 20
PERTEMUAN 8 .......................................................................................................................................................... 23
WHILE LOOPS ...................................................................................................................................................... 23
PERTEMUAN 9 .......................................................................................................................................................... 25
PLOT SEDERHANA .............................................................................................................................................. 25
PERTEMUAN 10 ........................................................................................................................................................ 29
GRID DAN PLOT MULTIPLE DIMENSI ............................................................................................................ 29
PERTEMUAN 11 ........................................................................................................................................................ 35
FUNCTION............................................................................................................................................................. 35
DAFTAR PUSTAKA .................................................................................................................................................. 39
3 | P a g e
PERTEMUAN 1
SEJARAH MATLAB
MATLAB (matrix laboratory) merupakan bahasa pemograman generasi keempat yang
dikembangkan oleh MathWorks. Mulanya MATLAB diciptakan oleh ahli matematika dan
pemograman komputer Cleve Moler berdasarkan dari disertasi doktoralnya. MATLAB berhasil
dikembangkan untuk pertama kalinya Pada tahun 1970-an dan digunakan oleh pihak kampus
Naval Postgraduate School di California pada tahun 1979. Versi awal dari MATLAB merupakan
kalkulator matriks sederhana dengan 71 function. Pada tahun 1980-an, Moler bertemu dengan John
N. Little dan mereka memutuskan untuk memprogram kembali MATLAB dalam bahasa C dan
memasarkannya untuk komputer IBM yang sedang mengganti komputer mainframe pada saat itu.
MATLAB pertama kali merilis produk komersialnya tahun 1984 di Konferensi Automatic Control
di Las Vegas. Penjualan pertama MATLAB berhasil pada tahun berikutnya ketika Nick Trefethen
dari Massachusetts Institute of Technology membeli 10 kopi. Seiring berjalannya waktu,
MATLAB ditulis ulang untuk sistem operasi lainnya oleh Digital Equipment Coorporation, VAX,
Sun Mycrosystems dan untuk PC Unix. Pada tahun 2000, MATLAB menambahkan library
Fortran untuk aljabar linier menggantikan subroutine LINPACK dan EISPACK. Kemudian
MATLAB Parallel Coomputing Toolbox dirilis pada Konferensi Supercomputing 2004 dan dapat
mendukung graphics proccessing units (GPUs) tahun 2010. Hingga saat ini MATLAB telah
meningkatkan user interface dan hal teknis lainnya seperti MATLAB Live Editor notebook.
PENGENALAN MATLAB
Ketika pertama kali menjalankan MATLAB, maka di layar komputer akan muncul layout seperti
pada Gambar 1. Panel pada komputer terdiri dari tiga bagian diantaranya Current Folder,
Command Window, dan Workspace. Current Folder merupakan folder dimana terdapat file yang
sedang kita akses. Command Window merupakan tempat dimana program kita dijalankan atau
dieksekusi. Pada Command Window kita juga dapat melakukan perhitungan sederhana dan
mencari bantuan (ketik “help” dan enter) atau informasi lain terkait dengan fungsi yang kita
inginkan (Gambar 2). Setiap perintah yang akan dijalankan diawali dengan prompt ‘>>’.
Sedangkan Workspace merupakan tempat dimana variabel yang kita gunakan disimpan untuk
sementara. Oleh karena itu perlu diperhatikan bahwa variabel-variabel tersebut harus dihapus
4 | P a g e
terlebih dahulu sebelum menjalan program selanjutnya (biasanya setiap program baru selalu
diawali dengan perintah ‘clear all’ untuk menghapus variabel tersebut.
Gambar 1. Tampilan awal MATLAB.
Gambar 2. Tampilan ketika ingin mencari suatu informasi di MATLAB
Saat bekerja di halaman Command Window atau menjalankan suatu function maka akan tersimpan
suatu varibel seperti contoh ketika mengetik perintah berikut:
>> a = 1
5 | P a g e
MATLAB menambah variabel ke Workspace dan menampilkan hasilnya pada Command
Window.
a =
1
Jika kita ingin menambahkan variabel lain seperti b, c, dan d maka akan muncul seperti berikut
>> b = 2
b =
2
>> c = a + b
c =
3
>> d = cos (c)
d =
-0.9900
Ketika kita tidak menentukan variabel hasil, MATLAB menggunakan variabel ans (kependekan
dari answer), untuk menyimpan hasil perhitungan.
>> sin (c)
ans =
0.1411
Jika kita mengakhiri baris statement dengan semicolon ‘ ; ’, maka hasil dari perhitungan tersebut
tidak akan muncul di Command Window tetapi variabelnya disimpan di Workspace.
M-FILE MATLAB
MATLAB menyediakan suatu fitur untuk menyimpan suatu program yang kita tulis jika suatu
waktu kita ingin menjalankan kembali program tersebut. Caranya cukup mudah yaitu dengan
menuliskan baris program yang kita inginkan di Editor MATLAB dan kemudian di save dengan
nama program yang kita inginkan (Editor -> Save). Ekstensi file yang disimpan berupa .m atau
yang sering dikenal sebagai M-files. Berikut contoh baris program yang dijalankan di Command
6 | P a g e
Window dan diketik ulang di Editor yang disimpan dengan nama program1.m (Gambar 3). Pada
program tersebut terdapat penggunaan variabel ‘%’ dimana hal ini dapat digunakan jika kita ingin
memberikan suatu komentar. Apapun yang ditulis setelah tanda ‘%’ tidak akan dianggap sebagai
program.
Gambar 3. Program yang disimpan sebagai M-file.
Contoh lainnya misalkan kita ingin menyelesaikan persamaan matematik berikut:
𝑥 + 2𝑦 + 3𝑧 = 1
3𝑥 + 3𝑦 + 4𝑧 = 1
2𝑥 + 3𝑦 + 3𝑧 = 2
Maka kita dapat menuliskan baris program di editor sebagai berikut:
A = [1 2 3; 3 3 4; 2 3 3];
b = [1; 1; 2];
x = A\b
Simpan program tersebut dengan nama program2.m. Jalankan program tersebut di Command
Window dengan mengetik program2 sehingga didapatkan
>> program2
x =
-0.5000
1.5000
-0.5000
7 | P a g e
Lakukan cara yang sama untuk menjalankan program berikut, simpan dengan nama program3.m.
x = 0:pi/100:2*pi;
y1 = 2*cos(x);
y2 = cos(x);
y3 = 0.5*cos(x);
plot(x,y1,’--’,x,y2,’-’,x,y3,’:’)
xlabel(’0 \leq x \leq 2\pi’)
ylabel(’Cosine functions’)
legend(’2*cos(x)’,’cos(x)’,’0.5*cos(x)’)
title(’Typical example of multiple plots’)
axis([0 2*pi -3 3])
8 | P a g e
PERTEMUAN 2
MATLAB OPERATOR
Operator adalah simbol yang memberi tahu bahasa pemograman untuk melakukan manipulasi
matematis atau logis tertentu. MATLAB menyediakan jenis-jenis operator berikut –
a. Arithmetic Operators
Operator Keterangan
+ Operator Penambahan, menambahkan dua data
- Operator Pengurangan, bertujuan untuk mengurangi ke dua data
* Operator Penggandaan, gandakan kedua data.
.* Menggandakan tiap elemen
/ Operator Divisi, membagi pembilang dengan pembilang.
./ Membagi tiap elemen
^ Operator pangkat
.^ Memangkatkan tiap elemen
.’ Operator transpos matriks
‘ Operator tanspose konjugat kompleks
Sebagai contoh:
% program aritmatika
% this program performs arithmetic calculation
% assigning values
a = 5;
b = 3;
% Exponentiation
c = a ^ b;
% Multiplication
c = a * b;
% Division
c = a / b;
% Addition
c = a + b;
9 | P a g e
% Subtraction
c = a – b;
b. Relational Operators
Tabel berikut menunjukkan semua operator relasional yang didukung oleh MATLAB.
Operator Keterangan
== Sama dengan
~= Tidak sama dengan
> Besar dari
< Kurang dari
>= Besar dari sama dengan
<= Kurang dari sama dengan
Sebagai contoh:
>> A = [1+i 3 2 4+i];
>> B = [1 3+i 2 4+i];
>> A == B
ans = 1x4 logical array
0 0 1 1
Contoh lainnya:
>> A = [1 12 18 7 9 11 2 15];
>> A <= 12
ans = 1x8 logical array
1 1 0 1 1 1 1 0
>> A(A <= 12)
ans = 1×6
1 12 7 9 11 2
c. Logical Operators
Operator logis di MATLAB hanya bekerja pada nilai logis .true. dan. salah. Tabel berikut
menunjukkan semua operator logis yang didukung oleh MATLAB. Asumsikan variabel A
menampung .true. dan variabel B memegang .false.
10 | P a g e
Operator Keterangan
& Operator AND. Akan menghasilkan nilai 1 jika kedua elemen
memiliki nilai TRUE dan 0 untuk lainnya
| Operator OR. Akan menghasilkan nilai 1 jika salah satu elemennya
TRUE.
~ Operator NOT. Komplemen dari suatu elemen
xor Akan bernilai 1 jika salah satu elemen memiliki nilai berbeda dan
bernilai 0 jika sama
Sebagai contoh:
>> A = [5 7 0; 0 2 9; 5 0 0];
>> B = [6 6 0; 1 3 5; -1 0 0]
>> A & B
ans = 3x3 logical array
1 1 0
0 1 1
1 0 0
Contoh lainnya:
>> A = [5 7 0; 0 2 9; 5 0 0]
>> B = [6 6 0; 1 3 5; -1 0 0]
>> A | B
ans = 3x3 logical array
1 1 0
1 1 1
1 0 0
11 | P a g e
PERTEMUAN 4
OPERASI MATRIKS
Matriks merupakan elemen dasar di MATLAB yang memiliki sejumlah m baris dan n kolom.
Matriks di MATLAB ditanda dengan ‘[]’ atau ‘()’. Jika suatu matriks memiliki dimensi 1 x n maka
disebut vektor baris sedangkan jika memiliki dimensi m x 1 disebut vektor kolom. Sebagai contoh,
untuk memasukkan vektor baris v,
>> v = [1 3 4 9 10]
v =
1 3 4 9 10
Dengan cara yang sama, kita dapat membuat vektor kolom namun dengan menambahkan tanda
semicolon (;) antara komponen vektor kolom,
>> w = [1; 3; 4; 9; 10]
w =
1
3
4
9
10
Selain itu, vektor baris dapat diubah menjadi vektor kolom menggunakan operator transpose (‘).
>> w = v’
w =
1
3
4
9
10
Untuk mengakses elemen pertama dari vektor kita dapat mengetik v(1) dan juga untuk elemen
vektor lainnya seperti v(2). Untuk mengakses blok elemen, MATLAB menyediakan notasi (:).
Sebagi contoh, untuk mengakses tiga elemen pertama dari v,
>> v(1:3)
12 | P a g e
ans =
1 3 4
Atau semua elemen setelah elemen ketiga
>> v(3:end)
ans =
4 9 10
Untuk membuat matriks pada MATLAB, caranya juga sangat mudah. Sebagai contoh jika kita
ingin mebuat matriks A,
𝐴 = [1 2 34 5 67 8 9
]
maka,
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
Jika ingin mengetahui suatu elemen dari matriks cukup ketik
>> A(2,1)
ans =
4
Elemen suatu matriks juga dapat diganti dengan bilangan lainnya, seperti berikut:
>> A(3,3) = 0
A =
1 2 3
4 5 6
13 | P a g e
7 8 0
Sering kali kita perlu matriks dalam suatu range tertentu dalam jumlah banyak. Hal ini dapat
dilakukan dengan bantuan (:), sebagai contoh:
> x = 0 : 0.1 : 5;
Maka kita akan mendapatkan 51 elemen data dari 0 sampai 5 dengan spasi 0.1. Selain itu ada cara
lain untuk membuat sejumlah matriks namun dengan menentukan jumlah elemen yang kita
inginkan. Misal,
> theta = linspace (0, 2*pi, 101)
Contoh diatas membuat 101 elemen data antara 0 dan 2π dengan 100 sub-interval.
Untuk membuat matriks baru dengan mengekstrak dari matriks A sebelumnya, maka dapat
dilakukan perintah berikut,
>> B = A([2 3],[1 2])
B =
4 5
7 8
Untuk mengganti baris 1 dan 2 dari matriks A dapat dilakukan dengan perintah berikut,
>> C = A([2 1 3] , :)
C =
4 5 6
1 2 3
7 8 0
Untuk menghapus baris atau kolom dari suatu matriks, dapat menggunakan operator ‘[]’.
>> A(3 , : ) = []
A =
14 | P a g e
1 2 3
4 5 6
Jika ingin menambahkan baris terhadap matriks A di atas, maka
>> A = [A(1, : );A(2, : );[7 8 0]]
A =
1 2 3
4 5 6
MATLAB juga menyediakan beberapa fungsi yang dapat digunakan untuk membuat matriks,
diantara dapat dilihat pada tabel di bawah ini.
size (A) Menentukan dimensi matriks A
eye (m,n) Menghasilkan matriks m x n dengan nilai 1 di diagonal utama
eye (n) Menghasilkan matriks identitas n x n
zeros (m,n) Menghasilkan matriks m x n dengan nilai 0
diag (A) Mengekstrak matriks diagonal A
rand (m,n) Membuat bilangan acak matrik m x n
Untuk fungsi lengkapnya dapat dilihat pada MATLAB dengan mengetik help elmat. Sebagai contoh,
>> b = ones (3,1)
b =
1
1
1
>> eye (3)
ans =
1 0 0
0 1 0
0 0 1
15 | P a g e
>> c = zeros(2,3)
c =
0 0 0
0 0 0
Selain itu dua matriks atau lebih bisa dilakukan penjumlahan pengurangan dan sebagainya. Misal
kita memiliki matriks A dan B,
𝐴 = [1 2 34 5 67 8 9
], 𝐵 = [10 20 3040 50 6070 80 90
]
>> A + B
ans =
11 22 33
44 55 66
77 88 99
>> A*B
ans =
300 360 420
660 810 960
1020 1260 1500
>> A .* B
ans =
10 40 90
160 250 360
490 640 810
16 | P a g e
MATLAB juga menyediakan fungsi untuk memanipulasi matriks, diantaranya dapat dilihat pada
tabel berikut:
det Determinan
diag Matriks diagonal
eig Nilai eigen dan vektor eigen
inv Invers matriks
norm Norm matriks vektor
rank Jumlah baris dan kolom independen linier
17 | P a g e
PERTEMUAN 6
MATLAB menyediakan struktur pengambilan keputusan atau control flow diantaranya if-else-
end, for loops, dan while loops. If merupakan kontrol yang menjalankan kelompok pernyataan
berdasarkan pada syarat logika. While mirip dengan kontrol If namun dengan jumlah iterasi tak
terbatas. Sedangkan For mirip dengan While namun dengan jumlah iterasi terbatas.
IF END
MATLAB mendukung aliran keputusan dengan struktur,
if … end
if … else … end
if … elseif … else … end
Bentuk sederhana dari if statement adalah
if expression
statements
end
Berikut contoh program if-end untuk mencari akar dari suatu bilangan,
% Prompt the user for a number and print its sqrt
num = input(‘Please enter a number: ’);
% If the user entered a negative number, change it
if num < 0
num = abs(num);
end
fprintf(‘The sqrt of %.1f is %.1f\n’,num,sqrt(num))
Statement if-else digunakan untuk memilih diantara dua statement. Bentuk umumnya yaitu
if condition
action1
else
action2
end
Contoh sederhana dari program if-else-end yaitu,
clear; close all;
a=1;
b=3;
18 | P a g e
if a>0
c=1 % If a is positive set c to 1
else
c=0 %if a is 0 or negative, set c to zero
end
% if either a or b is non-negative, add them to obtain c;
% otherwise multiply a and b to obtain c
if a>=0 | b>=0 % either non-negative
c=a+b
else
c=a*b % otherwise multiply them to obtain c
end
Perhatikan contoh program if-else-end untuk menghitung luas lingkaran,
% This script calculates the area of a circle
% It error-checks the user’s radius
radius = input(‘Please enter the radius: ’);
if radius <= 0
fprintf(‘Sorry; %.2f is not a valid radius\n’,radius)
else
area = 2*pi*radius^2
fprintf(‘For a circle with a radius of %.2f,’,radius)
fprintf(‘the area is %.2f\n’,area)
end
Berikut contoh program lainnya penggunaan if-elseif-else-end untuk mencari solusi dari
persamaan kuadrat,
discr = b*b - 4*a*c;
if discr < 0
disp(’Warning: discriminant is negative, roots are imaginary’);
elseif discr == 0
disp(’Discriminant is zero, roots are repeated’)
else
disp(’Roots are real’)
end
19 | P a g e
Contoh lainnya dari penggunaan if-elseif-else yaitu untuk menentukan nilai huruf dari 0 sampai
10. Misal 9 atau 10 untuk ‘A’, 8 untuk ‘B’, 7 untuk ‘C’, 6 untuk ‘D’ dan nilai di bawah 6 merupakan
‘F’. Jika memiliki nilai tidak dalam range 0 hingga 10 maka akan mendapatkan ‘X’ atau dalam
istilah lain tidak valid. Perhatikan contoh berikut,
% First, error-check
if quiz < 0 || quiz > 10
grade = ‘X’;
% If here, it is valid so figure out the
% corresponding letter grade
elseif quiz == 9 || quiz == 10
grade = ‘A’;
elseif quiz == 8
grade = ‘B’;
elseif quiz == 7
grade = ‘C’;
elseif quiz == 6
grade = ‘D’;
else
grade = ‘F’;
end
20 | P a g e
PERTEMUAN 7
FOR LOOP
Pada for loops bentuk statementnya berupa,
for variable = expression
statements
end
Perhatikan contoh sederhana berikut untuk menghitung jumlah suatu deret bilangan,
i=0
for i=1:5
x=i+i
end
Jika kita memiliki persamaan seperti di bawah ini,
∑1
𝑛2
𝑁
𝑛=1
maka program di MATLAB dapat ditulis sebagai berikut,
clear; close all;
% set s to zero so that 1/n^2 can be repeatedly added to it
s=0;
N=10000; % set the upper limit of the sum
for n=1:N % start of the loop
s = s + 1/n^2; % add 1/n^2 to s each iteration
end % end of the loop
fprintf(' Sum = %g \n',s) % print the answer
Suatu persamaan faktorial dengan mengikuti pola berikut N! = 1×2×3× ⋯(N-1) ×N yang dimulai
pada n=1 dan berakhir pada n=N juga dapat dibuat programnya di MATLAB.
clear; close all;
% set the first term in the product
P=1;
21 | P a g e
% set the upper limit of the product
N=20;
% start the loop at n=2 because we already loaded n=1
for n=2:N P=P*n; % multiply by n each time, put the answer back into P
end % end of the loop
fprintf(' N! = %g \n',P) % print the answer
Kemudian kita juga bisa membuat suatu persamaan rekursi dibawah ini ke dalam MATLAB,
𝑓(𝑥) = ∑ 𝑎𝑛𝑥𝑛
∞
𝑛=1
dimana
𝑎1 = 1; 𝑎𝑛+1 =2𝑛 − 1
2𝑛 + 1𝑎𝑛
maka program MATLAB dapat ditulis sebagai berikut,
clear; close all;
% put the first element into the array
a(1)=1;
% the first one is loaded, so let's load 19 more
N=19;
for n=1:N % start the loop
a(n+1)=(2*n-1)/(2*n+1)*a(n); % the recursion relation
end
disp(a) % display the resulting array of values
Kasus lainnya jika kita ingin menambahkan suatu bilangan pada matriks, dengan menjumlahkan
semua bilangan pada setiap baris dari suatu file, maka kita dapat menuliskan program sebagai
berikut,
% Sums only positive numbers from file
% Reads from the file into a matrix and then
22 | P a g e
% calculates and prints the sum of only the
% positive numbers from each row
load datavals.dat
[r c] = size(datavals);
for i = 1:r
sumrow = 0;
for j = 1:c
if datavals(i,j) >=0
sumrow = sumrow + datavals(i,j);
end
end
fprintf(‘The sum for row %d is %d\n’,i,sumrow)
end
Sebagai contoh, jika file tersebut berupa bilangan berikut,
33 −11 2
4 5 9
22 5 −7
2 11 3
maka hasilnya akan seperti ini:
>> ans
The sum for row 1 is 35
The sum for row 2 is 18
The sum for row 3 is 27
The sum for row 4 is 16
23 | P a g e
PERTEMUAN 8
WHILE LOOPS
Selain penggunaan logic if, juga terdapat penggunaan logic while. Logic ini digunakan pada saat
kita tidak tau sampai berapa kali iterasi diperlukan tetapi dengan syarat kondisi tertentu agar
kondisi looping/pengulangannya berhenti. Sebagai contoh jika kita ingin menyelesaikan
persamaan Σ 1/n2, maka
clear; close all;
term=1 % load the first term in the sum, 1/1^2=1
s=term; % load s with this first term
% start of the loop - set a counter n to one
n=1;
while term > 1e-10 % loop until term drops below 1e-10
n=n+1; % add 1 to n so that it will count: 2,3,4,5,...
term=1/n^2; % calculate the next term to add
s=s+term; % add 1/n^2 to s until the condition is met
end % end of the loop
fprintf(' Sum = %g \n',s)
Terkadang penggunaan while loops bertemu dengan kondisi looping yang tidak terbatas. Oleh
karena itu diperlukan kondi lain dengan penggunaan if conditional dengan menambahkan perintah
break. Perhatikan contoh berikut,
clear; close all;
term=1; % load the first term in the sum, 1/1^2=1
s=term; % load s with this first term
% start of the loop - set a counter n to one
n=1;
while term > 1e-100 % set a ridiculously small term.
% Don't really do this, as you
24 | P a g e
% only have 15 digits of precision.
n=n+1; % add 1 to n so that it will count: 2,3,4,5,...
term=1/n^2;
s=s+term;
if (n > 1000) % Break stop if it is taking too long
disp('This is taking too long. I''m out of here...')
break
end
end % end of the loop
fprintf(' Sum = %g \n',s)
25 | P a g e
PERTEMUAN 9
PLOT SEDERHANA
Salah satu fitur yang sangat berguna di MATLAB yaitu visualisasi data. Penggunaan yang paling
sederhana yaitu bagaimana mengeplot data terhadap sumbu-x dan sumbu-y.
a. Plot Linier
Sebagai contoh jika kita memiliki data x dari 0 hingga 10 dengan spasi 0.01 maka
x = 0: 0.01: 10;
Dan memiliki suatu fungsi y(x)=sin(5x),
y=sin(5*x);
Kedua susunan data tersebut memiliki banyak data yang sama dimana dapat kita periksa dengan
perintah,
length(x)
length(y)
Kemudian data x dan y dapat diplot dengan perintah
plot(x,y);
Jika kita hanya ingin menampilkan sebagian data, maka kita dapat menggunakan perintah
nhalf=ceil(length(x)/2);
plot (x(1:nhalf), y(1:nhalf))
plot (x(nhalf:end), y(nhalf:end))
Batas sumbu-x d y kemudian dapat diatur menggunakan perintah,
axis ([0 10 -1.3 1.3])
Atau jika kita hanya ingin mengatur satu sumbu saja pada sumbu-x, maka
plot (x,y)
xlim ([0 10])
26 | P a g e
atau sumbu-y saja
plot (x,y)
ylim ([-1.3 1.3])
Untuk membuat plot log dan semilog, kita dapat menggunakan perintah semilogx, semilogy, dan
loglog. Sebagai contoh,
close all;
x=0:.1:8;
y=exp(x);
semilogx(x,y);
title('semilogx')
semilogy(x,y);
title('semilogy')
loglog(x,y);
title('loglog')
MATLAB dapat menggambar kurva 3 dimensi dengan perintah plot3. Berikut contoh program
membuat spiral di permukaan bola pada koordinat bola.
clear; close all;
% set the spacing in azimuthal angle
dphi=pi/100;
% set the number of azimuthal trips
N=30;
phi=0:dphi:N*2*pi;
% go from north to south once
theta=phi/N/2;
r=1; % sphere of radius 1
% convert spherical to Cartesian
27 | P a g e
x=r*sin(theta).*cos(phi);
y=r*sin(theta).*sin(phi);
z=r*cos(theta);
% plot the spiral
plot3(x,y,z)
axis equal
b. Pengaturan Plot
Untuk mengganti warna dan pola dari suatu plot, dapat menggunakan perintah
plot (x, y, ’r-’)
Pilihan ‘r-’ menggambarkan bahwa kurvanya berwana merah dengan kurva yang bersambung.
Contoh lainnya yaitu ketika ingin menggunakan warna hijau dengan kurva berupa titik-titik, yaitu
plot (x, y, ’g.’)
Untuk melihat aturan lain maka bisa mengetik help plot di command window. Untuk memberikan
label pada sumbu-x, sumbu-y, dan judul gambar maka bisa mengikuti perintah berikut
xlabel('Distance (m)')
ylabel('Amplitude (mm)')
title('Oscillations on a String')
Kita juga dapat membuat judul berdasarkan bilangan yang kita dapatkan menggunakan perintah
berikut
s=sprintf('Oscillations with k=%g',5)
title(s)
Juga dapat menggunakan sintax LaTeX untuk membuat simbol, subscripts, dan superscripts seperti
coontoh berikut
xlabel('\theta_{12}')
ylabel('F(\theta^{10})')
title('F(\theta)=sin(5 \theta)')
28 | P a g e
c. Mulitple Plot
MATLAB menyediakan perintah supaya dapat plot beberapa grafik menggunakan perintah figure,
sebagai contoh
close all;
x=0:.01:20;
f1=sin(x);
f2=cos(x)./(1+x.^2);
figure
plot(x,f1)
figure
plot(x,f2)
Jika kita ingin overlay plot pada satu grafik, maka dapat menggunakan perintah berikut,
figure
plot(x,f1,'r-')
hold on
plot(x,f2,'b-')
title('Second way')
hold off
Selain itu MATLAB juga menyediakan fitur subplot untuk plot beberapa grafik pada satu gambar.
Perintah yang digunakan yaitu subplot (rows.columns.plot number). Sebagai contoh,
subplot(2,1,1)
plot(x,f1)
subplot(2,1,2)
plot(x,f2)
29 | P a g e
PERTEMUAN 10
GRID DAN PLOT MULTIPLE DIMENSI
a. Grid 2D
Sebelum kira dapat menampilkan data 2 dimensi, kita perlu untuk menentukan array X dan Y pad
daerah yang ingin diplot. Kita perlu mengubah data array satu dimensi x dan y menjadi matriks 2
dimensi X dan Y menggunakan perintah meshgrid dan ndgrid. Sebagai contoh,
clear;close all;
% Define the arrays x and y
% Don't make the step size too small or you will kill the
% system (you have a large, but finite amount of memory)
x=-1:.1:1;
y=0:.1:1.5;
% Use meshgrid to convert these 1-d arrays into 2-d matrices
% of x and y values over the plane
[X,Y]=meshgrid(x,y);
% Get F(x,y) by using F(X,Y). Note the use of .* with X and Y
% rather than with x and y
F=(2-cos(pi*X)).*exp(Y);
% Plot the function
surf(X,Y,F);
xlabel('x');
ylabel('y');
Untuk memahami bagaimana meshgrid mengubah array x dan y satu dimensi menjadi matriks X dan
Y dua dimensi, perhatikan contoh berikut,
x = [1, 2, 3]
y = [4, 5]
30 | P a g e
Perintah [X,Y]=meshgrid(x,y) memberikan hasil
𝑋 = [1 2 31 2 3
] 𝑌 = [4 4 45 5 5
].
Bandingkan matriks tersebut dengan Gambar 3 dimana menunjukkan area x-y. Selain itu
MATLAB juga memiliki perintah ndgrid yang mirip dengan meshgrid namun arah konversinya
berbeda. Perhatikan contoh berikut, [X,Y]=ndgrid(x,y) menghasilkan,
𝑋 = [1 12 23 3
] 𝑌 = [4 54 54 5
]
Gambar 3 Area matriks X terhadap Y
b. Plot Surface
Setelah memahami bagaimana membuat grid dua dimensi, maka perhatikan contoh program
berikut,
clear; close all;
% Make the grid
x=-1:.1:1;y=0:.1:1.5;
[X,Y]=ndgrid(x,y);
F=(2-cos(pi*X)).*exp(Y);
% Now make a surface plot of the function
surf(X,Y,F); % or you can use mesh(X,Y,F) to make a wire plot
31 | P a g e
AZ=30;EL=45;
view(AZ,EL);
title('Surface Plot')
xlabel('x')
ylabel('y')
Perhatikan juga contoh berikut yang dapat mengganti arah sudut plotnya mengunakan perintah
pause,
clear; close all;
x=-1:.1:1;
y=0:.1:1.5;
[X,Y]=ndgrid(x,y);
F=(2-cos(pi*X)).*exp(Y);
surf(X,Y,F);
title('Surface Plot')
xlabel('x')
ylabel('y')
EL=45;
for m=1:100
AZ=30+m/100*360;
view(AZ,EL);
pause(.1); % pause units are in seconds
end
c. Plot Medan Vektor
MATLAB juga dapat mengeplot medan vektor dengan arah panah yang dapat digunakan untuk
memvisualisasikan arah aliran, medan listrik, dan medan magnetik. Perintah yang dapat digunakan
untuk hal tersebut adalah quiver dan program di bawah ini menunjukkan bagaimana medan listirk
dan medan magnetik pada suatu kabel. Sebagai catatan, komponen medan vektor harus dalam
koordinat Kartesian.
32 | P a g e
clear;close
x=-5.25:.5:5.25;y=x; % define the x and y grids (avoid (0,0))
[X,Y]=meshgrid(x,y);
% Electric field of a long charged wire
Ex=X./(X.^2+Y.^2);
Ey=Y./(X.^2+Y.^2);
quiver(X,Y,Ex,Ey) % make the field arrow plot
title('E of a long charged wire')
axis equal % make the x and y axes be equally scaled
% Magnetic field of a long current-carrying wire
Bx=-Y./( X.^2+Y.^2);
By=X./(X.^2+Y.^2);
% make the field arrow plot
figure
quiver(X,Y,Bx,By)
axis equal
title('B of a long current-carrying wire')
% The big magnitude difference across the region makes most arrows too small
% to see. This can be fixed by plotting unit vectors instead
% (losing all magnitude information, but keeping direction)
B=sqrt(Bx.^2+By.^2);
Ux=Bx./B;
Uy=By./B;
figure
quiver(X,Y,Ux,Uy);
axis equal
title('B(wire): unit vectors')
33 | P a g e
% Or, you can still see qualitative size information without such a big
% variation in arrow size by having the arrow length be logarithmic.
Bmin=min(min(B));
Bmax=max(max(B));
% s is the desired ratio between the longest arrow and the shortest one
s=2; % choose an arrow length ratio
k=(Bmax/Bmin)^(1/(s-1));
logsize=log(k*B/Bmin);
Lx=Ux.*logsize;
Ly=Uy.*logsize;
figure
quiver(X,Y,Lx,Ly);
axis equal
title('B(wire): logarithmic arrows')
d. Streamlines
Selain dapat mengeplot arah panah untuk tiap medan vektor, kita juga dapat mengeplot streamline.
Untuk dinamika fluida, streamline menunjukkan jalur fluida jika tiap arah panah
merepresentasikan kecepatan fluida. Sebagai contoh,
clear all;close all
%Define the position arrays x and y
[x,y] = meshgrid(0:0.1:1,0:0.1:1);
%Define the flow velocity arrays u and v
u = x;
v = -y;
%Create a quiver plot of the flow velocity
figure
quiver(x,y,u,v)
34 | P a g e
%Plot streamlines that start at different points along the line y=1.
startx = 0.1:0.1:1;
starty = ones(size(startx));
streamline(x,y,u,v,startx,starty);
35 | P a g e
PERTEMUAN 11
FUNCTION
Fungsi adalah prosedur yang mengembalikan kuantitas tunggal. Suatu fungsi seharusnya tidak
mengubah argumennya. Kuantitas yang dikembalikan dikenal sebagai nilai fungsi, dan
dilambangkan dengan nama fungsi.
a. Fungsi Pada File yang Sama
Fungsi ini merupakan fungsi yang paling sederhana. Pada umumnya fungsi ini hanya berupa
statement tunggal tanpa logic atau loop. Sebagai contoh jika kita ingin membuat fungsi dari
persamaan berikut,
𝑓(𝑥, 𝑦) =sin(𝑥𝑦)
𝑥2 + 𝑦2
clear;close all;
f = @(x,y) sin(x.*y)./(x.^2+y.^2);
x=-8:.1:8;
y=x;
plot(x,f(x,2))
[X,Y]=ndgrid(x,y);
figure
surf(X,Y,f(X,Y))
Simbol @ memberitahu MATLAB bahwa variabel f merupakan fungsi bukan merupakan suatu
nilai numerik. Item dalam tanda ‘( )’ mengindikasikan bahwa fungsi tersebut memiliki dua variabel
x dan y. Kode sin(x.*y)./(x.^2+y.^2 merupakan formula yang digunakan untuk mendapatkan nilai
output.
b. Fungsi Pada M-File
Fungsi M-File bisa disebut sebagai subprogram karena disimpan pada file lain dengan ekstensi .m.
Sebuah fungsi berbeda dari program utamanya karena memerlukan parameter input. Sebagai
contoh suatu fungsi pada file yang berbeda dengan program utamanya,
36 | P a g e
function f=trig(x,y)
f=sin(x.*y)./(x.^2+y.^2);
Baris pertama merupakan fungsi dalam bentuk
function output=name(input)
Kata function merupakan suatu keharusan, output merupakan variabel yang didapatkan dari hasil
perhitungan fungsi tersebut sedangkan input merupakan variabel masukan yang diperlukan agar
fungsi dapat berjalan. Untuk memanggil fungsi tersebut maka diperlukan program utama seperti
di bawah ini,
clear;close all;
h=0.1;
x=-8:h:8;
y=x;
plot(x,trig(x,2))
[X,Y]=ndgrid(x,y);
figure
surf(X,Y,trig(X,Y))
Variabel input dan output pada kedua program di atas masih bersifat lokal seperti variabel f dan h.
Agar kedua variabel tersebut dapat dibaca pada program fungsi dan program utamanya maka dapat
dilakukan dengan sintax berikut,
global f h;
c. Fungsi dengan Multiple Output
Berikut contoh fungsi dengan output lebih dari satu. Fungsi berikut memiliki input berupa integer
n, a dalam nanometer, dan integer NPoints yang menghasilkan tingkat energi dan fungsi gelombang
pada infinite square well dengan lebar a.
function [x,psi,E] = SquareWell(n,a,NPoints)
% Calculate the energy and wavefunction for an
37 | P a g e
% electron in an infinite square well
%
%Inputs: n is the energy level; must be a positive integer
% a is the well width in nanometers
% NPoints is the number of points in the x grid
%
% Outputs: x is the grid for the plot, measured in nanometers
% psi is the normalized wave function
% E is the energy of the state in electron-volts
% Make the x-grid
xmin = 0;
xmax = a;
x = linspace(xmin,xmax,NPoints);
% Wave number for this energy level
k = n * pi / a;
% Calculate the wave function
psi = sqrt(2/a) * sin(k*x);
global hbar m
% Calculate energy in electron-volts
E = n^2*pi^2*hbar^2 / (2*m*(a*1e-9)^2) / 1.6e-19;
Untuk menjalan fungsi di atas maka dapat dilakukan dengan program berikut,
clear; close all;
global hbar m
% Constants in MKS units
hbar = 1.05e-34;
m=9.11e-31;
38 | P a g e
% remember that n must be a positive integer
n=3;
% Set the width to an Angstrom
a=0.1;
% Get the values
[x,psi,Energy] = SquareWell(n,a,100);
% Make the plot and label it
plot(x,psi)
s=sprintf('\\Psi_%g(x); a=%g nm; Energy=%g eV',n,a,Energy);
title(s);
xlabel('x (nm)');
ylabel('\Psi(x)');
39 | P a g e
DAFTAR PUSTAKA
[1]. Attaway, S., 2009, MATLAB: A Practical Introduction to Programming and Problem
Solving. Elsevier.
[2]. Chapman, S. J., 2004, MATLAB Programming for Engineers. Thomson.
[3]. Chapra, S.C. and Canale, R.P., 2006, Numerical Methods for Engineering, 5th Ed., McGraw
Hill.
[4]. Gilat, A., 2004, MATLAB: An introduction with Applications. John Wiley and Sons.
[5]. Moler, C. B., 2004, Numerical Computing with MATLAB. Siam.
[6]. Press, W.H., Flannery, B.P., Teukolsky, S.A., Vetterling, W.T. 1986. Numerical Recipes.
Cambridge University Press.