34
Judul Buku
Bab 3 FUNGSI M-FILE
3.1. Fungsi M-File Penulisan barisan ekspresi dalam MATLAB command window biasanya dilakukan baris perbaris dan biasanya untuk menyimpan barisan perintah dan hasil outputnya dengan menggunkan command diary. Hal ini sangatlah tidak efisien dikarenakan barisan yang telah tersimpan di diary tidak dapat diloadkan kembali seandaianya telah keluar dari MATLAB. Apalagi jika dilakukan banyak sekali perulangan barisan perintah yang sama, misalkan dilakukan pengolahan data dan perhitungan yang samayang melibatkan data atau fungsi yang berbeda. Untuk itu MATLAB menyediakan suatu struktur untuk membuat fungsi anda sendiri atau suatu teknik pemrograman dalam bentuk M-File. Fungsi M-file hampir sama dengan script file dimana keduanya merupakan suatu file teks dengan ekstensi .m. Fungsi M-file ini tidak dimasukkan dalam command window, melainkan suatu file tersendiri yang dibuat dalam editor teks (MATLAB editor/debugger). Suatu fungsi M-File harus mengikuti beberapa aturan. Fungsi M-file juga mempunyai sejumlah sifat penting. Aturan-aturan dan sifat-sifat tersebut meliputi :
FUNGSI M-FILE
35
1. Nama fungsi dan nama file harus identik. Contohnya flipud disimpan dalam file yang bernama flipud.m 2. Pertama kali MATLAB mengeksekusi suatu fungsi M-file, MATLAB membuka file fungsi tersebut dan mengkompilasi perintah-perintah di dalamnya menjadi suatu representasi internal dalam memoriyang mempercepat eksekusi untuk semua pemanggilan berikutnya. Jika fungsi juga melibatkan pemanggilan ke fungsi M-file yang lain, fungsi M-file yang dipanggil itu juga akan dikompilasi ke dalam memori. 3. Baris komentar sampai dengan baris bukan komentar yang pertama adalah teks help yang ditampilkan. Jika anda meminta help, misalnya >>help flipud yang menampilkan 9 baris komentar pertama dari contoh di atas. Baris komentar yang paling atas disebut baris H1 adalah baris yang dicari oleh perintah lookfor. 4. Setiap fungsi memiliki ruang kerjanya sendiri yang berbeda dengan ruang kerja MATLAB. Satu-satunya hubungan antara ruang kerja MATLAB dengan variabel-variabel dalam fungsi adalah variabel-variabel input dan output fungsi. Jika suatu fungsi mengubah nilai dalam bentuk suatu variabel input, perubahan itu hanya tampak dalam fungsi dan tidak mempengaruhi ruang kerja MATLAB. 5. Jumlah dari argument input dan output yang digunakan jika suatu fungsi dipanggil hanya ada dalam fungsi tersebut. 6. Fungsi dapat berbagi variabel dengan fungsi lain, ruang kerja MATLAB dan pemanggilan rekursi untuk dirinya sendiri jika variabelnya dideklarasikan sebagai variabel global. 7. Fungsi M-file berhenti dieksekusi dan kembali ke prompt jika telah mencapai akhir dari M-file atau jika menemui perintah return. Perintah return merupakan cara sederhana untuk menghentikan fungsi sebelum mencapai akhir file. 8. Fungsi M-file dapat memuat lebih dari sebuah fungsi.
36
Judul Buku
3.2. Membentuk M-file Untuk membuat m-file click File di MATLAB command window selanjutnya pilih New dan click M-File dari menu the pulldown. Maka di layar akan ditampilkan MATLAB Editor/Debugger . Selanjutnya di layar ini sapat dibuat /dituliskan argumen-argumen yang diinginkan, dapat diedit penulisannya dan sebaginya. Setelah selesai melakukan pengetikan maka File, pada layar MATLAB Editor/Debugger pilih Save As… . berikan nama yang anda inginkan untuk file tersebut, misalnya firstgraph.m kemudian click Save. Pastikan bahwa file yang disimpan pada direktori yang mudah untuk dipanggil. Sebagai contoh sederhana file dalam script adalah Contoh 1. % Script file firstgraph. x = pi/100:pi/100:10*pi; y = sin(x)./x; plot(x,y) grid
Untuk mengesekusi file script di atas maka Command Window ketikan nama file yang telah disimpan sebelumnya misal firstgraph. Dengan syarat bahwa sebelumnya directori pathnya sudah ditujukan ke tempat file yang disimpan Dari contoh di atas Maka di layar akan muncul.:
FUNGSI M-FILE
37
contoh 2 berikut ini diberikan perintah-perintah untuk menyelesaikan masalah pencarian nilai blok dalam tomografi. % Script blok_tomo.m % untuk mencari nilai blok tomografi x=110;y=10;z=175; nilai bloknya
%
koordinat
titik
yang
akan
dicari
dx=1;dy=1;dz=50; % ukuran blok nx=65;ny=35; % Banyak kotak kearah x dan y x0=90;y0=-15;z0=0; % Koordinat awal i=fix((x-x0)/dx)+1; j=fix((y-y0)/dy)+1; k=fix((z-z0)/dz)+1; no_blok=(k-1)*nx*ny + (j-1)*nx+i disp(['no blok = ',num2str(no_blok)])
Untuk mengeksekusi file ini terlebih dahulu anda simpan dengan memilih File Save as … , lalu beri nama blok_tomo.m
38
Judul Buku
. Setelah itu pilih Debug Run . Atau dengan cara mengetikkan nama M-file di command Window MATLAB : blok_tomo no blok = 8471
Jika perintah Matlab tidak diakhiri dengan titik koma , hasil dari perintah itu serta nama variabelnya akan ditampilkan kembali dalam command window . Supaya tampilan lebih bagus , maka untuk menampilkan nama variabel digunakan perintah disp. Perintah echo on membuat perintah-perintah yang dibuat di M-file akan ditampilkan kambali di command window. Perintah input memungkinkan untuk meminta input dari pemakai saat M-file dijalankan. Berikutnya secara umum m-file didefinisikan menggunakan command function. Sintaks standar untuk command function adalah : function[output1,output2,…]= NamaFunction(input1,input2,..) disini output1, output2,…adalah barisan nama output yang akan dimunculkan dilayar command window MATLAB jika NamaFunction dipanggil dengan input argumen adalah input1,input2,… Input tersebut dipanggil dan dikirim by value yaitu perubahan nilai input di dalam function tidak akan ditampilkan diluar (perubahannya hanya lokal. Karenanya jika ingin melakukan assignment fungsi by name, nama output yang ingin dikirim keluar fungsi diletakkan di sebelah kiri (yang dinamakan output1, output2,…) Input dan output di atas adalah optional argumen, artinya dimungkinkan membuat suatu function tanpa input argumen. Jika diberikan tanpa output argumen maka yang ditampilkan adalah eksekusi dari statement/ekspresi terakhir. Sebagai contoh ingin dihitung rata-rata dari beberapa data. Sebagai input adalah suatu data dan output vektor xbar, maka dapat dibentuk M-file nya sebagai berikut :
FUNGSI M-FILE
39
dalam program di atas terlihat adanya penggunaan flow “for”. Bahasan detail tentang control flow :”looping for “akan di bahas pada bab selanjutnya.
3.3. Menjalankan suatu M-file Untuk memanggil atau mengeksekusi M-file ini, yang pertama dilakukan adalah dengan memindahkan path search dari MATLAB compiler. Pada dasarnya proses eksekusi dari compiler MATLAB adalah dengan mencari suatu command atau definisi operator yang ada dan mengeksekusi definisi script atau operator pertama yang ditulis dan ditemui direktori MATLAB (di direktori bin atau toolbox). Misalkan function M-file pada contoh di atas disimpan di E:\Word\radius.m, maka set pathnya dapat dilakukan dengan cara : Dari menu pulldown di MATLAB command editor pilih file kemudian pilih set path maka akan muncul :
40
Judul Buku
dari menu tersebut arahkan current directory ke direktori tempat dimana disimpan script yang ingin dieksekusi dengan cara mengetikkan atau browsing directory ke tempat penyimpanan script yang akan dieksekusi. Jika filenya disimpan di E:\Word maka browse path ke E:\Word. Dari contoh di atas misalkan ingin dihitung rata-rata dari data 1, 2, 3, dan 4, maka functionnya dapat dieksekusi dengan mengetikkan: » x=[1 2 3 4] x = 1
2
3
4
» [xbar]=average(x) xbar = 2.5000
Untuk memberi keterangan mengenai maksud dan tujuan M-File yang kita buat agar orang lain faham dengan M-file tersebut maka perlu adanya help/keterangan, dan untuk membuat help/keterangan pada M-file dapat dilakukan dengan menggunakan command % dari MATLAB. Jika tanda % tersebut diketikkan maka command yang beserta dengannya tidak akan dibaca oleh MATLAB. Sebagai contoh misalkan untuk file average di atas dapat dibuat keterangannya dengan mengetikkan di bawah kalimat:
FUNGSI M-FILE
41
Function [xbar]=average(x);
Barisan kalimat berikut : %ini merupakan contoh program m-file %program ini digunakan untuk menghitung rata-rata %contoh penggunaannya adalah %misalkan x=1:10 %kemudian ketikkan [xbar]=average(x); %maka nanti akan diperoleh rata-rata dari data-data tersebut
kemudian simpan kembali di average.m.
3.4. Fungsi Inline dan command Feval MATLAB mempunyai command inline yang digunakan untuk mendefinisikan atau menuliskan suatu fungsi. Command tersebut adalah inline functions. Sebagai contoh misalkan : f = inline('sqrt(x.^2+y.^2)','x','y') f = Inline function: f(x,y) = sqrt(x.^2+y.^2)
Fungsi tersebut di atas dapat dijalankan dengan cara biasa yaitu : f(3,4) ans = 5
Selain itu fungsi tersebut juga dapat dijalankan untuk tipe array. Misalkan seperti contoh di bawah ini : A = [1 2;3 4]
42
Judul Buku
A = 1
2
3
4
dan B = ones(2) B = 1
1
1
1
maka C = f(A, B) C = 1.4142 2.2361 3.1623 4.1231
Dalam pembahasan sebelumnya anda telah mempelajari tentang bagamaimana membuat suatu fungsi file. Beberapa fungsi mengambil input argumen dari fungsi lainnya, yang berupa string. Untuk menjalankan fungsi khusus tersebut yang namanya disebutkan oleh string maka digunakan command feval seperti yang ditunjukkan di bawah ini : feval('functname', input parameters of function functname) Sebagai contoh adalah menghitung least common multiple dari dua bilangan bulat. MATLAB mempunyai fungsi built-in lcm. Dan untuk menghitung greatest common divisor MATLAB juga mempunyai fungsi built-in gcd. Maka persamaan yang memenuhi untuk gabungan keduanya adalah : ab = lcm(a, b)gcd(a, b) Untuk menggambarkan penggunaan command feval, dapat dilihat pada contoh m file Mylcm.m berikut ini :
FUNGSI M-FILE
43
function c = mylcm(a, b) % The least common multiple c of two integers a and b. if feval('isint',a) & feval('isint',b) c = a.*b./gcd(a,b); else error('Input arguments must be integral numbers') end
Command feval digunakan dua kali dalam baris kedua. Hal ini digunakan untuk mengecek apakah kedua inputnya integer atau bukan dan operatot logika yang digunkan adalah &. Jika kondisi ini terpenuhi maka least common multiple dikerjakan menggunkan rumus yang disebutkan sebelumnya, sebaliknya akan muncul pesan error. command error, adalah argument dalam bentuk string. Kondisi if else – end yang digunakan akan dibahas lebih detail pada bab berukutnya. Function yang dieksekusi dua kali dari function mylcm adalah isint , yaitu :
function k = isint(x); % Check whether or not x is an integer number. % If it is, function isint returns 1 otherwise it returns 0. if abs(x - round(x)) < realmin k = 1; else k = 0; end
Function baru yang digunakan disini adalah the absolute value function (abs) dan the round function (round).realmin adalah bilangan real positif terkecil di komputer anda.
44
Judul Buku
format long realmin ans = 2.225073858507201e-308 format short
Contoh selanjutnya adalah untuk Trapezoidal Rule yang sering digunakan untuk integrasi numerik dari suatu fungsi yang terdeferensial.pada interval tertentu.
dengan h = b – a. Rumus di atas mudah untuk diimplemetasikan dalam MATLAB
function y = corrtrap(fname, fpname, a, b) % Corrected trapezoidal rule y. % fname - the m-file used to evaluate the integrand, % fpname derivative
the
m-file
used
to
evaluate
the
first
% of the integrand, % a,b - endpoinds of the interval of integration. h = b - a; y=(h/2).*(feval(fname,a)+feval(fname,b))+(h.^2)/12.*( ... feval(fpname,a) - feval(fpname,b));
Masukan parameters a and b bisa dalam bentuk arrays dengan dimensi yang sama. Untuk contoh di atas di ambil integral fungsi sinus dengan interval seperti yang ditunjukkan di bawah ini dalam bentuk array a dan b, yaitu : a = [0 0.1];
FUNGSI M-FILE
45
b = [pi/2 pi/2 + 0.1]; y = corrtrap('sin', 'cos', a, b) y = 0.9910 1.0850
Berikut ini beberapa contoh sederhana di bawah yang bisa dicobakan untuk m-file. 1. Untuk menghitung akar persamaan dari suatu fungsi kuadrat. Dengan persamaan umumnya ax2+bx+c=0 Scriptnya dapat dituliskan sebagai berikut : function [x1,x2]=rootquad(a,b,c) d=b*b-4*a*c; x1=(-b+sqrt(d))/(2*a); x1=(-b-sqrt(d))/(2*a);
2. Misalkan untuk mencari nilai dari harga tertentu dari suatu fungsi yang telah didefinisikan. Misalkan fungsi yang didefinisikan tersebut adalah :
2x ⎛ πx ⎞ ⎛ x ⎞ + cos⎜ ⎟ , maka script untuk program m⎟ − ⎜ ⎝ 2.4 ⎠ ⎝ 2.4 ⎠ 2.4 filenya dapat dituliskan sebagai berikut : 3
function p=coba(x) x=x/2.4; p=x^3-2*x+cos(pi*x);
3. Menghitung jari-jari dan keliling dari suatu dari lingkaran jika diketahui luasnya. function
[r,c] = radius(A);
% RADIUS finds the radius and circumference of % a circle if the area A is given.
46
Judul Buku
if A < 0 error('area must be positive'); end r = sqrt(A/pi); c = 2 * pi * r;
Note : MATLAB bersifat case sensitif sehingga variabel atau fungsi ‘NamaFungsi’ berbeda dengan ‘namafungsi’