Penuntun Praktikum
Algoritma dan Pemograman
La Hamimu dan Sayahdin Alfat 1 Mei 2017
Kata Pengantar Puji syukur penulis panjatkan kehadirat Allah SWT, karena berkat izin-Nyalah buku penuntun praktikum Algoritma dan Pemograman selesai tepat pada waktunya. Pada kesempatan ini juga, penulis mengucapkan banyak terima kasih kepada pihak-pihak yang telah membantu dalam penyusunan buku penuntun praktikum ini. Buku penuntun praktikum Algoritma dan Pemograman terdiri atas 10 bagian, namun secara aplikatif hanya terdiri atas 9 bagian untuk dipraktekan, yakni; bab 1 hingga bab 9. Dimana pada setiap babnya terdiri atas dua hingga tiga sub-bab. Penyusunan buku praktikum ini didasarkan atas buku "MATLAB Programming For Engineers, Edisi 5 " karangan Stephen J. Chapman. Diharapkan setelah melakukan praktikum Algoritma dan Pemograman, seorang mahasiswa dapat menjadikannya bekal untuk mata kuliah selanjutnya yakni Komputasi Geofisika dan Pemodelan Geofisika. Program yang digunakan di dalam buku ini seluruhnya ditulis dengan menggunakan MATLAB software. Sementara itu, proses editing buku ini menggunakan aplikasi LATEX. Akhirnya dengan segala kekurangan penulis, kami menyatakan bahwa seluruh kesalahan yang terdapat pada buku ini adalah milik kami.
Kendari, 1 Mei 2017
Penulis
1
Daftar Isi Kata Pengantar
1
Daftar Isi
2
Pengantar Algoritma
6
1 Pengantar Matlab 1.1 Pengertian MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Elemen Dasar MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 9 10 11
2 Dasar-Dasar MATLAB 2.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 12 13 15
3 Grafik 2-Dimensi 3.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17 17 21
4 Operator Relasional 4.1 Pengertian . . . . 4.2 Latihan . . . . . 4.3 Tugas . . . . . .
dan Logika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 23 25 27
Faktorisasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29 29 30 34
6 Pencocokan dan Interpolasi Kurva 6.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35 35 42
5 Perulangan dan 5.1 Teori Dasar 5.2 Latihan . . 5.3 Tugas . . .
2
7 Bilangan Komplex dan Grafik 3-Dimensi 7.1 Bilangan Komplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Grafik 3 Dimensi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44 44 45 47
8 Type Data 8.1 Pengantar . . . . . . . 8.1.1 Data Numerik . 8.1.2 Data Karakter . 8.1.3 Data Logika . . 8.1.4 Data Simbolik . 8.2 Tugas . . . . . . . . .
. . . . . .
49 49 50 51 52 52 54
9 Animasi 9.1 Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56 56 58
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
3
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Daftar Gambar 1 2
Simbol-simbol algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritma menghitung luas permukaan menggunakan flow chart . . . . . . .
7 8
1.1
Grafik fungsi y(x) = 2 exp(−0.2x) . . . . . . . . . . . . . . . . . . . . . . . .
10
3.1 3.2 3.3
Grafik fungsi (a) sin x dan (b) cos x pada x = 0 hingga 10 . . . . . . . . . . Grafik fungsi cos x pada x = 0 hingga 10 dengan tipe garis putus-putus . . . Metode plotting grafik dengan menggunakan operator (a) hold on dan (b) subplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafik fungsi f (x) = 2−0.2x+10 menggunakan operator perintah (a) plot(x,y), (b) semilogy(x,y), (c) semilox(x,y), dan (d) loglog(x,y) . . . . . . . .
18 19
20
4.1
Geometri wadah . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
5.1
Grafik perubahan ketinggian dan kecepatan roket dalam fungsi waktu (a) perubahan ketinggian, (b) perubahan kecepatan, (c) perubahan ketinggian, titik bulat menyatakan posisi saat parasut terbuka, dan (d) perubahan kecepatan, titik bulat menyatakan kecepataan saat parasut terbuka . . . . . . . . . . . .
33
3.4
6.1 6.2 6.3 6.4 6.5 6.6
Grafik hubungan x dan y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tiga metode pencocokan kurva (a) least-square regression, (b) linear interpolation, dan (c) curvilinear interpolation [6]. . . . . . . . . . . . . . . . . . . . (a) Tampilan grafik hasil plotting grafik dan (b) Perbandingan tampilan grafik hasil plotting grafik dan pencocokan kurva . . . . . . . . . . . . . . . . . . . Grafik hasil fitting kurva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (a) Tampilan grafik hasil plotting grafik dan (b) Perbandingan tampilan grafik hasil plotting grafik dan pencocokan kurva . . . . . . . . . . . . . . . . . . . (a) Pencocokan kurva menggunakan polinomial order tiga, (b) Interpolasi menggunakan metode linear, dan (c) Interpolasi menggunakan metode spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
35 36 37 39 40
41
7.1
Tampilan grafik melalui operator perintah (a) plot3(x,y,t) dan (b) surf(x,y,z) 47
8.1
Tipe data pada MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
49
Daftar Tabel 4.1 4.2
Operator Relasional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operator Logika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 23
6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8
Data hubungan x dan y . . . . . . . . . . . . . . . . . . . . . Fungsi-fungsi pencocokan atau fitting kurva dalam polinomial Fungsi-fungsi pencocokan atau fitting kurva pada MATLAB . Data stress-strain pada sautu material elastis . . . . . . . . . Data pertumbuhan penduduk dunia tahun 1750 - 2009 . . . . Data hubungan ketinggian dan temperatur . . . . . . . . . . . Data x dan y . . . . . . . . . . . . . . . . . . . . . . . . . . . Data efisiensi bahan bakar dan kecepatan . . . . . . . . . . . .
35 36 36 38 39 42 43 43
5
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Pengantar Algoritma Langkah awal yang sering dilakukan seseorang dalam membuat program yakni membuat algoritma. Di dalam membuat suatu algoritma, seseorang harus memahami konsep fisis atau memiliki instinct fisis yang mantap ditambah dengan penguasan konsep matematika. Tahapan pembuatan algoritma merupakan tahapan penting karena kesalahan yang ada pada proses ini mengakibatkan kesalahan fatal dalam membuat program. Biasanya seorang programer yang ingin menguji apakah hasil yang dikerjakan orang lain (programer lain) sudah berhasil yakni dengan cara hanya melihat algoritma yang ia gunakan, ketimbang melihat source code yang sudah dibuat.
Pengertian Algoritma Algoritma berasal dari nama seorang ilmuan muslim berkebangsaan Arab yakni Abu Ja’far Mohammad ibn Musa Al Khowarizmi (790 - 840). Secara sederhana algoritma dipandang sebagai suatu cara, proses dan tahap untuk menyelesaikan suatu masalah. Algoritma berbeda dengan program karena algoritma bersifat bebas dan dapat diaplikasikan untuk semua bahasa pemograman. Bahasa algoritma merupakan bahasa sederhana yang memungkinkan semua orang bisa mehamaminya. Contoh; hitunglah luas suatu permukaan yang memiliki panjang p dan lebar l. Maka algoritma dari persoalan ini adalah: 1. Peroleh nilai panjang p dan lebar l suatu permukaan. 2. Hitung luas permukaan dengan menggunakan rumus panjang p × lebar l. 3. Tampilkan nilai luas permukaan.
Cara Pembuatan Algoritma Seperti yang sudah dijelaskan sebelumnya mengenai bahasa sederhana algoritma. Algoritma juga dapat dibentuk dalam bentuk pseudo-code dan flow chart atau diagram alir. Pseudocode adalah salah satu bentuk algoritma yang menggunakan notasi untuk menyederhanakan suatu kalimat. Sebagai contoh (menghitung luas suatu permukaan): Algorithm 1 Algoritma menghitung luas permukaan 1: keliling ← p × l
6
Contoh lain; Buatlah algoritma untuk menyelesaikan masalah: 10 X
n
n=1
Secara sederhana persoalan di atas tersebut dapat dinyatakan dalam bentuk: 1 + 2 + 3 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 Adapun pseudo-code: Algorithm 2 Menghitung penjumlahan 1 hinggga 10 1: i ← 1 2: jum ← 0 3: while i ≤ 10 do 4: jum ← jum + i 5: i←i+1 6: write(i) Sedangkan, flow chart merupakan suatu gambaran dari suatu proses. Setiap langkah dari algoritma ditampilkan dalam bentuk simbol. Adapun simbol yang sering digunakan adalah:
Terminator (Tanda mulai atau selesai) Konektor (Tanda penghubung) Proses (Tanda perhitungan)
Keputusan (Pengambilan keputusan)
Proses Terdefenisi (Tanda prosedur) Input/Output (Tanda masukan atau keluaran)
Gambar 1: Simbol-simbol algoritma Sehingga dengan menggunakan simbol-simbol tersebut (gambar 1), algoritma untuk menghitung luas permukaan dengan panjang p dan lebar l adalah: 7
Mulai
Masukan nilai l & p
luas ← p × l
Tampilkan hasil
Selesai
Gambar 2: Algoritma menghitung luas permukaan menggunakan flow chart
8
Bab 1 Pengantar Matlab 1.1
Pengertian MATLAB
Matlab (Matrix Laboratory) merupakan perangkat lunak (software) yang didesain untuk analisis, komputasi numerik, melakukan simulasi dan pemodelan, dll. Software ini pada awalnya didesain untuk menyelesaikan masalah-masalah matermatika yang bersifat dan berbentuk matriks, namun seiring perkembangannya software ini dapat diaplikasi untuk berbagai kasuskasus lain. Secara syntax, bahasa program yang dipakai dalam MATLAB sangat sederhana dan mudah dimengerti, disamping itu juga software ini didukung oleh banyak jenis fungsi dan library. Selain dari beberapa keuntungan tersebut MATLAB juga masih memiliki keuntungan sebaga berikut: 1. Cocok untuk semua sistem komputer. Secara umum MATLAB dapat dipakai/diaplikasikan untuk semua sistem komputer, seperti Windows 2000/XP/Vista/10, Linux (untuk semua varians), dan Macintosh. 2. Sistem plotting mudah. Berbeda dengan software komputasi lainnya yang membutuhkan software tambahan dalam memplotting, MATLAB sudah dilengkapi dengan suatu perangkat yang secara otomatis dapat menampilkan grafik hasil perhitungan. 3. Graphical User Interface (GUI). Salah satu fasilitas yang sangat bagus dan disediakan oleh MATLAB adalah Graphical User Interface(GUI) atau GUIDE MATLAB. Fasilitas ini memungkinkan seorang programer (user ) untuk membuat suatu interface tentang perhitungan yang akan dibuat atau dengan kata lain membuat suatu tambahan interface untuk perhitungan. 4. Sistem compiler , Salah satu keunggulan lain dari MATLAB berupa sistem compiler, sistem ini memungkinkan waktu eksekusi menjadi lebih cepat. Walaupun demikian, MATLAB bukanlah software yang murni (pure) compiler. Dari segi biaya MATLAB bukanlah merupakan software yang gratis (open source). Sehingga user memerlukan biaya yang cukup besar untuk membeli software tersebut ini. Hal ini yang menjadi salah satu kekurangan dari MATLAB. 9
1.2
Elemen Dasar MATLAB
Dalam melakukan perhitungan, MATLAB menyediakan Command windows dan MATLAB editor. Command windows merupakan tampilan kerja utama dan dapat secara langsung menulis dan mengeksekusi program. Contoh: >> A=sin(2*pi) A = -2.4493e-016 atau >> r = 2.; %Jari-jari >> Luas = 2*pi*r Luas = 12.5664 Sedangkan untuk MATLAB editor dapat digunakan untuk menulis, mengeksekusi dan juga dapat menyimpan code-nya. Dalam menyimpan script yang telah dituliskan maka type file berupa "nama_file.m". Contoh: 1 2
%ploting fungsi y(x) = 2*exp(−0.2*x), dimana x memiliki ... %nilai 0 −−−> 10 dengan interval 0.1
3 4 5 6
x=0:0.1:10; y=2*exp(−0.2*x); plot(x,y);
Hasilnya:
Gambar 1.1: Grafik fungsi y(x) = 2 exp(−0.2x)
10
1.3
Tugas
1. Jelaskan fungis-fungsi berikut ini: (a) zeros (b) ones (c) rand (d) randn (e) eye (f) nargin dan nargout (g) realmin dan realmin (h) conj(x) (i) fix(x) (j) rem(x,y) (k) sign(x) (l) floor(x) 2. Jika x0 = 10 m, v0 = 15 m s−1 , dan a = −9.81 m s−1 . Dengan menggunakan persamaan (3.1), tentukanlah nilai x pada t = 5 s. 1 x = x0 + v0 t + at2 2
(3.1)
3. Jika u = 1 dan v = 3, hitunglah: (a) (b) (c) (d)
4u 3v 2v −2 (u+v)2 v3 v 3 −u3 4 πv 2 3
4. Jika x − 2 dan y = −1, hitunglah: √ 4 (a) 2x3 p (b) 4 2y 3 (catatan: gunakan bilangan kompleks untuk menyelesaikan masalah ini) 1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim ke email: algoritma.pemograman.geofisik@gmail. com 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
11
Bab 2 Dasar-Dasar MATLAB 2.1
Pengantar
Secara umum, langkah awal yang harus dilakukan dalam setiap membuat script atau code yakni melakukan tahapan deklarasi atau inisiasi variable. Ada beberapa cara yang biasanya dilakukan dalam menginisiasi variabel: 1. Menempatkan data variabel secara langsung ke dalam script atau code 2. Input data ke dalam variabel melalui keyboard 3. Memanggil atau membaca melalui file yang lain Seorang yang baru mengenal bahasa pemograman, biasanya menggunakan cara 1 dan 2 untuk menginisiasi atau deklarasi variabel. Namun untuk perhitungan-perhitungan yang menggunakan jumlah baris yang banyak, seorang programer biasanya memisahkan program utama dan file variabel. Hal ini sangat penting untuk menghindari kesalahan/kekeliruan dalam proses script-isasi program. Bab ini akan menjelaskan bagaimana menginisiasi variabel melalui cara 1 dan 2. Penginputan variabel haruslah konsisten dengan variabel yang digunakan dalam program utama. Hal ini penting karena dapat menyebabkan kesalah syntax. Kesalahan fatal yang juga sering dilakukan dalam inisasi variabel adalah selalu mencampur adukan antara variabel yang sifatnya real, integer, function, expression, dan character. Biasanya kesalah seperti ini sulit sekali terdeteksi karena biasanya saat eksekusi, memiliki atau ada tampilan hasil. Namun, jika bekerja pada program seperti MATLAB dan SCILAB, menentukan jenis variabel tidak terlalu penting karena pada saat deklarasi variabel secara otomatis MATLAB mendeteksi apakah jenis variabel yang sudah diinput. Contoh: >> >> >> >> >>
a = 40i; a2 = a/2; x = 1; y = 2; A = [1 2 3 4];
12
Suatu variable tidah harus dinyatakan hanya dalam satu huruf, namun dapat juga diungkapkan dalam sebuah kata. Misalnya, jika ingin menyatakan hukum Newton II, maka script dapat dituliskan sebagai berikut: >> massa = 2; >> percepatan = 3; >> gaya = massa*percepatan gaya = 6 Atau bisa menggunakan underscore untuk variabel yang memiliki dua patah kata. Misalnya: >> besar_arus = 2; >> beda_potensial = 3; >> nilai_hambatan = beda_potensial / besar_arus nilai_hambatan = 1.5000 Salah satu bagian yang penting pada MATLAB adalah menyatakan nilai variabel dalam bentuk matrix. Mengungkapkan suatu variabel dalam bentuk matrix sangat sederhana, misalnya: >> A = [1 2 3; 4 5 6; 7 8 9]; A = 1 4 7
2 5 8
3 6 9
matrix A adalah matrix 3 x 3. Dalam membuat matrix, untuk membuat baris gunakan tombol (space) dan kolom gunakan (;).
2.2
Latihan
1. Diberikan matrix:
1.1 −3.2 3.4 0.6 A = 0.6 1.1 −0.6 3.1 1.3 0.6 5.5 0.0
Tentukan: (a) A(2,:) (b) A(:,end)
13
(c) A(1:2,2:end) (d) A(6) (e) A(2:end) (f) A(1:2,2:4) (g) A([1 3],2) (h) A([2 2],[3 3]) 2. Diketahui bahwa:
1 2 3 B = 4 5 6 7 8 9
Nyatakan matrix B dalam bentuk:
7 8 9 B= 4 5 6 1 2 3 4 5 6 B= 4 5 6 4 5 6 4 5 6 B= 4 5 6
3. Nyatakan bilangan 123.4567e2 dalam format: (a) integer (b) floating (c) exponensial (d) pecahan 4 angka dibelakang koma 4. Tentukan nilai x pada persamaan Ax = B, dimana nilai A dan B: 1 2 1 A= 2 3 2 −1 0 1 dan
1 B= 1 0
14
2.3
Tugas
1. Jelaskan apa yang dimaksud dengan fungsi-fungsi berikut ini: short long short e short g long e long g
bank hex rat compact loose +
2. Jika diberikan matrix a dan b, maka jelaskan perbedaan; (a) a * c dan a .* c (b) a \ c dan a .\ c (c) Nyatakan point (a) dan (b) dalam contoh yang sederhana 3. Diketahui:
0.0 0.5 2.1 −3.5 6.0 0.0 −1.1 −6.6 2.8 3.4 A= 2.1 0.1 0.3 −0.4 1.3 1.1 5.1 0.0 1.1 −2.0
Tentukan: (a) Ukuran matrix A (b) Nilai A(1,4) (c) Nilai A(:,1:2:5) (d) Ukuran dan nilai A([1 3], end) 4. Jelaskan apakah nama-nama variabel berikut ini benar atau salah: (a) dog1 (b) 1dog (c) Do_you_know_way_to_san_jo (d) _help (e) What ’s_up? 5. Tentukan nilai x dari persamaan berikut ini: −2.0x1 + 5.0x2 + 1.0x3 + 3.0x4 + 4.0x5 − 1.0x6 2.0x1 − 1.0x2 − 5.0x3 − 2.0x4 + 6.0x5 + 4.0x6 −1.0x1 + 6.0x2 − 4.0x3 − 5.0x4 + 3.0x5 − 1.0x6 4.0x1 + 3.0x2 − 6.0x3 − 5.0x4 − 2.0x5 − 2.0x6 −3.0x1 + 6.0x2 + 4.0x3 + 2.0x4 − 6.0x5 + 4.0x6 2.0x1 + 4.0x2 + 4.0x3 + 4.0x4 + 5.0x5 − 4.0x6 15
= = = = = =
0.0 1.0 −6.0 10.0 −6.0 −2.0
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
16
Bab 3 Grafik 2-Dimensi 3.1
Pengantar
Seperti yang dijelaskan pada BAB 1, MATLAB memiliki keunggulan dari segi plotting grafik dibanding dengan program-program yang lain. MATLAB sudah menyediakan seluruh fungsifungsi yang membantu seorang user untuk memvisualisasikan/plotting data. Berikut ini beberapa fungsi yang disediakan di MATLAB dan kerap kali digunakan, seperti: plot(x,y) loglog(x,y) semilogx(x,y) semilogy(x,y) polar(teta,rho) contour(z) mesh(z) title(’text’) xlabel(’text’) ylabel(’text’)
membuat grafik vektor x terhadap y membuat grafik vektor x terhadap y dengan skala logaritma sumbu-x berskala semilog sumbu-y berskala semilog grafik polar dengan sudut teta dan jari-jari rho grafik kontur dari matriks z grafik 3D dari matriks z memberi judul pada grafik memberi label pada sb-x memberi label pada sb-y
Contoh: 1. Plotlah grafik sin(x) dimana nilai x memiliki rentang 0 hingga 10 >> x=0:0.1:10; >> y=sin(x); >> plot(x,y) 2. Plotlah grafik cos(x) dimana nilai x memiliki rentang 0 hingga 10 >> x=0:0.1:10; >> y=cos(x); >> plot(x,y)
17
(a)
(b)
Gambar 3.1: Grafik fungsi (a) sin x dan (b) cos x pada x = 0 hingga 10 Jika dilihat dari hasil tampilan grafik (Gambar 3.1), kedua code di atas merupakan code standar untuk membuat grafik. Ada banyak alternative atau opsi untuk membuat tampilan grafik lebih menarik. Misalnya: 1 2 3
%=====codeIIIa.m ====== %ploting fungsi y(x) = cos(x), dimana x memiliki ... %nilai 0 −−−> 10 dengan interval 0.1
4 5 6 7
x=0:0.1:10; y=cos(x); plot(x,y,'r−.');
Jika diperhatikan pada code II ada penambahan fungsi ’r-’. Hal ini mengindikasikan grafik yang dihasilkan berupa garis merah putus-putus. Ada banyak pilihan warna yang dapat digunakan dalam MATLAB yakni ’c’, ’m’, ’y’, ’g’, ’b’, ’w’, dan ’k’ yang mewakili cyan, magenta, kuning, hijau, biru, putih, dan hitam. Disamping itu jenis garis grafik dapat divariasikan seperti; ’–’ menyatakan garis putus. ’-’ garis sambung, dan ’.’ garis titik. Terkadang untuk kasus-kasus yang sifatnya pembandingan, diperlukan code perintah untuk menggabungkan beberapa grafik dalam satu gambar grafik. Hal ini bisa menggunakan perintah hold on dan atau subplot. Di dalam menggunakan perintah hold on haruslah diakhiri dengan perintah hold off, ini sangat penting untuk mengakhiri perintah hold on, seperti yang terlihat pada codeIIIb.m. Sedangkan, untuk perintah subplot harus diikuti oleh perintah penempatan posisi grafik. Contoh subplot(x,y,z), dimana x menyatakan jumlah baris, y menyatakan kolom, dan z berupa posisi grafik. Hal ini dapat pada program codeIIIc.m.
18
Gambar 3.2: Grafik fungsi cos x pada x = 0 hingga 10 dengan tipe garis putus-putus
1 2
%=====codeIIIb.m ====== %ploting grafik menggunakan fungsi hold on
3 4 5 6 7 8 9 10 11
clear all; x=0:0.1:10; y1=sin(x); plot(x,y1,'b−.'); hold on; y2=cos(x); plot(x,y2,'r−.'); hold off;
atau 1 2
%=====codeIIIc.m ====== %ploting grafik menggunakan fungsi subplot
3 4 5 6 7 8 9
clear all; x=0:0.1:10; y1=sin(x); y2=cos(x); subplot(2,1,1), plot(x,y1); subplot(2,1,2), plot(x,y2);
19
(a)
(b)
Gambar 3.3: Metode plotting grafik dengan menggunakan operator (a) hold on dan (b) subplot Di dalam pengukapan data-data melalui grafik, beberapa ilmuwan biasanya mengukapkan grafik pada skala logaritmik (logarithmic scale). Pengungkapan grafik menggunakan skala logaritmik bertujuan melihat trend data, sehingga dapat diprediksi data-data selanjutnya. Misalnya; Lukislah grafik yang memiliki persamaan f (x) = 2−0.2x+10 pada interval 0.1 hingga 60 dengan menggunakan skala logaritmik dan bandingkan dengan menggunakan skala biasa (linear). Gunakan 1000 titik data!. Untuk menyelesaikan masalah tersebut, yang anda harus lakukan yakni menggunakan operator perintah semilogy, semilogx, dan loglog (lihat source code codeIIId.m ). Hal ini bertujuan untuk melukiskan grafik dalam skala logaritmik (lihat gambar 3.4).
(a)
(b)
(c)
(d)
Gambar 3.4: Grafik fungsi f (x) = 2−0.2x+10 menggunakan operator perintah (a) plot(x,y), (b) semilogy(x,y), (c) semilox(x,y), dan (d) loglog(x,y)
1 2 3
%=====codeIIId.m ====== %ploting grafik menggunakan operator perintah %plot(x,y), semilogy(x,y), semilogx(x,y), dan loglog(x,y)
4 5
clear all;
20
6
clc;
7 8 9
x=linspace(0.1,60,1000); y=2.^(−0.2*x+10);
10 11 12 13 14
subplot(2,2,1), subplot(2,2,2), subplot(2,2,3), subplot(2,2,4),
3.2
plot(x,y); semilogy(x,y); semilogx(x,y); loglog(x,y);
Tugas
1. Jelaskan kegunaan fungsi-fungsi berikut ini dalam membuat grafik: ’NW’ ’NE’ ’SW’ ’SE’
◦ v d +
barh(x,y) bar(x,y) polar(theta,r) pie(x,explode)
2. Nyatakan fungsi-fungsi ini dalam 1 grafik dimana nilai x antara 0 dan 10 dengan interval 0.1: (a) y(x) = exp−0.5x sin(2x) (b) y(x) = exp−0.5x cos(2x) Untuk fungsi (2a), buatlah grafik fungsi dimana Gunakan warna biru dan garis sambung untuk type garis kurva. Sedangkan untuk fungsi (2b), buatlah grafik fungsi dimana Gunakan warna merah dan garis putus-putus untuk type garis kurva. Lengkapi tampilan kurva ini dengan legenda, judul, label sumbu x dan y, serta grid pada kurva. 3. Buatlah grafik fungsi y(x) = exp−0.5x sin(2x) dalam bentuk bar plot. Nilai x antara 0 dan 10 dengan interval 0.1. Lengkapi tampilan kurva ini dengan legenda, judul, label sumbu x dan y, serta grid pada kurva. 4. Plot fungsi r(θ) = sin(2θ) cos(θ) dimana 0 ≤ θ ≥ 2φ 5. Jika nilai 0 ≤ x ≥ 4. Nyatakan fungsi y(x) = exp−x sin(x) dalam bentuk: (a) linear plot (b) log/linear plot (c) steam plot (d) stair plot (e) bar plot (f) horizontal bar plot (g) compas plot 21
Nyatakan semua plotting tersebut dalam satu grafik (catatan: gunakan subplot)
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
22
Bab 4 Operator Relasional dan Logika 4.1
Pengertian
Pada bab-bab sebelumnya operator relasional dan logika tidak digunakan. Hal ini karena operator relasional dan logika hanya digunakan untuk penyatakan kondisi true atau false. Kedua jenis operator ini sangat penting dalam kasus-kasus tertentu. Operator relasional merupakan operator yang dapat membandingkan nilai atau hasil melalui statement true (1) dan false (0). Berikut ini adalah operator relasional pada MATLAB (Tabel 4.1). Tabel 4.1: Operator Relasional Operator == -= > >= < <=
Penjelasan Sama dengan Tidak sama dengan Lebih dari Lebih dari atau sama dengan Kurang dari Kurang dari atau sama dengan
Tabel 4.2: Operator Logika Operator & | ˜ xor any all
Penjelasan AND OR NOT EXCLUSIVE OR bernilai true jika sembarang elemen bernilai tak nol bernilai true jika semua elemen bernilai tak nol
Berikut ini merupakan contoh penggunaan operator relasional secara sederhana:
23
>> % Jika diberikan nilai (a), (b), (c), dan (d). >> a = 20; >> b = -2; >> c = 0; >> d = 1; >>%Tentukanlah: >> a > b % (a) lebih besar dari (b) ans = 1 >> b > d
% (b) lebih besar (d)
ans = 0 >> c <= d
% (c) lebih kecil atau sama dengan (d)
ans = 1 Sedangkan operator logika merupakan operator yang digunakan untuk membandingkan satu atau dua nilai logika dan diungkapkan dalam statement true atau false. Adapun operator logika berikut (Tabel 4.2): Disamping kedua operator di atas, dalam bahasa pemograman dikenal suatu istilah branches. Istilah ini biasanya digunakan dalam kasus; perulangan (looping) dan iterasi. Operator yang biasa digunakan adalah if, elseif, dan else. Contoh: 1 2 3 4
%=====codeIVa.m ====== %sumber: S.J. Chapman %Buku: MATLAB Programming For Engineers %ploting grafik menggunakan fungsi subplot
5 6 7 8 9 10
clear all; disp('−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−'); disp('Program menentukan akar−akar persamaan kuadrat'); disp('Bentuk persamaan kuadratik A*x^2 + B*x + C = 0'); disp('−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−')
11 12 13 14
a = input ('Masukan koefisien A:'); b = input ('Masukan koefisien B:'); c = input ('Masukan koefisien C:');
15 16
discriminant = b^2 − 4*a*c;
17 18 19
%menghitung nilai akar−akar pers. kuadrat if discriminant > 0
24
x1 = (−b + sqrt(discriminant))/(2*a); x2 = (−b − sqrt(discriminant))/(2*a); disp('Nilai akar−akar kuadrat'); fprintf ('x1 = %f\n', x1); fprintf ('x2 = %f\n', x2);
20 21 22 23 24 25 26 27 28 29 30
elseif discriminant == 0 x1 = (−b /(2*a); x2 = (−b − sqrt(discriminant))/(2*a); disp('Nilai akar−akar kuadrat'); fprintf ('x1 = x2 = %f\n', x1);
31 32 33 34 35 36 37
else real = (−b /(2*a); imajiner = sqrt(abs(discriminant))/(2*a); disp('Nilai akar−akar kuadrat'); fprintf ('x1 = %f + i %f\n', real, imajiner); fprintf ('x1 = %f − i %f\n', real, imajiner);
38 39
end
4.2
Latihan
1. Analisis Temperatur: Diketahui temperatur maksimum (satuan ◦ F) di kota Washington, DC. selama bulan April 2002: 58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69 (sumber: U.S. National Oceanic and Atmospheric Administration). Gunakan operator logika dan relasional untuk menentukan: (a) Jumlah hari yang memiliki temperatur di atas 75◦ (b) Jumlah hari yang memiliki temperatur antara 65◦ dan 80◦ (c) Hari-hari apa saja yang memiliki temperatur antara 50◦ dan 60◦ Penyelesaian 1 2
%=====codeIVb.m ====== %Operator logika dan relasional
3 4 5
clear all; clc;
6 7 8
T = [58 73 73 53 50 48 56 73 73 66 69 63 74 82 84 91 ... 93 89 91 80 59 69 56 64 63 66 64 74 63 69];
9 10 11 12
%Menghitung jumlah hari yang memiliki temeratur di bawah 75 Tbawah75=T>=75; JumlahHari75 = sum(Tbawah75);
13
25
14 15 16
%Menghitung jumlah hari yang memiliki temeratur di antara 65 − 80 Tantara65dan80=(T>=65)&(T<=80); JumlahHari65dan80 = sum(Tantara65dan80);
17 18 19
%Mencari hari yang memiliki temeratur di antara 50 − 60 Tantara50dan60=find((T>=50)&(T<=60));
2. Menentukan volume fluida
Diketahui suatu penampungan air memiliki geometri seperti gambar di samping. Terlihat bahwa diameter bawah sebesar 25 m dan diameter atas 46 m. Ketinggian penampungan air ini adalah 33 m, yang terbagi atas 19 m untuk daerah silinder dan 14 m untuk daerah kerucut. Hitunglah berapa volume air tersebut dgn menggunakan fungsi logika!. Gambar 4.1: Geometri wadah Penyelesaian Dalam menentukan volume air yang memenuhi gambar di atas maka lakukan pembagian daerah: (a) Untuk 0 ≤ h ≤ 19 m, volume air sama dengan volume silinder dengan ketinggian h: V = 12.52 πh
(2.1)
(b) Untuk 19 ≤ h ≤ 33 m, volume air sebanding dengan penambahan volume silinder dengan ketinggian h. 1 V = 12.52 × 19π + π(h − 19)(12.52 + 12.5 × rh + rh2 ) 3 dimana: rh = 12.5 +
1 2
10.5 (h − 19). Gunakan persamaan (2.2) dalam program: 14
%=====codeIVc.m ====== %Menentukan volume air
3 4 5 6 7 8 9 10 11 12
(2.2)
clear all; clc; h=input('Masukan ketinggian air = '); % satuan meter if h > 33 disp('SALAH. Ketinggian air melebihi ketinggian wadah') elseif h < 0 disp('SALAH. Ketinggian air tidak boleh bernilai negatif') elseif h <= 19 Volume = pi*(12.5^2)*h;
26
fprintf('Volume air adalah %7.3f meter^3 \n', Volume)
13 14
else rh = 12.5+10.5+(h−19)/14; Volume = pi*(12.5^2)*19+pi*(h−19)*((12.5^2)+12.5*rh+(rh^2))/3; fprintf('Volume air adalah %7.3f meter^3 \n', V)
15 16 17 18
4.3
end
Tugas 1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
1. Jelaskan perbedaan antara operator berikut ini: (a) & dan && (b) | dan || 2. Jelaskan opeator berikut ini: (a) if, (b) elseif, dan (c) else. 3. Hitulah nilai-nilai berikut ini: (a) 5 >= 5.5 (b) 20 >= 20 (c) xor(17 -pi < 15, pi < 3) (d) true > false (e) ∼∼(35/17) == (35/17) (f) (17 <= 8) == (3/2 == 1) (g) 17.5 && (3.3 > 2.) 4. Jika nilai final Sultan, Ali, Alfatih, dan Keumala adalah 98, 78, 88, dan 80. Tentukanlah nilai mereka jika dikonversi dalam angka, jika standar kelulusan untuk mata kuliah
27
Algortima dan Pemograman: 95 86 76 66 0
< < < < <
nilai nilai ≤ 95 nilai ≤ 86 nilai ≤ 76 nilai ≤ 66
A B C D E
5. Buatlah algoritma untuk program nomor 4!
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
28
Bab 5 Perulangan dan Faktorisasi 5.1
Teori Dasar
Pada MATLAB, penggunaan perintah perulangan sangat penting untuk menyelesaikan suatu rentetan statement yang lebih dari satu. Pada perintah perulangan (looping), terdapat dua bentuk perulangan; perulangan dengan menggunakan while dan perulangan menggunakan for. Kedua perintah ini berbeda satu sama lain. While digunakan untuk melakukan perulangan selama kondisi ekspresi terpenuhi. Begitu kondisi sudah tidak terpenuhi, maka proses perulangan dihentikan. Secara syntax dapat dituliskan sebagai berikut: >> while (kondisi) >> blok_perintah >> end Contoh: Program ini menentukan nilai faktorial dari nilai x sembarang. 1 2
%=====codeVa.m ====== %Menentukan faktorisasi bilangan 5
3 4 5 6 7 8 9 10 11 12 13 14
clear all; clc; a =1; b = 1; x = input('masukan bilangan bulat sembarang':); while(b<=x); a=a*b; b=b+1; end disp('faktorial bilangan x adalah adalah: ' ); disp(a);
Hasil:
29
masukan bilangan bulat sembarang: 10 faktorial bilangan x adalah adalah: 56 Sama halnya dengan while, for digunakan untuk melakukan proses perulangan selama kondisi terpenuhi. Perbedaannya, pada while jumlah perulangannya bergantung kondisi ekspresi. Sedangkan for, jumlah perulangan diketahui. For memiliki syntax sebagai berikut: >> for x (array) >> blok_perintah >> end Contoh perulangan dengan menggunakan operator for: 1 2
%=====codeVb.m ====== %Menentukan penjumlahan angka
3 4 5 6 7 8 9 10 11 12 13
clear all; clc; a =0; x = input('masukan nilai awal: '); y = input('masukan nilai akhir: '); for i=x:y a=a+i; end disp('Jumlah bilangan dari x sampai y adalah: ' ); disp(a);
Secara umum, perulangan sering digunakan pada persoalan-persoalan yang melibatkan deret ataupun matrix. Di sisi yang lain perulangan selalu digunakan juga untuk memperoleh ketelitian hasil yang baik, misalnya untuk menentukan kekonvergenan suatu hasil perhitungan. Pada perulangan, terdapat operator break dan continue. Kedua operator ini berguna untuk mengontrol hasil yang ingin diperoleh pada saat perhitungan.
5.2
Latihan
1. Diketahui persamaan: A=
n X (−1)k k k=1
2k
Jika n = 4 dan n = 20. Hitunglah berapa nilai A. Gunakan operator for-end! Penyelesaian 1 2
%=====codeVc.m ====== %Menentukan nilai A
30
(2.1)
3 4 5 6 7 8 9 10 11 12
clear all; clc; n = input('masukan nilai n: '); A = 0; for k=0:n A=A+(((−1)^k)*k/(2^k)); end disp('Hasil: ' ); disp(A);
2. Buatlah matrix N x N, dimana nilai N merupakan bilangan bulat positif, dengan aturan baris pertama memenuhi a11 = 1 dan a1n = N , baris kedua memiliki aturan a21 = N +1 dan a2n = 2N , dan baris terakhir memenuhi an1 = (N − 1)N + 1 dan ann = N 2 . Solusi: 1 2 3 4 5 6
%=====codeVd.m ====== %Membuat matrix N x N %Aturan: %baris pertama memenuhi a_11 = 1 dan a_1}=N, %baris kedua memiliki aturan a_21 = N+1 dan a_2n=2N, %baris terakhir memenuhi a_n1 = (N−1)N + 1 dan a_nn=N^2
7 8 9 10 11 12 13 14 15
clear all; clc; N = input('masukan bilangan bulat positif: '); Matr = zeros(N,N) for r=1:N Matr(r,1:N)=((r−1)*N+1):r*N; end disp(Matr);
3. Menentukan kecepatan dan ketinggian Suatu roket dengan yang bermassa 0.05 kg terbang dengan ilustrasi lintasannya seperti gambar disamping. Selama t= 0.15 s, arah lintasan roket ke atas dan dengan gaya angkat sebesar 16 N. Setelah t= 0.15 s, roket jatuh. Saat kecepatannya mencapai 20 m s−1 , parasut roket terbuka. Kecepatan roket saat membuka parasut hingga menyentuh tanah konstan yakni sebesar 20 m s−1 . Nyatakan kecepatan dan ketinggian roket dalam fungsi waktu dan posisi dalam bentuk grafik!. Penyelesaian Dalam menyelesaikan persoalan ini, maka yang harus dilakukan adalah membagi waktu terbang roket menjadi tiga bagian: 31
(a) Arah roket ke atas (selama t= 0.15 s). Menurut Hukum II Newton, gaya-gaya yang berkerja pada saat ini dapat dinyatakan dalam: ma = ΣF ma = Fatas − W ma = Fatas − mg
(2.2)
Dari persamaan (2.2), diperoleh bentuk percepatan: a =
Fatas − mg m
(2.3)
Kecepatan dan posisi dapat dinyatakan dalam bentuk: v(t) = v0 + at v(t) = at
(2.4)
dan, 1 h(t) = h0 + v0 t + at2 2 1 2 at h(t) = 2
(2.5)
waktu, posisi, kecepatan dan percepatan pada kondisi ini adalah t1 , h1 , v1 dan a1 (b) Arah roket ke bawah - parasut terbuka. Pada kondisi ini percepatan roket konstan yakni g. Persamaan kecepatan dan posisi dinyatakan dalam: v(t) = v1 + g(t − t1 )
(2.6)
1 h(t) = h1 + v1 (t − t1 ) + g(t − t1 )2 2
(2.7)
waktu, posisi, kecepatan dan percepatan pada kondisi ini adalah t2 , h2 , v2 dan a2 (c) Parasut terbuka - menyentuh tanah. Pada kondisi ini kecepatan konstan dan percepatan tidak ada, sehingga posisi dapat dinyatakan dalam: h(t) = h2 − v(t − t2 )
(2.8)
Gunakan seluruh persamaan-persamaan (2.3), (2.4), (2.5), (2.6), (2.7) dan (2.8) pada MATLAB: 1 2 3 4 5 6 7
%=====codeVe.m ====== %Mengitung kecepatan dan posisi roket clear all; clc; %Deklarasi seluruh variabel: m = 0.05; % massa roket (kg) g = 9.81; % perc. gravitasi (m/s^2) tTerbang = 0.15; % waktu terbang rocket hingga kec = 0 (s)
32
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
Gaya = 16; % Gaya angkat roket (N) KecJatuh = −20; % Kecepatan jatuh roket (m/s) Dt = 0.01; % Step time (s) %Deklarasi keadaan pada saat awal n=1; t(n) = 0; % waktu awal v(n) = 0; % kec awal h(n) = 0; % posisi awal %Keadaan I a1 = (Gaya−m*g)/m; % Percepatan I while t(n) < tTerbang & n < 50000 n = n+1; t(n)=t(n−1)+Dt; v(n)=a1*t(n); h(n)=0.5*a1*t(n)^2; end v1=v(n); h1=h(n); t1=t(n); while v(n) >= KecJatuh & n < 50000 %Keadaan II n = n+1; t(n)=t(n−1)+Dt; v(n)=v1−g*(t(n)−t1); h(n)=h1+v1*(t(n)−t1)−0.5*g*(t(n)−t1)^2; end v2=v(n); h2=h(n); t2=t(n); while h(n) > 0 & n < 50000 %Keadaan III n=n+1; t(n)=t(n−1)+Dt; v(n)=KecJatuh; h(n)=h2+KecJatuh*(t(n)−t2); end subplot(2,2,1), plot(t,h); subplot(2,2,2), plot(t,v); subplot(2,2,3), plot(t,h,t2,h2,'o'); subplot(2,2,4), plot(t,v,t2,v2,'o');
Hasil:
(a)
(b)
(c)
(d)
Gambar 5.1: Grafik perubahan ketinggian dan kecepatan roket dalam fungsi waktu (a) perubahan ketinggian, (b) perubahan kecepatan, (c) perubahan ketinggian, titik bulat menyatakan posisi saat parasut terbuka, dan (d) perubahan kecepatan, titik bulat menyatakan kecepataan saat parasut terbuka
33
5.3
Tugas
1. Jepaskan apa yang dimaksud dengan: (a) break (b) continue (c) factorial (d) for loop (e) tic (f) textread (g) toc (h) while loop 2. Diketahui deret Fibonacci memenuhi: f (1) = 1 f (2) = 2 f (n) = f (n − 1) + f (n − 2)
(3.9)
Dengan menggunakan persamaan (3.9), hitunglah untuk n=10. Gunakan operator perintah while loop. 3. Buatlah algoritma untuk soal nomor (2) menggunakan flow chart!. 4. Diketahui: A =
√
12
m X (−1/3)n n=0
2n + 1
(3.10)
Tentukan nilai (A) untuk m = 5, m = 10 dan m = 20 5. Diketahui: 2
m Y
(2n)2 4 16 36 = 2 · · · · · · (2n)2 − 1 3 15 35 n=1
(3.11)
Dengan menggunakan persamaan (3.11), hitunglah untuk m= 100, m= 100000 dan m = 10000000. 1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
34
Bab 6 Pencocokan dan Interpolasi Kurva 6.1
Pengantar
Terkadang data-data hasil pengukuran atau eksperimen yang dilakukan tidak menunjukan atau menghasilkan bentuk linear (Tabel 6.1 dan Gambar 6.1). Untuk menentukan persamaan garis yang dibentuk oleh data tersebut, maka perlu adanya tahapan interpolasi untuk mencocokan kurva (curve-fitting) (lihat Gambar 6.2). Tujuan dari proses ini adalah melakukan proses data-smoothing, yang berupa proses pendekatan terhadap kecenderungan data-data dalam bentuk persamaan matematis. Pencocokan dan interpolasi kurva merupakan proses yang sangat penting karena bertujuan untuk melihat pola kecenderungan data-data. Penggunaan metode dalam melakukan pencocokan kurva berakibat pada persamaan matematis yang dihasilkan sesuai dengan fenomena fisis. Ada banyak metode yang dilakukan pada saat proses pencocokan dan interpolasi kurva, seperti; metode least square, interpolasi linear, curvilinear interpolation, interpolasi lagrange, metode spline, maupun dengan menggunakan fungssi bessel. Pada bab ini akan dijelaskan salah satu metode pencocokan kurva dengan menggunakan metode polinomial. Gambar 6.1: Grafik hubungan x dan y
Tabel 6.1: Data hubungan x dan y x 0 2 4 6 9 11 12 15 17 19
y 5 6 7 6 9 8 8 10 12 12
35
(a)
(b)
(c)
Gambar 6.2: Tiga metode pencocokan kurva (a) least-square regression, (b) linear interpolation, dan (c) curvilinear interpolation [6]. Metode pencocokan kurva menggunakan polinomial dilakukan dalam dua cara. Pertama, kurva yang dibentuk melewati atau menyentuh seluruh titik data yang ada. Kedua, kurva yang dibentuk tidak harus melewati atau menyentuh seluruh titik data, namun kurva yang dibentuk melalui pendekatan dari seluruh data. Di dalam melakukan prosedur fitting kurva dengan cara polinomial, ada beberapa fungsi yang sering diperkenalkan: Tabel 6.2: Fungsi-fungsi pencocokan atau fitting kurva dalam polinomial Fungsi y = bxm y = b exp (mx) atau y = b10mx y = m ln(x) + b atau y = m log(x) + b 1 y= mx + b
Keterangan Fungsi perpangkatan Fungsi eksponensial Fungsi logaritmik Fungsi reciprocal
Pada MATLAB fungsi-fungsi tersebut dapat dinyatakan dalam bentuk: Tabel 6.3: Fungsi-fungsi pencocokan atau fitting kurva pada MATLAB Fungsi Perpangkatan Eksponensial Logaritmik Reciprocal
= bxm = b exp (mx) = b10mx = m ln(x) + b = m log(x) + b 1 y= mx + b y y y y y
Keterangan p = polyfit(log(x),log(y),1) p = polyfit(x, log(y),1) atau p = polyfit(x,log10(y),1) p = polyfit(log(x),y,1) atau p = polyfit(log10(x),y,1) p = polyfit(x,1./y,1) atau
Contoh 1: Pencocokan atau fitting kurva berdasarkan data Tentukanlah fungsi w(t) yang sesuai dengan data berikut ini: Untuk menyelesaikan masalah di atas maka yang pertama dilakukan adalah melakukan plotting grafik. 36
t w = f(t)
0.0 6.00
0.5 4.83
1.0 3.7
1.5 3.15
2.0 2.41
2.5 1.83
3.0 1.49
3.5 1.21
4.0 0.96
4.5 0.73
5.0 0.64
>> t = 0:0.5:5; >> w = [6 4.83 3.7 3.15 2.41 1.83 1.49 1.21 0.96 0.73 0.64] >> plot(t,w)
(a)
(b)
Gambar 6.3: (a) Tampilan grafik hasil plotting grafik dan (b) Perbandingan tampilan grafik hasil plotting grafik dan pencocokan kurva Jika diamati maka grafik ini (Gambar 6.3a) memenuhi atau mirip dengan fungsi eksponensial. Sehingga dengan menggunakan operator perintah eksponensial, maka fungsi w(t) dapat diketahui. Fungsi w(t) memenuhi fungsi w(t) = b exp(mt), dimana nilai b dan m dapat ditentukan dengan menggunakan code sebagai berikut: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
%=====codeVIa.m ====== %Menentukan fungsi dari suatu data clear all; clc; t=0:0.5:5; w=[6 4.83 3.7 3.15 2.41 1.83 1.49 1.21 0.96 0.73 0.64]; p=polyfit(t,log(w),1); m=p(1); b=exp(p(2)); tm=0:0.1:5; wm=b*exp(m*tm); plot(t,w,'−o',tm,wm,'−−'); xlabel('w'); ylabel('t'); legend('Data','Fitting kurva');
37
Dari hasil tersebut diperoleh pencocokan kurva (Gambar 6.3b) dan nilai m = -0.4580 dan b = 5.9889, sehingga fungsi w(t) memenuhi: w(t) = 5.9889 exp(−0.4580t)
(1.1)
Contoh 2: Hubungan Stress-strain Jika diketahui hubungan tress-strain dari suatu data material elastis (tabel 6.4) memenuhi persamaan (1.2). Tentukan nilai a dan b dari persamaan tersebut! = a + b ln(σ)
(1.2)
Tabel 6.4: Data stress-strain pada sautu material elastis σ (MPa) 6.3 7.76 11.20 14.65 18.1 21.55 25.0
0.11 0.16 0.35 0.48 0.61 0.71 0.85
Karena data stress-strain memenuhi persamaan (1.2), maka gunakakan operator perintah logaritmik p = polyfit(log(x),y,1) Untuk lebih jelasnya perhatikan code berikut ini: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
%=====codeVIb.m ====== %Menentukan variabel (a) dan (b) yang memenuhi persamaan: %epsilon = a + b*ln(sigma) clear all; clc; sigma=[6.3 7.76 11.20 14.65 18.1 21.55 25.0]; epsilon=[0.11 0.16 0.35 0.48 0.61 0.71 0.85]; p=polyfit(log(sigma),epsilon,1); b=p(1); a=p(2); sigmaf=6.3:0.1:25.0; epsilonf=a+b*log(sigmaf); plot(sigma,epsilon,'−o',sigmaf,epsilonf,'−−'); xlabel('\sigma'); ylabel('\epsilon'); legend('Data','Fitting kurva');
Dari code tersebut diperoleh bahwa nilai (a) dan nilai (b) adalah -0.9718 dan 0.5519, sehingga dari nilai-nilai tersebut diperoleh persamaan: = −0.9718 + 0.5519 ln(σ) 38
Gambar 6.4: Grafik hasil fitting kurva
Adapun grafik yang diperoleh setelah pencocokan kurva dapat dilihat pada gambar 6.4. Contoh 3: Pertumbuhan penduduk dunia Data pertumbuhan penduduk dunia pada tahun 1750 hingga 2009: Tabel 6.5: Data pertumbuhan penduduk dunia tahun 1750 - 2009 Tahun Penduduk (juta jiwa)
1750 791
1800 980
1850 1.260
1900 1.650
1950 2.520
1990 5.270
2000 6.060
2009 6.800
Tentukan: 1. Tentukan fungsi eksponensial yang paling baik. Gunakan fungsi tersebut untuk menghitung jumlah populasi pada 1980. 2. Cocokanlah kurva data dengan suatu fungsi polinomial order tiga. Gunakan fungsi tersebut untuk menentukan jumlah populasi pada 1980. 3. Gunakan interpolasi linear dan spline untuk melakukan pencocokan kurva. Hitunglah populasi manusia pada 1975 dengan menggunakan kedua fungsi tersebut. Untuk menyelesaikan poin (1), maka yang pertama dilakukan adalah melakukan plotting kurva. Dari hasil plotting kurva diperoleh gambar 6.5a, sehingga dengan melihat kurva tersebut diperoleh kesimpulan bahwa fungsi yang paling baik adalah dengan menggunakan fungsi reciprocal dan fungsinya memenuhi: Jumlah Penduduk =
1 m ∗ T ahun + b
Adapun variabel (m) dan (b) diperoleh dengan menggunakan code:
39
(1.3)
1 2 3 4 5 6 7 8 9 10 11 12 13
%=====codeVIc.m ====== %Menentukan variabel (m) dan (b) yang memenuhi persamaan: %Jumlah Penduduk = 1/m*Tahun + b clear all; clc; Tahun=[1750 1800 1850 1900 1950 1990 2000 2009]; J_Pddk=[791 980 1260 1650 2520 5270 6060 6800]; p=polyfit(Tahun,1./J_Pddk,1); m=(p(1)); b=p(2); Tahunf=1750:2009; J_Pddkf=1./(m*Tahunf+b); plot(Tahun,J_Pddk,'o',Tahunf,J_Pddkf,'−−'); xlabel('Tahun'); ylabel('Jumlah Penduduk'); legend('Data Asli','Data Fitting Kurva');
Hasil: >> m m = -4.3164e-006 >> b b = 0.0088
Substitusi variabel (m) dan (b) ke persamaan 1.3: Jumlah Penduduk =
1 −4.3164e − 006 × T ahun + 0.0088
(a)
(1.4)
(b)
Gambar 6.5: (a) Tampilan grafik hasil plotting grafik dan (b) Perbandingan tampilan grafik hasil plotting grafik dan pencocokan kurva 40
dengan menggunakan persamaan 1.4, dapat diperoleh jumlah penduduk pada tahun 1980 yakni sebesar 3.937 Juta Jiwa. Point (2), dari hasil plotting awal diketahui bahwa kasus ini memenuhi fungsi reciprocal. Namun jika dilihat dari hasil pada point (1), menunjukan hasil yang belum akurat. Sehingga, diperlukan suatu fungsi polinomial yang berorde n. Pada kasus ini akan menggunakan fungsi polinomial orde tiga. y(x) = a3 x3 + a2 x2 + a1 x + a0 J(t) = a3 t3 + a2 t2 + a1 t + a0
(1.5)
Dimana J = Jumlah Penduduk dan t = tahun. Untuk menentukan koefisien a3 , a2 , a1 , dan a0 , gunakan persamaan 1.5 pada code berikut ini: 1 2 3 4 5 6 7 8 9 10 11 12 13
%=====codeVId.m ====== %Menentukan variabel (m) dan (b) yang memenuhi persamaan: %Jumlah Penduduk = a_3t^3+a_2t^2+a_1t+a_0 clear all; clc; Tahun=[1750 1800 1850 1900 1950 1990 2000 2009]; J_Pddk=[791 980 1260 1650 2520 5270 6060 6800]; p=polyfit(Tahun,J_Pddk,3); Tahunf=1750:2009; J_Pddkf=p(1).*(Tahunf.^3)+p(2).*(Tahunf.^2)+p(3).*(Tahunf)+p(4); plot(Tahun,J_Pddk,'o',Tahunf,J_Pddkf,'−−'); xlabel('Tahun'); ylabel('Jumlah Penduduk'); legend('Data Asli','Data Fitting Kurva');
sehingga diperoleh hasil: J(t) = 1 × 106 t3 − 1 × 106 t2 + 1.0255 × 104 t − 6.2539 × 106
(1.6)
dengan menggunakan persamaan 1.6 diperoleh jumlah penduduk pada tahun 1980 yakni sebesar: 4.456 Juta Jiwa.
(a)
(b)
(c)
Gambar 6.6: (a) Pencocokan kurva menggunakan polinomial order tiga, (b) Interpolasi menggunakan metode linear, dan (c) Interpolasi menggunakan metode spline
41
Point (3), Menghitung jumlah penduduk dengan menggunakan fungsi interpolasi linear dan spline sangatlah mudah. Gunakan operator perintah linear dan spline, seperti pada code berikut ini: persamaan 1.5 pada code berikut ini: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
%=====codeVIe.m ====== %Menentukan jumlah penduduk pada tahun 1975 clear all; clc; Tahun=[1750 1800 1850 1900 1950 1990 2000 2009]; Jpddk=[791 980 1260 1650 2520 5270 6060 6800]; Tahunfi=[1750:1:2009]; JppdkI=interp1(Tahun,Jpddk,Tahunfi,'linear'); JppdkII=interp1(Tahun,Jpddk,Tahunfi,'spline'); subplot(2,2,1), plot(Tahun,Jpddk,'o',Tahunfi,JpddkI,'−−'), xlabel('Tahun'), ylabel('Jumlah Penduduk'), legend('Data Asli','Data Fitting Kurva'); subplot(2,2,1), plot(Tahun,Jpddk,'o',Tahunfi,JpddkII,'−−'), xlabel('Tahun'), ylabel('Jumlah Penduduk'), legend('Data Asli','Data Fitting Kurva');
Adapun untuk mengetahui jumlah penduduk pada tahun 1975, maka pada command windows gunakan perintah JppdkI(226) untuk hasil menggunakan metode interpolasi linear dan JppdkII(226) untuk mentode interpolasi spline. Nilai 226 pada operator perintah tersebut menunjukan bahwa 1975 berada pada kolom ke 226.
6.2
Tugas
1. Jelaskan fungsi-fungsi berikut ini: (a) polyfit (b) polyval (c) linear (d) spline 2. Data hasil pengukuran temperatur air (TB ) pada variasi ketinggian (h) diberikan pada tabel (6.6). Nyatakan hasil pencocokan kurva dalam bentuk TB = mh + b dan gunakan persamaan ini untuk menentukan temperature pada ketinggian 16 ft. Tabel 6.6: Data hubungan ketinggian dan temperatur h(ft) T(F)(ft)
0 212
2000 210
5000 203
7500 198
3. Diberikan data:
42
10000 194
20000 178
26000 168
Tabel 6.7: Data x dan y x y
-5 4.4
-3.4 4.5
-2.0 4
-0.8 3.6
0 3.9
1.2 3.8
2.5 3.5
4 2.5
5.0 1.2
7 0.5
8.5 -0.2
Pertanyaan: (a) Buatlah penocokan kurva dengan polinomial orde pertama. Plotlah data dan hasil pencocokan kurva dalam satu grafik (b) Buatlah penocokan kurva dengan polinomial orde kedua. Plotlah data dan hasil pencocokan kurva dalam satu grafik (c) Buatlah penocokan kurva dengan polinomial orde keempat. Plotlah data dan hasil pencocokan kurva dalam satu grafik 4. Dari hasil pengukuran efisiensi bahan bakar mobil (FE ) pada variasi kecepatan (v) diperoleh data sebagai berikut: Tabel 6.8: Data efisiensi bahan bakar dan kecepatan v (mi/h) FE (mpg)
5 11
15 22
25 28
35 29.5
45 30
55 30
65 27
75 23
Tentukanlah (a) Fitting kurva data dengan menggunakan fungsi polinomial orde dua. Gunakan hasil fungsi tersebut untuk menghitung efisiensi bahan bakar pada kecepatan 60 mi/h (b) Fitting kurva data dengan menggunakan fungsi polinomial orde tiga. Gunakan hasil fungsi tersebut untuk menghitung efisiensi bahan bakar pada kecepatan 60 mi/h (c) Fitting kurva data dengan menggunakan fungsi linear. Gunakan hasil fungsi tersebut untuk menghitung efisiensi bahan bakar pada kecepatan 60 mi/h
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari kamis, hingga pukul 22.00 WITA.
43
Bab 7 Bilangan Komplex dan Grafik 3-Dimensi 7.1
Bilangan Komplex
Bilangan komplex selalu diungkapkan dalam bentuk: c = a + bi
(1.1)
dimana c merupakan bilangan komplex, a dan b merupakan bilangan real dan i merupakan √ −1. Bilangan a biasanya disebut sebagai bagian real dan b merupakan bagian imaginer. Jika bilangan komplex memiliki dua komponen dan dapat diplot dalam sebuah bidang 2D, maka sumbu horizontal dapat merepresentasikan sumbu real dan sumbu vertikal mewakili sumbu imaginer. Dari statement tersebut dapat didefenisikan bahwa bilangan komplex adalah suatu titik (a,b), yang mana sudut yang terbentuk dari titik tersebut disebut sebagai sudut θ. Bilangan komplex juga dapat diungkapkan dalam bentuk vektor r. c = a + bi = r]θ
(1.2)
dimana: a = r cos(θ) b = r sin(θ) √ a2 + b 2 r = b θ = tan−1 a
(1.3) (1.4) (1.5) (1.6)
Pada MATLAB, bilangan komplex sering diungkapkan dalam bentuk: >> c1 = 4 + i*3 c1 = 4.0000 + 3.0000i >> end Dari program ini (MATLAB), secara sederhana dapat diperoleh nilai a, b, r, dan θ, yakni dengan cara sebagai berikut: 44
1 2 3
%=====codeVIIa.m ====== %Menentukan nilai (a), (b), (r), dan theta %Persamaan c = 4 + 3i
4 5 6
clear all; clc;
7 8
c1 = 4 + 3*i;
%persamaan bil. komplex
real_part = real(c1); disp('bagian real :'); disp(real_part);
%bagian real
9 10 11 12 13 14 15 16
imag_part = imag(c1); %bagian imaginer disp('bagian imajiner :'); disp(imag_part);
17 18 19 20
nilai_r = abs(c1); disp('nilai r:'); disp(nilai_r);
%nilai r
21 22 23 24
sudut_theta = angle(c1); %sudut theta disp('sudut theta :'); disp(sudut_theta);
Hasil: bagian real : 4 bagian imajiner : 3 nilai r: 5 sudut theta : 0.6435
7.2
Grafik 3 Dimensi
Dalam MATLAB, visualisasi tiga dimensi hampir sama dengan melakukan visualisasi 2 dimensi. Pada plot dua dimensi, script perintah menggunakan plot(x,y). Sedangkan, untuk plot tiga dimensi menggunakan plot3(x,y,t). Secara umum data yang dapat digunakan untuk dilakukan plotting tiga dimensi adalah sebagai berikut: 1. Data yang terdiri atas dua variabel (x,y), dimana dua variabel ini merupakan fungsi dari suatu variabel bebas (t). 45
2. Data yang sifatnya sebagai variabel bebas (t). Contoh: Jika t bernilai 0 hingga 10. Nyatakanlah kedua persamaan di bawah ini dalam suatu grafik: x(t) = exp−0.2t cos 2t y(t) = exp−0.2t sin 2t
(2.7) (2.8)
Penyelesaian: 1 2 3 4
%=====codeVIIb.m ====== %Plot fungsi: %x(t) = exp(−0.2t)cos(2t) %y(t) = exp(−0.2t)sin(2t)
5 6 7
clear all; clc;
8 9
t = 0:0.1:10;
%variabel bebas
x = exp(−0.2*t).*cos(2*t); y = exp(−0.2*t).*sin(2*t); plot3(x,y,t) title('Plot Tiga Dimensi'); xlabel('x'); ylabel('y'); zlabel('waktu'); grid on;
%variabel terikat %variabel terikat
10 11 12 13 14 15 16 17 18
Ada banyak operator perintah yang digunakan pada plot tiga dimensi yakni; surface, mesh, dan contour. Contoh: Lukislah grafik: 0 ≤ x ≤ 10 dan 0 ≤ y ≤ 10
z(x, y) = sin(x) + sin (y) Penyelesaian: 1 2 3 4
%=====codeVIIc.m ====== %Plot 3D dengan fungsi: %z(x,y) = sin(x) + sin(y) %syarat batas: 0 <= x <= 10 dan 0 <= y <= 10
5 6 7 8 9 10 11 12 13 14 15
clear all; clc; [x,y] = meshgrid(0:0.1:10); z = sin(x) + sin(y); %variabel terikat surf(x,y,z) title('Plot Tiga Dimensi'); xlabel('x'); ylabel('y'); zlabel('z'); grid on;
46
%variabel bebas
(a)
(b)
Gambar 7.1: Tampilan grafik melalui operator perintah (a) plot3(x,y,t) dan (b) surf(x,y,z)
7.3
Tugas
1. Jelaskan perbedaan: (a) Surf (b) Surface (c) Mesh (d) Contour 2. Diketahui fungsi: 2 −y 2
(a) f (x, y) = (x2 + 3y 2 ) exp−x sin x sin y (b) f (x, y) = xy
Plotlah fungsi tersebut dengan perintah surface, mesh, dan contour 3. Diketahui persamaan arus listrik (I) menurut Hukum Kirchhoff adalah: I =
Vin R + j2πf L − j 2πf1 C
Jika R = 100 Ω, L = 0.1 mH, C = 0.25 nF, Vin = 120 V, dan j =
(3.9) √
−1.
(a) Hitung dan plot nilai I pada frekuensi 100 kHz hingga 10 MHz. Gunakan skala linear dan log-linear. (b) Hitung dan plot perubahan sudut fase pada frekuensi 100 kHz hingga 10 MHz. Gunakan skala linear dan log-linear. 47
(c) Plot kedua nilai I dan sudut phase, menggunakan perintah subplot. Gunakan scala log-linear.
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari kamis, hingga pukul 18.00 WITA.
48
Bab 8 Type Data 8.1
Pengantar
Data-data yang tersedia pada MATLAB biasanya direpresentasikan atau disimpan dalam bentuk; skalar, vektor dan matriks. Contoh; >> A = 1; >> B = 1:10; >> C = [1 2 3; 4 5 6];
%Type data skalar %Type data vektor %Type data matriks
Dari contoh di atas, terlihat bahwa seluruh type data tersebut dalam bentuk matriks dua dimensi. Misalnya 1 × 1 untuk data A, 1 × 10 untuk B, dan 2 × 3 untuk C. Dimana kelas data yang digunakan untuk data A, B, dan C adalah double.
Gambar 8.1: Tipe data pada MATLAB
49
Adapun jenis-jenis data yang dapat disimpan pada MATLAB sebagai berikut; (a) data numerik, (b) data karakter, (c) data logika, dan (d) data simbolik (Gambar 8.1).
8.1.1
Data Numerik
Data numerik standar pada MATLAB terdiri atas tiga jenis bilangan yakni bilangan real, integer, dan complex. Bilangan real terbagi atas; double dan single-precision floating-point numbers. Double-precision floating-point numbers menjadi standar bilangan pada MATLAB. Perbedaan kedua jenis bilangan ini terletak pada ketelitiannya, dimana double-precision floating-point numbers memiliki ketelitian sangat tinggi sebesar 15 digit dan single-precision floating-point numbers memiliki ketelitian rendah sebesar 6-7 digit, sebagai contoh; 1. double-precision floating-point numbers >> realmax(’double’) ans = 1.7977e+308 >> realmin(’double’) ans = 2.2251e-308 2. single-precision floating-point numbers >> realmax(’single’) ans = 3.4028e+038 >> realmin(’single’) ans = 1.1755e-038 Bilangan integer atau sering disebut sebagai bilangan bulat, jenis bilangan ini selalu digunakan untuk bilangan-bilagan yang tidak berbentuk pecahan. Ada beberapa jenis bilangan integer yakni; (a) signed integers, yang terdiri atas: int8, int16, int32, dan int64. (b) unsigned integers, terdiri atas: uint8, uint16, uint32 dan uint64. Signed integer dan unsigned integers memiliki perbedaan pada rentang nilai. Contoh, signed integer untuk int8: >> intmax(’int8’) ans = 127 >> intmin(’int8’) ans = -128 Jika dilihat bahwa int8 atau integer 8-bit memiliki rentang -128 hingga 127, yang jika total keseluruh nilainya adalah 256 atau nilai ini setara dengan 28 . Sedangkan pada uint8 50
memiliki rentang 0 hingga 255 dan total keseluruhan nilainya adalah 256 atau 28 , seperti pada code di bawah ini: >> intmax(’uint8’) ans = 255 >> intmin(’uint8’) ans = 0 Sehingga jika menggunakan kondisi tersebut di atas dapat disimpulkan bahwa: jumlah nilai = 2n
(1.1)
dimana nilai n merupakan jumlah bit. Bilangan complex , type standard untuk bilangan complex adalah double atau bilangan real. Contohnya: >> Z = 4+6i Z = 4.0000 + 6.0000i Jika bilangan complex tersebut diubah dalam bentuk bilangan bulat (integer ), maka: >> C = int8(Z) C = 4 + 6i
8.1.2
Data Karakter
Seperti yang sudah dijelaskan sebelumnya bahwa MATLAB hanya merepresentasikan suatu data dalam bentuk skalar, vektor dan matrik. Sehingga dengan menggunakan asumsi tersebut, maka suatu karakter dapat direpresentasikan kedalam 3 bentuk data tersebut. Contoh: >> A = ’Algoritma dan Pemograman’; >> x = double(A) x = Columns 1 through 10 65 108 103 111 114 105 Columns 11 through 20 100 97 110 32 80 101 Columns 21 through 24 97 109 97 110 51
116 109
109 111
97
32
103
114
Dari code di atas, karakter Algoritma dan Pemograman dibangun dari matrik 1×24 yang mana setiap elemennya mewakili setiap kata. >> A(6) ans = i
8.1.3
Data Logika
Pada Bab 4 Operator Relasional dan Logika, disebutkan bahwa operator perintah true menyatakan bernilai 1 dan false bernilai 0. Hal ini menegaskan bahwa data logika pada MATLAB hanya bernilai 1 atau 0. Contoh: >> M = [true false true false] M = 1 0 1 0 Dengan mengacu pada code di atas, dapat dibuat contoh lainnya: >> x = 1:5; >> y = [2 0 1 9 4]; >> x>y ans = 0 1 1 0 1
8.1.4
Data Simbolik
Sama halnya dengan OCTAVE software, MATLAB juga dapat menyelesaikan operasi-operasi yang sifatnya data simbolik, dimana data simbolik merupakan representatif dari suatu fungsi matematik. Contohnya jika diketahui suatu fungsi f (x) = x3 − x2 + 2x − 1, maka pada MATLAB dapat dilakukan hanya dengan menggunakan: >> F = sym(’x^3 - x^2 + 2*x - 1’) F = x^3 - x^2 + 2*x - 1 Penggunaan data simbolik dapat digunakan untuk melakukan operasi matematika langsung, misalnya integral dan differential suatu fungsi, limit, dan lain-lain. Integral dan differential Untuk menentukan integral dan diferensial suatu fungsi dapat dilakukan dengan menggunakan operator perintah diff(f,x,n) dan int(f,x,c,d), dimana f = f (x) adalah suatu 52
fungsi simbolik, x adalah variabel diferensial atau integral, n menjelaskan type diferensial, c dan d merepresentasikan kondisi awal dan akhir. Contoh, Diketahui fungsi: f (x) = x3 − x2 + 2x − 1
(1.2)
Tentukanlah integral yang memiliki syarat batas x = 0 → 3 dan diferensial atau turunan pertama. Solusi, secara analitis persamaan 1.2 dapat diselesaikan dengan sangat mudah. Namun pada sesi ini, penyelesaian persamaan ini dilakukan dengan bantuan MATLAB. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
%=====codeVIIIa.m ====== %Menentukan nilai integral x = 0 hingga 3 dan diferesial dari persamaan: %f(x)=x^{3}− x^{2} + 2x − 1 clear all; clc; syms x; f=x^3− x^2 + 2*x − 1; %fungsi yg diselesaikan n=1; %turunan pertama c=0; %kondisi awal d=3; %kondisi akhir df=diff(f,x,1); %operasi diferensial itf=int(f,x,c,d); %operasi integral disp('differensial pertama:'); disp(df); disp('integral x = 0 hingga 3:'); disp(itf);
Dari code di atas diperoleh: differensial pertama: 3*x^2 - 2*x + 2 integral x = 0 hingga 3: 69/4 Limit Penggunaan data simbolik dapat juga digunakan untuk menghitung nilai limit suatu fungsi. Contoh, tentukan nilai limit: lim
a→∞
2a + b 3a − 4
Solusi
53
(1.3)
>> syms a b; >> f = (2*a+b)/(3*a-4); >> Lim = limit(f,a,inf) Lim = 2/3
8.2
Tugas
1. Jelaskan perbedaan: (a) int8 (b) int16 (c) int32 (d) int64 (e) uint8 (f) uint16 (g) uint32 (h) uint64. 2. Jelaskan apa yang dimaksud dengan: (a) char (b) double (c) single (d) syms (e) int (f) diff 3. Diketahui matrix (M): 1 4 6 M = 3 15 24 2 3 4 Nyatakan matrix (M) dalam bentuk: (a) double-precision floating point, beri nama matrix A (b) single-precision floating point, beri nama matrix B (c) int8, beri nama matrix C (d) uint8, beri nama matrix D 54
(e) Jika matrix A + B, type data yang dihasilkan?, Jelaskan. (f) Jika matrix C + D, type data yang dihasilkan? , Jelaskan 4. Tentukanlah curvature κ dari suatu kurva 2D (koordinat kartesian) yang memenuhi persamaan: κ =
x0 y 00 − y 0 x00 (x02 + y 02 )3/2
(2.4)
Parameter x(t) dan y(t) adalah: x(t) = 2b cos(t) + b cos(2t) y(t) = 2b sin(t) − b sin(2t) catatan: buatlah algoritma dari problem ini 5. Tentukan nilai limit berikut ini: x − 1 →0 et − 1 −a (c) lim t→0 t
(b) lim (1 − sin(2x))1/x
(a) lim
x→0
ln(xn ) x→1 1 − x2
(d) lim
catatan: gunakan operator perintah limit(f,a,c)
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
55
Bab 9 Animasi 9.1
Pengantar
Cara menampilkan suatu data dalam sebuah grafik dua dimensi (2D) ataupun tiga dimensi (3D) sudah dijelaskan pada bab-bab sebelumnya. Namun, ada beberapa perhitungan yang hasil akhirnya diungkapkan dalam suatu tampilan video atau animasi. Visualisasi data melalui animasi sering digunakan dalam kasus tertentu, seperti: penjalaran gelombang, fenomena tumbukan, fenomena kebocoran gas, dll. Dalam mengukapkan data dalam tampilan video, ada dua pendekatan yang sering dilakukan yakni: 1. Menghapus (erasing) dan menggambar ulang (redrawing) 2. Membuat video melalui metode frame Di dalam menggunakan metode menghapus dan menggambar ulang (erasing and redrawing) yang harus dilakukan adalah membuat grafik awal dan mengupdate grafik untuk setiap pertambahan waktu. Sebagai contoh: Buat video untuk fungsi f (x, t) = A(t) sin x, dimana nilai A(t) memenuhi A(t) = cos(t). Jika dilihat amplitudo A(t) merupakan fungsi waktu, dimana setiap perubahan waktu aplitudo gelombang berubah-ubah. Pada visualisasi fungsi ini, lama waktu yang digunakan dan posisi memenuhi kondisi 0 ≤ t ≤ 10, dan 0 ≤ x ≤ 4π. Untuk lebih jelasnya dapat dijelaskan melalui program berikut ini: 1 2 3 4
%=====codeIXa.m ====== %Plot animasi fungsi: %f(x,t)=A(t)sin{x}, dimana A(t)=cos(t) %syarat batas: 0 <= t <= 10 dan 0 <= x <= 4pi
5 6 7 8 9 10 11
clear all; clc; t=0:0.1:10; a = cos(t(1)); x=0:pi/10:4*pi; y=a*sin(x);
%selang waktu
56
12 13 14 15 16 17 18 19 20 21 22 23 24 25
figure(1); hndl=plot(x,y); xlabel=('\bf x'); ylabel=('\bf amp'); title(['\bf Animasi fungsi gelombang pada t = ' num2str(t(1),'%5.2f')]); set(gca,'Ylim',[−1 1]); for ii = 2:length(t); drawnow; a = cos(t(ii)); y=a*sin(x); set(hndl, 'Ydata', y); title(['\bf Animasi fungsi gelombang pada t = ' num2str(t(ii),'%5.2f')]); end
Visualisasi grafik melalui animasi dapat juga ditemui pada kondisi tiga dimensi, seperti pada fungsi berikut ini: f (x, y, t) = A(t) sin(x) sin(y)
(1.1)
dimana A(t) = cos(t). Dalam menyelesaikan kasus ini, penyelesaiannya hampir sama dengan kasus dua dimensi, seperti yang telah dijelaskan pada codeIXa.m. 1 2 3 4
%=====codeIXb.m ====== %Plot animasi 3D fungsi: %f(x,t)=A(t)sin{x}sin{y}, dimana A(t)=cos(t) %syarat batas: 0 <= t <= 10, −3*pi <= y <= 3*pi, dan −3*pi <= x <= 3*pi
5 6 7 8 9 10 11 12 13 14 15 16 17
clear all; clc; t=0:0.1:10; a = cos(t(1)); [x,y]=meshgrid(−3*pi:pi/10:3*pi,−3*pi:pi/10:3*pi); z=a.*sin(x).*sin(y); figure(1); hndl=surf(x,y,z); xlabel=('\bf x'); ylabel=('\bf y'); zlabel=('\bf amp'); title(['\bf Animasi 3D fungsi gelombang pada t = ' num2str(t(1),'%5.2f')]);
18 19 20 21 22 23 24 25 26 27
set(gca,'Zlim',[−1 1]); for ii = 2:length(t); drawnow; a = cos(t(ii)); z=a.*sin(x).*sin(y); set(hndl, 'Zdata', z); title(['\bf Animasi 3D fungsi gelombang pada t = ' ... num2str(t(ii),'%5.2f')]); end
57
Cara kedua untuk membuat animasi yakni dengan metode frame. Keunggulan metode ini adalah dapat diputar kembali tanpa melakukan proses eksekusi (running) kembali. Contoh: 1 2 3 4
%=====codeIXb.m ====== %Plot animasi 3D fungsi: %f(x,t)=A(t)sin{x}sin{y}, dimana A(t)=cos(t) %syarat batas: 0 <= t <= 10, −3*pi <= y <= 3*pi, dan −3*pi <= x <= 3*pi
5 6 7 8 9 10 11 12 13 14 15 16 17
clear all; clc; t=0:0.1:10; a = cos(t(1)); [x,y]=meshgrid(−3*pi:pi/10:3*pi,−3*pi:pi/10:3*pi); z=a.*sin(x).*sin(y); figure(1); hndl=surf(x,y,z); xlabel=('\bf x'); ylabel=('\bf y'); zlabel=('\bf amp'); title(['\bf Animasi 3D fungsi gelombang pada t = ' num2str(t(1),'%5.2f')]);
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
set(gca,'Zlim',[−1 1]); m = 1; M(m) = getframe; for ii = 2:length(t); drawnow; a = cos(t(ii)); z=a.*sin(x).*sin(y); set(hndl, 'Zdata', z); title(['\bf Animasi 3D fungsi gelombang pada t = ' ... num2str(t(ii),'%5.2f')]); m = m+1; M(m) = getframe; end movie(M,2);
9.2
Tugas
1. Jelaskan fungsi-fungsi perintah di bawah ini: (a) gca (b) gcf (c) gco (d) set (e) drawnow (f) getframe
58
2. Diketahui ketinggian muka air laut memenuhi persamaan: h(x, y, t) = A cos
2π 2π t− x T L
(2.2)
dimana T merupakan periode gelombang (s), L adalah jarak antara 2 puncak gelombang. Asumsi periode gelombang dan jarak antara puncak gelombang adalah 4 s dan 12 m. Buatlah gerakan gelombang laut secara animasi pada domain −300 m ≤ x ≤ 300 m dan −300 m ≤ y ≤ 300 m dan antara selang waktu 0 s ≤ t ≤ 20 s. Gunakan metode menghapus dan menggambar ulang (erasing and redrawing). 3. Buatlah video dari permasalah no (2)! 4. Buatlah algoritma untuk permasalah nomor (2) dengan menggunaka flow chart!
1. Konsultasikanlah tugas kelompok ini dengan asisten praktikum mata kuliah ini. 2. Mekanisme pengumpulan tugas kelompok ini terlebih dahulu diparaf oleh asisten pembimbing dan dikirim dalam bentuk pdf ke email: algoritma.pemograman.
[email protected] 3. Waktu pengumpulan setiap hari rabu, hingga pukul 18.00 WITA.
59
Bibliografi [1] Abdul Kadir, 2012, Algoritma dan Pemograman Menggunakan C & C++, Andi, Yogyakarta, Indonesia. [2] Edward B. Margab, Shapour Azarm, Balakumar Balachandran, James H. Duncan, Keith E. Herold dan Gregory C. Walsh, 2011, An Engineer’s Guide to MATLAB With Applications Form Mechanical, Aerospace, Electrical, civil dan Biological Systems Engineering, Third Edition, Prentice Hall, New Jersey, USA. [3] James Stewart, 2008, Calculus Early Transcendentals, Sixth Edition, Thomson Brooks/Cole, USA. [4] R.H. Sianipar, 2013, Pemograman MATLAB Dalam Contoh Dan Penerapan, Informatika, Bandung, Indonesia. [5] Stephen J. Chapman, 2016, MATLAB Programming For Engineers, Fifth Edition, Cengage Learning, USA. [6] Steven C. Chapra, 2012, Applied Numerical Method with MATLAB for Engineers and Scientists, Third Edition, Mc Graw-Hill, New York, USA. [7] Suarga, 2005, Fisika Komputasi Solusi Problema Fisika Dengan MATLAB, Andi, Yogyakarta, Indonesia.
60