fungsi m-file - elista:.

advertisement
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’
Download