Editor Teks SciNotes
Bab 14 Fungsi
Bab 14
Menggunakan baris kosong untuk memisahkan suatu statemen dengan blok-statemen lainnya.
Menggunakan indentasi pada blok-statemen perulangan dan kondisional.
Menggunakan spasi dan tanda kurung dalam penulisan suatu ekspresi matematika sehingga ekspresinya mudah dibaca dan dipahami.
Sebuah fungsi yang ditulis dengan gaya penulisan yang baik akan mudah untuk dibaca dan dimengerti. Manfaat lainnya yaitu proses pengecekan atau perbaikan jika ada kesalahan dalam fungsi yang telah dibuat dapat dilakukan dengan mudah.
Sebuah file-fungsi yang telah selesai dibuat dengan teks editor SciNotes dapat disimpan ke dalam sebuah file tertentu melalui menu File Save. Meskipun dapat digunakan sembarang ekstensi namun sebaiknya suatu file fungsi disimpan dengan ekstensi sci. Pada sebuah file-fungsi di dalamnya dapat terdiri dari sebuah fungsi saja maupun beberapa fungsi seperti yang ditunjukkan pada contoh-contoh di bawah ini.
Contoh 1. (Deret Fibonacci). N Suku-suku awal dari deret Fibonacci [Fibonacci.sci] function f = fibonacci(n)
// Fungsi untuk menghasilkan n-suku deret Fibonacci f = ones(1,n);
for k = 3:n
f(k) = f(k-1) + f(k-2);
end
endfunction
Contoh 2. Beberapa fungsi trigonometri dengan argumen sudut dalam satuan derajat [trig_derajat.sci].
// Beberapa fungsi trigonometri dengan argumen dalam satuan derajat function y = cos_d(x)
y = clean(cos(x/180*%pi)) endfunction
function y = sin_d(x)
y = clean(sin(x/180*%pi)) endfunction
function y = tan_d(x)
ieee(2), y = sin_d(x)./cos_d(x), ieee(0) endfunction
function y = cot_d(x)
ieee(2), y = cos_d(x)./sin_d(x), ieee(0) endfunction
Contoh 3. (Metode Secant). Metode Secant adalah salah satu metode yang dapat digunakan untuk menyelesaikan sebuah persamaan nonlinier f(x) = 0. Berikut ini adalah fungsi yang merupakan implementasi dari metode secant [secant.sci].
function [x,fx,n] = secant(f,x1,x2)
// Penyelesaian persamaan nonlinear f(x)=0 dengan metode secant.
//
// Input : f = fungsi nonlinier f(x) // x1, x2 = nilai awal
// Output : x = akar fungsi f(x) // fx = nilai fungsi f(x) // n = jumlah iterasi
nmax = 100 // jumlah iterasi maksimum epsilon = 1e-10 // toleransi konvergensi n = 0
if abs(f(x1)) < abs(f(x2)) x = x1
fx = f(x1) else
x = x2 fx = f(x2) end
while (n < nmax & abs(fx) > epsilon) n = n+1
x = x2-f(x2)*(x2-x1)/(f(x2)-f(x1)) fx = f(x)
x1 = x2 x2 = x end
if (n >= nmax)
disp('Perhitungan belum konvergen setelah ' + ...
string(nmax) + ' iterasi.') abort
end
endfunction
Penggunaan Fungsi-Fungsi yang Tersimpan pada Suatu File-Fungsi
Suatu fungsi yang terdapat dalam sebuah file-fungsi harus dieksekusi terlebih sebelum dapat digunakan. Untuk file fungsi yang terbuka pada jendela SciNotes, hal ini dapat dilakukan melalui menu Execute.
File-fungsi yang tersimpan pada suatu direktori tertentu dapat dieksekusi dengan statemen exec(nama_file), dimana nama_file adalah nama dari file-fungsi. Jika file-fungsi tersimpan pada direktori kerja maka argumen nama_file cukup dengan nama filenya saja, seperti pada contoh di bawah ini:
-->exec('trig_derajat.sci');
Namun jika file-fungsi tidak tersimpan pada direktori kerja maka argumen nama_file harus ditulis dengan nama file-fungsi beserta nama direktorinya.
-->exec('D:\Skrip dan Fungsi\trig_derajat.sci’);
Jika di belakang statemen exec(nama_file) tidak ditambahkan tanda titik-koma maka semua statemen yang terdapat di dalam file-fungsi akan ditampilkan pada jendela Scilab.
Sebuah file-fungsi juga dapat dieksekusi melalui menu File Execute yang terdapat pada jendela Scilab.
Setelah dilakukan eksekusi terhadap file-fungsi, fungsi-fungsi yang terdapat di dalamnya dapat dijalankan seperti halnya fungsi-fungsi yang telah terpasang di dalam Scilab.
-->fibonacci(5) ans =
1. 1. 2. 3. 5.
-->x = [0 30 45 60 90];
-->cos_d(x) ans =
1. 0.8660254 0.7071068 0.5 0.
-->tan_d(x) ans =
0. 0.5773503 1. 1.7320508 Inf
Membuat Suatu Fungsi Secara Langsung pada Jendela Scilab
Selain dalam bentuk file-fungsi, sebuah fungsi juga dapat dibuat secara langsung pada jendela Scilab dengan menggunakan blok statemen function-endfunction atau dengan menggunakan fungsi deff. Fungsi-fungsi yang dibuat dengan cara ini akan tersimpan secara otomatis di dalam ruang kerja sehingga dapat langsung digunakan tanpa perlu dipanggil terlebih dahulu seperti pada sebuah file-fungsi. Fungsi-fungsi yang dibuat secara langsung pada jendela Scilab hanya bersifat sementara dan akan hilang ketika program Scilab ditutup.
Pembuatan Fungsi dengan Blok Statemen Function-Endfunction
Sintaks pembuatan suatu fungsi baru secara langsung pada jendela Scilab dengan menggunakan blok statemen function-endfunction adalah sama seperti sintaks penulisan suatu fungsi dalam sebuah file-fungsi.
Berikut ini ilustrasi pembuatan fungsi secara langsung pada jendela Scilab.
-->function y = func(x) --> y = x - exp(-x) -->endfunction
-->function [p,m] = foo(a,b) --> p = a + b
--> m = a - b -->endfunction -->x = 1.0 -->y = func(x) y =
0.6321206
-->[u,v] = foo(345,123) v =
222.
u =
468.
Contoh 4. Penentukan akar dari fungsi nonlinear f
x xexp( x ) dengan menggunakan fungsi secant [secant.sci] yang telah diberikan pada Contoh 3.Fungsi f(x) yang akan dicari akarnya dapat dibuat dengan statemen Scilab sebagai berikut.
-->function y = func(x) --> y = x - exp(-x) -->endfunction
Kemudian dipanggil fungsi secant ke dalam ruang kerja.
-->exec('secant.sci');
Selanjutnya akar dari fungsi f(x) dapat dihitung dengan statemen sebagai berikut:
-->[x0, fx0] = secant(func, 0, 1) fx0 =
- 1.242D-13 x0 =
0.5671433
Diperoleh x = 0.567 adalah akar dari fungsi nonlinier f(x).
Pembuatan Fungsi dengan Fungsi Deff
Pembuatan sebuah fungsi baru secara langsung pada jendela Scilab dengan fungsi deff dapat dilakukan dengan menggunakan sintaks sebagai berikut:
deff("[out1,out2,...] = fname(in1,in2,...)", [blok_statemen])
dimana out1,out2 adalah argumen-argumen output, in1,in2 adalah argumen-argumen input dan blok_statemen adalah statemen-statemen untuk fungsi fname.
Semua statemen yang terdapat di dalam blok_statemen harus ditulis diantara tanda kutip-tunggal (') atau tanda kutip-ganda (") dan untuk memisahkan statemen yang berbeda dapat digunakan tanda koma (,) atau titik-koma (;).
Berikut ini contoh-contoh pembuatan suatu fungsi dengan menggunakan perintah deff. -->deff('z=tambah(x,y)','z=x+y')
-->deff("x=mutlak(y)","if y>0, x=y; else, x=-y; end")
-->deff('[x]=akar_pers_kuadrat(a,b,c)', ...
--> ['d=b^2-4*a*c','x1=(-b+sqrt(d))/(2*a)', ...
--> 'x2=(-b-sqrt(d))/(2*a)','x=[x1 x2]'])
Berikut ini ilustrasi penggunaan fungsi-fungsi yang telah dibuat dengan fungsi deff. -->tambah(2,4)
ans = 6.
-->c = mutlak(-12.34) c =
12.34
-->x = akar_pers_kuadrat(1,-10,21) x =
7. 3.
Variabel Lokal dan Variabel Global
variabel yang terdapat di dalam suatu fungsi adalah variabel lokal. Variabel-variabel tersebut hanya akan ada selama proses eksekusi terhadap fungsi berlangsung dan tidak mempunyai pengaruh terhadap variabel-variabel yang telah tersimpan dalam ruang-kerja meskipun mempunyai nama yang sama.
Ilustrasi mengenai variabel lokal dapat dilihat pada contoh di bawah ini.
-->function f = foo(n) --> n1 = n-1
--> printf('nilai n1 di dalam fungsi foo %i\n',n1) --> n2 = n-2;
--> f = n1*n2;
-->endfunction -->n1 = 11;
-->foo(n1)
nilai n1 di dalam fungsi foo 10 ans =
90.
Apabila variabel n1 dipanggil kembali maka nilainya masih tetap dan tidak berubah karena variabel n1 yang terdapat dalam fungsi foo merupakan variabel lokal.
-->n1 n1 = 11.
Naum jika variabel n2 dipanggil maka akan muncul pesan kesalahan "undefined variable", karena variabel n2 hanya terdapat di dalam fungsi foo saja.
-->n2
!--error 4
undefined variable : n2
Variabel global adalah variabel yang tersimpan baik di dalam fungsi maupun di dalam ruang kerja. Sebuah variabel dapat dibuat sebagai variabel global dengan menggunakan fungsi global yang mempunyai sintaks sebagai berikut:
global('var1', 'var2', ..., 'varn') global var1 var2 ... varn
dimana var1, var2, varn adalah nama-nama variabel global. Untuk merubah nilai suatu variabel global dari dalam sebuah fungsi maka kita juga harus menambahkan fungsi global ke dalam fungsi.
Berikut ini ilustrasi mengenai variabel global.
-->global k -->k = 10;
-->function f = plus_k(x) --> f = x + k;
-->endfunction
-->function rubah_k(a) --> global k
--> k = a -->endfunction -->plus_k(5) ans = 15.
-->rubah_k(9.63) -->k
k =
9.63 -->plus_k(80) ans =
89.63
Terlihat bahwa perubahan nilai dari variabel global yang terdapat di dalam suatu fungsi juga akan merubah nilai dari variabel yang sama yang tersimpan pada ruang kerja.
Fungsi Rekursif
Rekursi adalah proses pemanggilan sebuah fungsi terhadap dirinya sendiri. Suatu fungsi yang di dalamnya terdapat suatu proses rekursi disebut sebagai fungsi rekursif.
Contoh 5. Formula untuk menghitung faktorial dari suatu bilangan bulat n yaitu:
1 jika 1 2 ...
) 2 ( ) 1 (
1 jika ) 1
( n n n n
n n factorial
Untuk n > 1, fungsi faktorial dapat dinyatakan dalam bentuk sebagiai berikut:
factorial(n) = n factorial(n – 1)
Berikut ini adalah implementasi statemen-statemen untuk fungsi faktorial.
function f = faktorial(n) if n > 1 then
f = n*faktorial(n-1) else
f = 1 end
endfunction -->faktorial(5) ans =
120.
Contoh 6. Suku ke-n dari deret Fibonacci dapat dinyatakan dengan formula berikut:
2
1
n n
n f f
f dimana f1 = 1 dan f2 = 1.
Berikut ini adalah statemen-statemen untuk membuat fungsi Fibonacci.
function f = fib(n)
// Menghitung deret Fibonnaci suku ke-n dengan cara rekursi if n <= 2 then
f = 1 return end
f = fib(n-1) + fib(n-2) endfunction
-->fib(15) ans =
610.
Pengontrolan Eksekusi Suatu Fungsi
Perintah resume, resume dan abort dapat digunakan untuk mengontrol eksekusi sebuah fungsi. Penjelasan mengenai perintah-perintah tersebut adalah sebagai berikut.
Perintah resume dan return adalah perintah yang ekuivalen. Perintah resume atau return digunakan untuk keluar dari suatu fungsi namun fungsi tetap menghasilkan suatu nilai keluaran. Namun jika sebuah fungsi dijalankan dalam mode pause maka penggunaan perintah resume atau return akan menghentikan mode pause dan proses eksekusi fungsi dilanjutkan kembali.
Perintah abort dapat digunakan untuk menghentikan proses eksekusi yang sedang berlangsung pada suatu file atau skrip. Perintah error dan warning dapat digunakan untuk menampilkan pesan kesalahan yang terjadi.
Ilustrasi dari penggunaan perintah-perintah di atas diberikan pada contoh bawah ini.
Contoh 7. Pada contoh ini fungsi [secant.sci] yang terdapat pada Contoh 3 dimodifikasi dengan menyisipkan perintah return, error, warning dan abort ke dalamnya dan file hasil modifikasinya dinamakan [fsecant.sci].
function [x,fx,n] = fsecant(f,x1,x2)
// Penyelesaian persamaan nonlinear f(x)=0 dengan metode secant.
//
// Input : f = fungsi nonlinier f(x) // x1, x2 = nilai awal
// Output : x = akar fungsi f(x) // fx = nilai fungsi f(x) // n = jumlah iterasi
nmax = 100 // jumlah iterasi maksimum epsilon = 1e-10 // toleransi konvergensi n = 0
if abs(f(x1)) < abs(f(x2)) x = x1
fx = f(x1) else
x = x2 fx = f(x2) end
if abs(fx) < epsilon return
end
while (n < nmax & abs(fx) > epsilon) n = n+1
if (abs(f(x2)-f(x1)) < %eps)
error('Terjadi pembagian dengan nol') end
x = x2 - f(x2)*(x2-x1)/(f(x2)-f(x1)) fx = f(x)
x1 = x2 x2 = x end
if (n >= nmax)
warning('Perhitungan belum konvergen setelah ' + ...
string(nmax) + ' iterasi.') abort
end
endfunction
Anggap fungsi nonlinear yang akan dicari akarnya adalah f
x x2 1. -->function y = f(x)--> y = x^2 - 1 -->endfunction