modul praktikum komputasi geofisika berbasis...

39
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

Upload: others

Post on 18-Aug-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 2: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 3: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 4: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 5: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 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

Page 6: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 7: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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])

Page 8: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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;

Page 9: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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.

Page 10: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 11: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)

Page 12: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 13: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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 =

Page 14: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 15: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 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

Page 16: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 17: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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;

Page 18: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 19: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 20: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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;

Page 21: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 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

Page 22: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 23: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 24: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)

Page 25: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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])

Page 26: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 27: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)')

Page 28: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)

Page 29: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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]

Page 30: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 31: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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.

Page 32: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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')

Page 33: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)

Page 34: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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);

Page 35: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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,

Page 36: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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

Page 37: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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;

Page 38: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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)');

Page 39: MODUL PRAKTIKUM KOMPUTASI GEOFISIKA BERBASIS MATLABgeosciences.unsyiah.ac.id/attachments/article/233/Ganjil... · 2021. 2. 27. · Revisi . 2 | P a g e DAFTAR ISI PERTEMUAN 1

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.