Pengenalan Scilab Perangkat Lunak Gratis Untuk Komputasi Numerik Dan Visualisasi Data PDF
Pengenalan Scilab Perangkat Lunak Gratis Untuk Komputasi Numerik Dan Visualisasi Data PDF
Saifuddin Arief
ii
Kata Pengantar
Scilab adalah sebuah perangkat lunak gratis yang dikembangkan untuk komputasi numerik
dan visualisasi data. Scilab cocok digunakan untuk menyelesaikan suatu persoalan
matematika yang sederhana maupun untuk menyelesaikan berbagai persoalan komputasi
numerik yang rumit. Hal ini karena di dalamnya telah terpasang ratusan fungsi yang
merupakan implementasi dari algoritma-algoritma dalam metode numerik. Selain itu
Scilab juga merupakan sebuah bahasa pemrograman tingkat tinggi.
Seperti judul buku ini, obyektif dari buku ini adalah untuk memberikan penjelasan tentang
dasar-dasar penggunaan Scilab serta penerapannya dalam komputasi numerik. Sebagai
ilustrasi yang lebih konkrit mengenai penggunaan Scilab maka di dalam buku juga terdapat
puluhan contoh perhitungan yang diambil dari berbagai macam studi kasus. Beberapa
topik tingkat lanjut. seperti pengunaan fitur antar muka grafis (GUI), pengolahan sinyal,
simulasi, tidak dijelaskan dalam buku ini.
Saran, masukan atau komentar tentang buku akan penulis terima dengan senang hati dan
dapat disampaikan melalui email dengan alamat saifuddin.arief@rocketmail.com.
Tulisan ini dapat digunakan secara gratis untuk keperluan personal dan pendidikan. Bagi
yang ingin menggunakannya untuk kepentingan komersial harap menghubungi penulis
melalui alamat email di atas.
Saifuddin Arief
20 Februari 2015
iv
Daftar Isi
Daftar Isi iv
1 Pendahuluan 1
Jendela-Jendela Scilab 2
Sistem Bantuan 4
Statemen 7
Baris Komentar 8
Bilangan 9
Variabel 10
Matrik 11
Operator 14
Fungsi 15
Menghapus Variabel 22
Direktori Kerja 23
3 Matematika Dasar 25
Konstanta-Konstanta Matematika 25
Operator-Operator Aritmatika 26
Akar Kuadrat 33
Nilai Mutlak 35
Tanda Bilangan 36
Pembulatan 36
Trigonometri 38
Hiperbolik 42
Faktorial 46
Bilangan Kompleks 47
Vektor Inkremental 53
Konkatenasi 58
Dimensi Matrik 59
Matrik Non-Numerik 69
Perkalian Matrik 76
Pembagian Matrik 82
Pemangkatan 87
Transpose 101
Determinan 106
Perkalian 126
Faktorisasi 131
Turunan 132
8 String 139
Kalender 147
Stopwatch 148
For 161
While 164
Break 165
Continue 166
If-Else 167
Select-Case 170
13 Skrip 174
14 Fungsi 178
File-Fungsi 178
Menampilkan Baris Komentar yang Terdapat Pada Bagian Awal Suatu Fungsi 196
Menyimpan dan Membaca Data String dalam Format Teks ASCII 208
Membuat Grafik Dua Dimensi dengan Fungsi Plot atau Plot2d 219
Membuat Grafik Tiga Dimensi dengan Fungsi Plot3d dan Plot3d1 252
Interpolasi 272
Gradien 276
Scilab adalah sebuah perangkat lunak yang dirancang dan dikembangkan untuk komputasi
numerik serta untuk visualisasi data secara dua dimensi maupun tiga dimensi. Scilab juga
merupakan sebuah bahasa pemrograman tingkat tinggi yang berorientasi numerik. Scilab
adalah suatu interpreter sehingga suatu kode program yang dibuat dapat dieksekusi secara
langsung dan dilihat hasilnya tanpa harus melalui tahapan kompilasi.
Scilab adalah sebuah freeware yang dapat digunakan secara gratis untuk keperluan pribadi
maupun komersial. Scilab tersedia dalam berbagai macam sistem operasi utama, seperti
Windows (XP, Vista, 7, 8), Linux, serta MacOS X.
Alamat website Scilab adalah http://www.scilab.org. Pada website tersebut kita dapat
memperoleh file instalasi Scilab, source code, dokumentasi tentang Scilab, modul-modul
tambahan serta berbagai informasi lainnya yang berkaitan dengan Scilab.
Scilab dapat dijalankan melalui menu Start atau melalui jalan-pintas Scilab yang terdapat
pada dekstop. Setelah Scilab dijalankan maka beberapa saat kemudian pada layar komputer
akan muncul sebuah jendela Scilab seperti yang terlihat pada Gambar 1.1.
Untuk mengakhiri penggunaan Scilab dapat digunakan perintah exit, melalui menu File
Quit, atau dengan menekan tombol yang terdapat pada ujung kanan atas dari jendela
Scilab.
Pendahuluan - 2
Jendela-Jendela Scilab
Konsol Scilab (Scilab Console) merupakan bagian utama dari Jendela Scilab. Hampri
sebagian besar interaksi antara kita dengan Scilab dilakukan melalui jendela konsol Scilab.
Konsol Scilab adalah tempat untuk memasukkan semua perintah diberikan kepada Scilab.
Selain konsol Scilab, secara bawaan Scilab juga menampilkan beberapa jendela lainnya
yaitu:
Penjelajah File (file browser). Jendela ini dapat digunakan untuk memilih direktori
kerja. Semua file yang ada pada direktori kerja akan ditampilkan pada jendela
penjelajah file.
Penjelajah variabel (variabel browser). Jendela ini menampilkan daftar dari semua
variabel yang dihasilkan oleh statemen yang dijalankan pada jendela konsol Scilab.
Riwayat perintah (command history). Jendela riwayat perintah berisi rekaman dari
perintah atau statemen yang dijalankan pada jendela Scilab.
Ilustrasi mengenai jendela-jendela di atas dapat dilihat pada gambar berikut ini.
Pendahuluan - 3
Selain jendela-jendela yang telah disebutkan, masih terdapat tiga jendela lagi yaitu:
Jendela bantuan. Jendela ini yang menampilkan penjelasan mengenai suatu fungsi,
operator atau perintah yang terpasang di dalam Scilab. Jendela bantuan akan muncul
jika kita jalankan perintah help atau apropos.
SciNotes. SciNotes adalah sebuah program editor teks yang disediakan oleh Scilab
untuk memudahkan pembuatan atau pengembangan sebuah skrip atau fungsi.
Penjelasan lebih detail mengenai SciNotes dapat dilihat pada Bab 12: Editor Teks
SciNotes.
Jendela grafik. Jendela ini digunakan untuk melakukan visualisasi terhadap suatu data
atau sebuah fungsi matematika. Jendela grafik akan muncul apabila kita menjalankan
perintah-perintah yang berkaitan dengan visualisasi grafik. Penjelasan mengenai
pembuatan grafik dapat dilihat pada Bab 16: Grafik Dua Dimensi dan Tiga Dimensi.
Pendahuluan - 4
Sistem Bantuan
Jendela bantuan dapat ditampilkan dengan perintah help, melalui menu ? Scilab
Help, atau dengan menekan tombol F1. Tampilan dari jendela bantuan adalah seperti pada
gambar di bawah ini.
Penjelasan mengenai suatu perintah, fungsi atau operator tertentu dapat kita peroleh
dengan menelusuri jendela bantuan. Namun cara ini mungkin kurang praktis, untuk
mendapatkan penjelasan mengenai suatu perintah, fungsi atau operator tertentu, kita
dapat menggunakan perintah help("topik") atau help topik. Sebagai contoh, untuk
melihat penjelasan tentang fungsi round maka perintahnya adalah help("round") atau
help round. Apabila kita jalankan perintah tersebut maka akan muncul sebuah jendela
seperti pada Gambar 1.4.
Pendahuluan - 5
Daftar dari semua dokumentasi yang berkaitan dengan sebuah topik atau kata tertentu
dapat ditampilkan dengan dipergunakan fungsi apropos("topik") atau apropos "topik".
Sebagai contoh untuk mencari dokumentasi yang berkaitan dengan kata inv perintahnya
adalah apropos("inv"). Dokumentasi yang berkaitan dengan sebuah topik tertentu juga
dapat dicari melalui fasilitas pencarian yang terdapat pada Jendela Bantuan melalui tab
yang terdapat pada jendela bantuan.
Konsol Scilab adalah tempat utama untuk berinteraksi dengan program Scilab. Tanda -->
yang terdapat pada jendela tersebut adalah tempat untuk menjalankan suatu perintah atau
statemen. Sebagai contoh, untuk melakukan suatu perhitungan sederhana yaitu 123 + 456
maka setelah tanda --> kita harus mengetikkan 123 + 456 dan kemudian menekan tombol
Enter untuk menjalankan perintah tersebut. Hasil perhitungannya akan ditampilkan pada
baris berikutnya. Setelah itu di bawahnya akan muncul lagi tanda --> yang berarti bahwa
Scilab siap untuk mengerjakan suatu perintah atau perhitungan yang lain.
-->123 + 456
ans =
579.
-->
Cara mudah untuk mengenal Scilab yaitu dengan menggunakannya untuk menyelesaikan
suatu perhitungan matematika sederhana seperti pada contoh berikut ini.
-->14.59*(1 + 0.0043*80)
ans =
19.60896
0.0395995
Dasar-Dasar Penggunaan Scilab - 7
Dua contoh di atas adalah perintah Scilab untuk menyelesaikan dua perhitungan
matematika sebagai berikut:
( )
⁄√ ( )
Statemen
Statemen adalah suatu baris pernyataan yang dapat dieksekusi oleh Scilab. Hasil eksekusi
dari statemen tersebut akan ditampilkan pada baris di bawahnya, kecuali apabila pada
baris pernyataan tersebut ditambahkan tanda titik-koma (;) di belakangnya.
-->23 + 9
ans =
32.
607.75313
Pada contoh perhitungan di atas FV, c, x adalah variabel-variabel yang digunakan untuk
menyimpan hasil perhitungan.
Dasar-Dasar Penggunaan Scilab - 8
Nilai yang tersimpan pada suatu variabel dapat ditampilkan dengan cara mengetikkan
nama variabelnya pada baris perintah.
-->c
c =
10.
-->x
x =
1.
Beberapa statemen dapat dimasukkan sekaligus pada satu baris perintah yang sama.
Antara statemen yang satu dengan statemen yang lainnya dapat dipisahkan dengan tanda
koma (,) atau titik-koma (;). Jika digunakan tanda koma maka nilai dari hasil eksekusi
statemennya akan ditampilkan pada baris berikutnya, namun jika digunakan tanda titik-
koma maka nilai dari eksekusi statemennya tidak akan ditampilkan.
0.5
P =
60.
Untuk sebuah statemen yang relatif panjang sehingga tidak dapat dimasukkan dalam satu
baris maka statemennya dapat ditulis dalam beberapa baris dengan menggunakan dua titik
atau lebih (..) sebagai tanda sambung antara satu dengan baris berikutnya.
2.7166667
Baris Komentar
Baris komentar adalah suatu catatan yang dibuat untuk menjelaskan sebuah statemen atau
suatu blok statemen tertentu. Baris komentar dapat ditulis sebagai suatu baris tersendiri
atau ditulis di belakang suatu statemen. Tanda // adalah operator untuk membuat baris
komentar.
Dasar-Dasar Penggunaan Scilab - 9
-->v = d/t
v =
3.5333333
Apabila variabel-variabel yang digunakan dalam suatu perhitungan sudah cukup jelas
artinya seperti pada contoh di bawah ini maka baris komentar sebaiknya tidak digunakan.
-->panjang = 20;
-->lebar = 10;
-->luas = panjang*lebar
luas =
200.
Bilangan
Di dalam Scilab, semua bilangan disimpan dengan menggunakan presisi ganda dengan
akurasi sekitar 16 digit desimal signifikan. Suatu bilangan dapat dinyatakan dengan notasi
desimal biasa atau dengan notasi saintifik. Pada notasi desimal tanda titik (.) digunakan
sebagai penanda desimal. Berikut ini adalah contoh-contoh penulisan bilangan dengan
notasi desimal.
777 -123 99.9998 -4.68
Pada notasi saintifik huruf e, E, d, atau D dapat digunakan untuk menyatakan pangkat dari
angka 10. Beberapa contoh penulisan suatu bilangan dalam notasi saintifik adalah sebagai
berikut:
3e8 2.778E-4 1.660d-27 -9.87D34
Notasi saintifik biasanya digunakan untuk menyatakan suatu bilangan yang sangat kecil
atau sangat besar. Hal ini untuk menghindari terjadinya kesalahan penulisan serta lebih
memudahkan pembacaan.
Dasar-Dasar Penggunaan Scilab - 10
Variabel
Variabel adalah sebuah nama yang digunakan untuk menyimpan nilai suatu bilangan, hasil
perhitungan, atau sebuah obyek tertentu. Penyimpanan nilai suatu obyek ke dalam suatu
variabel dilakukan dengan menggunakan statemen penugasan sebagai berikut:
var = ekspresi
dimana var adalah nama variabel yang digunakan untuk menyimpan nilai dari ekspresi
yang terdapat di sebelah kanannya.
-->x = (1 + sqrt(5))/2
x =
1.618034
Apabila hasil eksekusi dari suatu statemen tidak disimpan ke dalam sebuah variabel
tertentu maka hasilnya akan disimpan oleh Scilab pada variabel ans.
-->(7 - 2)*8
ans =
40.
Seperti halnya variabel lainnya, variabel ans juga dapat dipanggil atau dipergunakan dalam
perhitungan selanjutnya, seperti pada contoh di bawah ini.
-->ans*10
ans =
400.
Nama sebuah variabel dapat dibuat sepanjang mungkin namun hanya 24 karakter
pertama yang akan digunakan oleh Scilab.
Berikut contoh nama variabel yang mengikuti kaidah penulisan variabel yang benar: x,
Jumlah, nilai_awal, temp, x0, s100.
Dalam penamaan sebuah variabel, huruf kecil dan huruf besar adalah berbeda. Sebagai
contoh, variabel r dan R merupakan dua variabel yang berbeda, begitu juga dengan total,
Total dan TOTAL, dimana ketiganya merupakan variabel yang berbeda.
Hal penting lainnya yang harus diperhatikan dalam penamaan suatu variabel yaitu nama
suatu variabel tidak boleh menggunakan nama-nama dari suatu fungsi atau perintah yang
telah terpasang di dalam Scilab, seperti abs, input, ones, roots, sum, dan lain sebagainya.
Apabila nama sebuah fungsi atau perintah yang terpasang di dalam Scilab digunakan
sebagai nama sebuah variabel maka akan muncul sebuah pesan peringatan Warning
:redefining function, seperti pada contoh berikut ini.
-->sqrt = 4
Warning :redefining function: sqrt
Peringatan ini muncul karena sqrt adalah nama sebuah fungsi terpasang dalam Scilab.
Suatu fungsi atau perintah yang secara tak sengaja dipergunakan sebagai nama sebuah
variabel dapat dibuat berfungsi kembali secara normal dengan menggunakan perintah
clear foo, dimana foo adalah nama fungsi atau perintah yang telah terdefinisi ulang.
Sehingga untuk membuat fungsi sqrt kembali berfungsi normal maka perintahnya yaitu:
-->clear sqrt
Matrik
Matrik adalah tipe dasar dari semua data atau obyek di dalam Scilab. Matrik adalah sebuah
larik data yang berbentuk segiempat. Bilangan atau skalar adalah bentuk khusus dari
sebuah matrik, dimana skalar adalah matrik dengan elemen tunggal.
Dasar-Dasar Penggunaan Scilab - 12
-->A = [1 2 3; 4 5 6] // numerik
A =
1. 2. 3.
4. 5. 6.
Tanda kurung-siku kanan ([) dan kurung-siku kiri (]) adalah sepasang operator yang
dapat digunakan untuk membuat suatu matrik atau vektor secara manual. Penjelasan
terperinci tentang matrik akan diberikan pada Bab 4: Matrik dan Vektor.
Di dalam Scilab, suatu variabel dapat langsung dibuat tanpa harus ditentukan tipe dan
dimensinya, seperti pada contoh di bawah ini.
2.7169239
8. 1. 6. 3.
5. 7. 4. 9.
Tipe dari sebuah variabel dapat kita ketahui dengan menggunakan fungsi typeof. Ukuran
atau dimensi dari suatu variabel dapat kita ketahui dengan fungsi size.
-->typeof(e1000)
ans =
constant
-->typeof(M)
ans =
constant
-->size(e1000)
ans =
1. 1.
Dasar-Dasar Penggunaan Scilab - 13
-->size(M)
ans =
2. 4.
Terlihat bahwa variabel e1000 dan M mempunyai tipe yang sama yaitu constant, yang
berarti kedua variabel tersebut adalah suatu obyek numerik. Ukuran dari variabel e1000
adalah 1x1, yang berarti e1000 adalah suatu skalar. Selanjutnya ukuran dari variabel M
adalah 2x3, yang berarti M adalah sebuah matrik yang berukuran 2x3.
Suatu variabel yang telah dibuat dapat berubah dimensinya, tipenya atau bahkan tipe dan
dimensinya sekaligus, sesuai dengan operasi yang dilakukan terhadapnya, seperti yang
diilustrasikan pada contoh-contoh di bawah ini.
-->typeof(x)
ans =
constant
-->size(x)
ans =
1. 1.
10. 20.
0. 30.
-->typeof(x)
ans =
constant
-->size(x)
ans =
2. 2.
Scilab
Dasar-Dasar Penggunaan Scilab - 14
Pada contoh ini, pertama kali variabel x adalah suatu skalar kemudian berubah ukurannya
menjadi suatu matrik, kemudian variabel x berubah tipenya menjadi sebuah string.
Penjelasan terperinci mengenai obyek string akan diberikan pada Bab 8: String.
Operator
Operator adalah simbol khusus yang melambangkan suatu operasi tertentu, seperti plus
(+) untuk operasi penjumlahan dan operasi konkatenasi string, bintang (*) untuk operasi
perkalian, lebih besar (>) untuk operasi perbandingan lebih besar, dan lain sebagainya.
Ilustrasi untuk operator-operator aritmatika telah kita lihat pada contoh-contoh yang telah
diberikan. Selanjutnya, contoh-contoh di bawah ini adalah ilustrasi mengenai beberapa
operator lain yang terdapat di dalam Scilab.
Penjelasan mengenai beberapa operator yang terdapat pada contoh-contoh di atas adalah
sebagai berikut:
Simbol <, >, ==, <=, >= masing-masing adalah operator untuk operasi perbandingan
lebih-kecil, lebih-besar, sama, lebih-kecil atau sama dan lebih-besar atau sama.
Simbol & adalah operator untuk operasi logika dan.
Variabel khusus %eps adalah variabel khusus untuk menyatakan presisi komputer
dalam operasi aritmatika.
Operator aritmatika akan dijelaskan secara terperinci pada Bab 3: Matematika Dasar dan
Bab 5: Operasi Matematika Terhadap Matrik dan Vektor. Selanjutnya penjelasan mengenai
Dasar-Dasar Penggunaan Scilab - 15
operator untuk operasi perbandingan dan operasi logika akan diberikan pada Bab 10:
Perbandingan dan Logika.
Fungsi
Berikut ini ilustrasi dari beberapa fungsi yang telah terpasang di dalam Scilab.
-->n = exp(4)
n =
54.59815
-->tan(%pi/4)
ans =
1.
-->r = modulo(10,4)
r =
2.
-->rand()
ans =
0.2113249
-->date()
ans =
06-Mar-2010
Nama suatu fungsi juga bersifat sensitif terhadap ukuran huruf. Sebagai contoh, jika kita
tuliskan fungsi sqrt dengan Sqrt atau SQRT maka akan muncul sebuah pesan kesalahan
undefined variable.
-->Sqrt(100)
!--error 4
Undefined variable: Sqrt
Sebuah fungsi baru yang merepresentasikan suatu perhitungan atau operasi tertentu juga
dapat kita buat di dalam Scilab. Sebagai contoh, fungsi matematika sebagai berikut:
f ( x) x exp x
dapat dibuat dengan menggunakan statemen-statemen sebagai berikut:
-->function y = foo(x)
--> y = x - exp(-x)
-->endfunction
Penjelasan tentang cara pembuatan suatu fungsi akan diberikan pada Bab 14: Fungsi.
Suatu fungsi yang telah kita buat dapat dijalankan seperti halnya sebuah fungsi yang telah
terpasang di dalam Scilab, seperti pada contoh di bawah ini.
-->fx = foo(1)
fx =
0.6321206
Suatu fungsi dapat mempunyai argumen input dan output lebih dari satu. Untuk fungsi-
fungsi tersebut, pada umumnya terdapat beberapa argumen input atau output yang
bersifat opsional dan hanya perlu digunakan sesuai dengan kebutuhan.
Sebagai contoh, untuk mencari suatu bilangan rasional yang merupakan aproksimasi dari
suatu bilangan real, dapat digunakan fungsi rat yang mempunyai notasi sebagai berikut:
[m, n] = rat(x, tol)
dimana x adalah suatu bilangan real, m dan n adalah bilangan bulat serta tol adalah
toleransi aproksimasi. Argumen tol bersifat opsional, jika tidak dipakai maka nilai
toleransi aproksimasi yang digunakan adalah 10-6. Bilangan rasional m/n adalah hampiran
untuk bilangan real x yang dihasilkan oleh fungsi rat. Berikut ini adalah contoh
penggunaan fungsi rat untuk mencari nilai aproksimasi dari bilangan irrasional .
Dasar-Dasar Penggunaan Scilab - 17
113.
m =
355.
7.
m =
22.
Pada sebuah fungsi yang mempunyai argumen output lebih dari satu, hanya argumen
output pertama yang harus digunakan, argumen ouput kedua dan seterusnya dapat
digunakan sesuai dengan yang kita perlukan. Sebagai contoh, akar dari suatu fungsi
nonlinier dapat kita hitung dengan fungsi fsolve dengan sintaks sebagai berikut:
[x, fval, info] = fsolve(x0, fcn)
Dimana fcn adalah fungsi nonlinier yang dicari akarnya, x0 adalah nilai awal dalam
perhitungan iterasi, x adalah hampiran akar dari fungsi fcn, fval adalah nilai fungsi fcn
pada x (fval = fcn(x)) dan info adalah argumen output yang menyatakan kondisi iterasi
perhitungan (konvergen atau divergen). Argumen fval dan info pada fungsi fsolve
adalah argumen yang bersifat opsional.
Misalkan fungsi nonlinier yang akan kita cari akarnya adalah f ( x) x sinx .
2
-->function y = fx(x)
--> y = x^2 - sin(x)
-->endfunction
Selanjutnya, kita dapat menjalankan fsolve untuk mencari akar dari fungsi f(x) dengan
tiga macam bentuk argumen output adalah sebagai berikut:
0.8767262
Dasar-Dasar Penggunaan Scilab - 18
1.
f0 =
- 1.110D-16
x0 =
0.8767262
Selain fungsi-fungsi matematika standar, di dalam Scilab juga terpasang fungsi-fungsi yang
merupakan implementasi dari algoritma-algoritma dalam metode numerik, seperti fsolve
untuk mencari akar-akar suatu persamaan nonlinier, regress untuk perhitungan regresi
linier, intg untuk melakukan integrasi numerik, dan lain sebagainya. Ilustrasi penggunaan
Scilab untuk menyelesaikan berbagai persoalan dalam komputasi numerik diberikan pada
Bab 17: Metode Numerik.
Scilab akan menampilkan nilai sebuah variabel atau hasil dari suatu perhitungan sesuai
dengan format yang sedang digunakan. Sebagai contoh apabila dijalankan statemen:
NA = 6.0221367e23
maka tampilan yang muncul pada jendela Scilab adalah seperti di bawah ini.
-->NA = 6.0221367e23
NA =
6.022D+23
Terlihat bahwa tampilan bilangan yang muncul adalah berbeda dengan statemen yang
diketikkan dimana tidak semua digit desimal yang telah diketikkan ditampilkan.
Format output numerik pada contoh di atas adalah tampilan yang dihasilkan oleh format
default untuk ouput numerik. Apabila diperlukan format output numerik dapat dirubah
dengan menggunakan fungsi format. Fungsi format hanya akan berpengaruh terhadap
tampilan format numerik saja dan tidak berpengaruh terhadap penyimpanan hasil
perhitungannya di dalam memori komputer.
Dasar-Dasar Penggunaan Scilab - 19
Fungsi format dapat dijalankan dengan tiga macam sintak sebagai berikut
format(fmt, n) untuk merubah tipe format dan panjang digit yang digunakan untuk
menampilkan bilangan. Argumen fmt adalah tipe format, yaitu 'v' untuk format
default dan 'e' untuk format saintifik, n adalah panjang digit yang digunakan untuk
menampilkan bilangan (2 sampai 25 digit). Format default yang digunakan oleh Scilab
yaitu format('v',10).
format(n) untuk merubah panjang digit yang digunakan untuk menampilkan bilangan
menjadi n digit sedangkan tipe formatnya tetap.
v = format() untuk menampilkan format yang sedang digunakan. Output dari perintah
ini adalah sebuah vektor baris v yang terdiri dari dua elemen. Elemen pertama dari
vektor v adalah tipe format yaitu 0 untuk format saintifik atau 1 untuk format desimal.
Nilai elemen kedua adalah panjang digit yang digunakan.
-->x = 1/7
x =
0.1428571
-->y = 123456789
y =
1.235D+08
-->format('v',20)
-->x
x =
0.14285714285714285
-->y
y =
123456789.
Dasar-Dasar Penggunaan Scilab - 20
-->NA
NA =
6.0221367000000D+23
-->format('e',15)
-->x
x =
1.42857143D-01
-->y
y =
1.23456789D+08
-->NA
NA =
6.02213670D+23
-->rho = (1 + sqr(5))/2
!--error 4
undefined variable : sqr
Pesan kesalahan ini muncul karena terdapat kesalahan dalam statemen di atas yaitu fungsi
sqr seharusnya ditulis sqrt.
Daripada menulis kembali seluruh statemennya, terdapat sebuah cara yang lebih mudah
untuk memperbaiki kesalahan pada statemen di atas. Caranya yaitu dengan menggunakan
tombol panah ke atas () untuk menampilkan kembali statemen yang telah diberikan dan
menggunakan tombol panah ke kiri () untuk memindahkan kursor sehingga berada di
Dasar-Dasar Penggunaan Scilab - 21
depan kata sqr. Setelah itu sisipkan huruf t sehingga sqr berubah menjadi sqrt. Berikut ini
adalah statemen yang dihasilkan dari proses pengeditan serta hasil perhitungannya.
-->rho = (1 + sqrt(5))/2
rho =
1.618034
Pada saat penulisan atau pengeditan suatu perintah kita juga dapat menggunakan fitur tab
completion. Dengan menggunakan fitur ini, pada saat pengetikan suatu perintah atau
statemen apabila kita tekan tombol tab setelah kita ketikkan beberapa karakter awal dari
nama suatu variabel atau fungsi maka akan muncul sebuah kotak yang berisi daftar nama-
nama variabel atau fungsi yang berawalan dengan karakter yang telah kita ketikkan. Pada
daftar pilihan yang muncul, pilih nama variabel atau fungsi yang kita maksud kemudian
tekan enter. Berikut ini adalah ilustrasi dari fitur tab completion.
Perintah-perintah atau statemen-statemen yang kita jalankan pada Jendela Scilab dapat
ditelusuri kembali dengan menggunakan tombol panah ke atas () dan tombol panah ke
bawah (). Selain dengan menggunakan tombol-tombol panah kita juga dapat melihat
statemen atau perintah yang telah diberikan pada Jendela Command History.
Semua variabel yang telah kita buat pada jendela Scilab akan disimpan dan dikelola oleh
Scilab dalam ruang kerja (workspace). Selain variabel-variabel yang kita buat pada ruang
kerja juga tersimpan variabel-variabel yang dibuat secara otomatis oleh Scilab. Daftar dari
semua variabel yang tersimpan pada ruang kerja dapat ditampilkan pada jendela Scilab
dengan menggunakan gunakan perintah who atau whos. Perintah who akan menampilkan
Dasar-Dasar Penggunaan Scilab - 22
daftar yang berisi nama variabel saja sedangkan perintah whos akan menampilkan daftar
variabel secara lengkap, yaitu nama, tipe dan ukuran variabel. Sayangnya output dari
kedua perintah tersebut juga menampilkan semua variabel yang secara otomatis
dijalankan oleh Scilab sehingga outputnya tidak informatif. Cara lebih praktis untuk
melihat variabel yang telah dibuat adalah melaluli jendela variabel browser.
Menghapus Variabel
Semua variabel yang telah tersimpan pada ruang-kerja dapat dihapus sekaligus dengan
menggunakan perintah clear. Untuk menghapus hanya beberapa variabel tertentu saja,
misalkan variabel var1, var2, var3 perintahnya adalah clear var1 var2 var3.
-->h = 60;
-->L = 300;
-->w = 0.118;
-->To = (w*L^2)/(8*h)
To =
22.125
28.333825
-->L
!--error 4
Undefined variable: L
-->Tmax
!--error 4
Undefined variable: Tmax
Seperti pada contoh di atas, akan muncul sebuha pesan kesalahan apabila sebuah variabel
telah dihapus jika dipanggil atau digunakan kembali.
Jendela Scilab dapat dibersihkan dari statemen-statemen yang telah kita berikan beserta
outputnya dengan menggunakan perintah clc, melalui menu Edit Clear Console atau
dengan menggunakan tombol F2. Perintah ini hanya akan membersihkan jendela perintah
saja dan tidak akan menghapus statemen-statemen yang telah diberikan dari daftar
riwayat perintah.
Direktori Kerja
Direktori kerja yang sedang digunakan dapat dilihat dengan menggunakan perintah pwd.
-->pwd
ans =
F:\Scilab
Cara lainnya untuk melihat direktori kerja adalah dengan menggunakan menu File
Display Current Directory.
Untuk pindah ke direktori lain sebagai direktori kerja, kita dapat menggunakan perintah cd
atau chdir. Sintaks dari kedua perintah tersebut adalah sebagai berikut:
cd str atau cd('str')
chdir str atau chdir('str')
dimana str adalah direktori kerja yang akan digunakan. Misalkan kita akan menggunakan
direktori "C:\Komputasi Numerik\Scilab" sebagai direktori kerja maka kita dapat
melakukannya dengan menjalankan salah satu dari statemen sebagai berikut.
-->chdir('C:\Komputasi Numerik\Scilab');
Selain dengan perintah pwd kita juga dapat melakukan perubahan direktori kerja dengan
menggunakan menu File Change Current Directory.
Perubahan direktori kerja dengan menggunakan cara-cara yang telah disebutkan hanya
Dasar-Dasar Penggunaan Scilab - 24
bersifat sementara saja. Ketika kita menjalankan Scilab pada sesi berikutnya maka
direktori kerja yang telah kita atur pada sesi sebelumnya akan hilang. Perubahan direktori
kerja yang bersifat permanen dapat dilakukan dengan cara memasukkkan nama direktori
yang dikehendaki pada kotak teks untuk argumen "Start in" yang terdapat di dalam
form properties dari jalan-pintas (shorcut) Scilab. Form tersebut dapat ditampilkan dengan
melakukan klik-kanan terhadap shorcut Scilab dan kemudian kita pilih properties.
Bab 3
Matematika Dasar
Konstanta-Konstanta Matematika
Tabel 3.1 adalah daftar dari beberapa konstanta matematika yang telah terpasang di dalam
Scilab.
Variabel Deskripsi
%i i= 1
%pi = 3.1415927.....
%e e = 2.7182818 .....
-->sin(%pi/2)
ans =
1.
-->log(%e)
ans =
1.
-->%i^2
ans =
- 1.
Matematika Dasar - 26
Operator-Operator Aritmatika
Simbol-simbol untuk operator aritmatika yang terdapat di dalam Scilab diperlihatkan pada
Tabel 3.2. Selain simbol-simbol tersebut, terdapat simbol lain yang digunakan dalam
penulisan suatu ekspresi matematika yaitu tanda kurung-buka dan kurung-tutup, ( ), yang
digunakan untuk mengelompokkan suatu bagian ekspresi matematika.
Penjumlahan a+b a + b
Pengurangan a–b a – b
Perkalian a×b a * b
Pembagian a / b
Pemangkatan a ^ b atau a ** b
Urutan operasi aritmatika dari tingkatan yang paling tinggi ke tingkatan yang lebih rendah
adalah sebagai berikut:
1. Operasi matematika yang terletak di antara tanda kurung ( )
2. Operasi pemangkatan
3. Operasi perkalian atau pembagian
4. Operasi pejumlahan atau pengurangan.
Eksekusi terhadap suatu ekspresi matematika yang didalamnya terdapat beberapa macam
operasi aritmatika dimulai dari operasi yang mempunyai tingkatan tertinggi kemudian ke
operasi berikutnya yang mempunyai tingkatan operasi lebih rendah dan seterusnya
sampai selesai. Apabila di dalam suatu ekspresi matematika terdapat beberapa operasi
yang mempunyai tingkatan sama maka urutan eksekusinya dimulai dari sebelah kiri ke
kanan.
Matematika Dasar - 27
-->1 + 2/(3*4)
ans =
1.1666667
0.2
-->1000*(1 + 0.15/12)^60
ans =
2107.1813
Penggunaan tanda spasi dalam penulisan suatu ekspresi matematika bersifat opsional
namun sebaiknya tanda spasi digunakan untuk mempermudah pembacaan dari ekspresi
matematika yang dibuat.
Contoh 1. Tentukan besarnya resultan gaya yang dihasilkan oleh gaya-gaya yang bekerja
pada roda-roda mobil, seperti yang ditunjukkan pada Gambar 3.1, serta posisi resultan
gaya tersebut dari titik A?
Gambar 3.1
Penyelesaian. Misalkan FA, FB dan FC adalah gaya-gaya yang bekerja pada titik A, B dan C
maka resultan gaya R yang dihasilkan oleh ketiga gaya tersebut adalah
R = FA + FB + FC
Matematika Dasar - 28
Misalkan d adalah letak resultan gaya dari titik A, maka d dapat dihitung dengan formula
sebagai berikut:
FA x A FB x B FC xC
d
R
dimana xA, xB, xC adalah letak gaya FA, FB dan FC dari titik A.
Perhitungan resultan gaya R dan letaknya dari titik A adalah sebagai berikut:
50.
2.2
Jadi resultan gaya R adalah sebesar 50 kN dan letaknya sejauh 2.2 m dari titik A.
Contoh 2. Sebuah baterei mempunyai gaya gerak listrik 12 V dan tahanan internal 0.05 .
Jika pada terminal-terminal baterei tersebut dihubungkan dengan sebuah tahanan luar
sebesar 3 . Tentukan arus yang mengalir pada rangkaian tersebut dan beda tegangan
yang terdapat pada terminal baterei tersebut?
Penyelesaian. Arus (I) pada rangkaian tersebut dapat dihitung dengan menggunakan
formula sebagai berikut:
I
Rr
dimana adalah gaya gerak listrik, r adalah tahanan internal dan R adalah tahanan luar.
Matematika Dasar - 29
Beda tegangan (V) yang terdapat di antara terminal baterei dapat dihitung dengan formula
sebagai berikut:
V Ir
Arus yang mengalir pada rangkaian dan beda tegangan yang terdapat pada terminal
baterei dapat kita hitung dengan perintah-perintah sebagai berikut.
3.9344262
11.803279
Arus yang mengalir pada rangkaian adalah 3.9 A dan beda tegangan yang terdapat pada
terminal baterei yaitu 11.8 V.
Contoh 3. Sebuah bahan radioaktif mempunyai waktu paruh 150 hari. Apabila hari ini
massa radioaktif tersebut adalah 10 gram, berapakah jumlah massa radioaktif yang
tertinggal setelah 300 hari ?
Penyelesaian. Peluruhan suatu bahan radioaktif dapat dihitung dengan sebagai berikut:
( )
dimana m adalah massa bahan radioaktif yang tertinggal, mo adalah massa awal bahan
radioaktif, t adalah waktu peluruhan, serta h adalah waktu paruh.
-->massa_awal = 10;
-->waktu_paruh = 150;
Matematika Dasar - 30
-->waktu = 300;
2.5
Sehingga setelah 300 hari, bahan radioaktif yang tertinggal yaitu sejumlah 2.5 gram.
Di dalam Scilab, terdapat beberapa variabel khusus yang berkaitan dengan operasi
aritmatika dengan komputer. Variabel-variabel khusus tersebut yaitu %eps, %inf dan %nan.
Deskripsi singkat mengenai ketiga variabel tersebut dapat dilihat pada Tabel 3.3.
Variabel Deskripsi
Variabel %eps merupakan variabel khusus yang menyatakan presisi komputer. Nilai dari
variabel ini adalah nilai terkecil yang dapat ditambahkan pada suatu bilangan sehingga
menghasilkan suatu nilai yang berbeda dengan nilai dari bilangan tersebut. Nilai variabel
%eps akan tergantung pada jenis komputer. Untuk komputer yang mendukung sistem 64
bit IEEE, nilai variabel %eps kira-kira adalah 2.220 10-16.
-->%eps
%eps =
2.220D-16
-->format(20)
Matematika Dasar - 31
-->1 + %eps
ans =
1.00000000000000022
-->1 + %eps/2
ans =
1.
Variabel %inf merupakan suatu variabel yang digunakan untuk menyatakan operasi
pembagian suatu bilangan real, (selain bilangan nol), dengan bilangan nol.
-->ieee(2)
-->9.99/0
ans =
Inf
-->-345/0
ans =
-Inf
Fungsi ieee yang terdapat pada contoh ini digunakan untuk mengontrol suatu
perkecualian yang terjadi dalam sebuah operasi aritmatika. Penjelasan mengenai fungsi ini
akan diberikan pada subbab berikutnya tentang pembagian dengan nol.
Variabel %inf digunakan untuk merepresentasikan suatu bilangan yang nilainya diluar
jangkauan bilangan yang dapat disimpan oleh Scilab. Jika suatu bilangan mempunyai
nilai yang lebih besar dari 10308 maka nilainya akan dinyatakan dengan simbol %inf
namun jika nilainya lebih kecil dari -10308 maka nilainya akan dinyatakan dengan
simbol -%inf.
-->2^1023
ans =
8.98D+307
-->2^1024
ans =
Inf
Matematika Dasar - 32
-->-2^1024
ans =
- Inf
Variabel %nan adalah variabel yang digunakan untuk menyatakan suatu operasi
matematika yang tidak didefinisikan, seperti 0/0, ∞ - ∞, ∞/∞
-->0/0
ans =
Nan
Terdapat suatu perkecualian dalam suatu operasi pembagian yaitu pembagi nilainya tidak
boleh sama dengan nol. Jika hal ini terjadi maka Scilab secara default akan menampilkan
suatu pesan kesalahan, seperti yang terlihat pada contoh di bawah ini.
-->99/0
!--error 27
division by zero...
Fungsi ieee dapat digunakan untuk mengontrol perkecualian yang mungkin terjadi pada
suatu operasi aritmatika. Fungsi ieee mempunyai sintaks sebagai berikut:
ieee(m)
dimana m adalah mode untuk menangani operasi perkecualian yang terdapat di dalam
suatu ekpresi aritmatika. Terdapat tiga pilihan untuk argumen mode dalam fungsi ieee
yaitu 0, 1, dan 2. Dekripsi untuk ketiga mode tersebut adalah sebagai berikut:
Mode 0 (mode default), jika terdapat suatu operasi pembagian dengan bilangan nol
maka akan muncul sebuah pesan error.
Mode 1, jika terdapat suatu operasi pembagian dengan bilangan nol maka akan
muncul suatu pesan peringatan yang disertainya dengan hasil perhitungannya yang
berupa Inf atau Nan sesuai dengan operasi aritmatikanya.
Mode 2, jika terdapat suatu operasi pembagian dengan bilangan nol maka hasil
perhitungannya berupa Inf atau Nan sesuai dengan operasi aritmatikanya tanpa
disertai suatu pesan peringatan.
Matematika Dasar - 33
Berikut ini beberapa contoh perhitungan sebagai ilustrasi untuk fungsi ieee.
-->ieee(1)
-->99/0
Warning :division by zero...
ans =
Inf
-->0/0
Warning :division by zero...
ans =
Nan
-->ieee(2)
-->99/0
ans =
Inf
-->0/0
ans =
Nan
Apabila fungsi ieee() dijalankan tanpa menggunakan argumen maka fungsi tersebut akan
menampilkan mode ieee yang sedang dipergunakan.
Akar Kuadrat
Fungsi sqrt adalah fungsi untuk menghitung akar kuadrat dari suatu bilangan real
(termasuk bilangan negatif) maupun akar kuadrat dari suatu bilangan kompleks.
Contoh 4. Sebuah mobil bergerak dari keadaan diam dengan percepatan konstan 5 m/det2.
Tentukan kecepatan mobil tersebut setelah menempuh jarak sejauh 40 m?
√
Matematika Dasar - 34
dimana v0 adalah kecepatan awal, a adalah percepatan dan d jarak yang ditempuh.
20.
√
,
- 0.5 + 0.8660254i
- 0.5 - 0.8660254i
Nilai Mutlak
Fungsi abs adalah fungsi untuk menghitung nilai mutlak dari suatu bilangan real atau nilai
modulus dari suatu bilangan kompleks. Berikut ini contoh penggunaan fungsi abs.
-->abs(-28.9)
ans =
28.9
-->abs(3 - 4*%i)
ans =
5.
Contoh 6. Tentukan jarak terdekat antara titik (1, -4, -3) dengan sebuah bidang planar 2x –
3y + 6z = -1.
Penyelesaian. Jarak terdekat antara suatu titik P(x0, y0, z0) dengan sebuah bidang planar
ax + by + cz + d = 0 dapat dihitung dengan rumus sebagai berikut
| |
√
Dengan menggunakan rumus ini, jarak antara titik P dengan bidang planar dapat dihitung
dengan statemen-statemen sebagai berikut:
0.4285714
Jawaban yang diperoleh yaitu jarak terdekat antara titik (1, -4, -3) dengan bidang planar 2x
– 3y + 6z = -1 adalah 0.429.
Matematika Dasar - 36
Tanda Bilangan
Tanda suatu bilangan dapat diketahui dengan fungsi sign yang mempunyai definisi sebagai
berikut:
1, jika x 0
signx 0, jika x 0
1, jika x 0
Contoh-contoh penggunaan fungsi sign adalah sebagai berikut.
-->sign(56.78)
ans =
1.
-->sign(-28.9)
ans =
- 1.
Pembulatan
Scilab menyediakan beberapa macam fungsi untuk melakukan operasi pembulatan, seperti
yang terlihat pada Tabel 3.4.
Fungsi Deskripsi
round Pembulatan
-->round(5.67)
ans =
6.
-->ceil(2.34)
ans =
3.
-->floor(5.67)
ans =
5.
-->int(-123.45)
ans =
- 123.
Fungsi clean(x, tol) akan membulatkan nilai dari suatu variabel x menjadi angka nol
apabila nilai absolutnya lebih kecil daripada suatu nilai toleransi tol. Argumen tol adalah
argumen yang bersifat opsional dengan nilai default 10-10.
-->x = cos(%pi/2)
x =
6.123D-17
-->x = clean(x)
x =
0.
Suatu bilangan real x dapat diaproksimasi nilainya dengan suatu bilangan rasional m/n
melalui fungsi rat sebagai berikut:
[m,n] = rat(x, )
dimana adalah toleransi aproksimasi. Apabila argumen tidak dipergunakan maka nilai
toleransi aproksimasi yang digunakan adalah 10-6.
Matematika Dasar - 38
-->[n,d] = rat(1.25)
d =
4.
n =
5.
-->[m,n] = rat(%pi,0.001)
n =
7.
m =
22.
Contoh yang terakhir ini adalah salah satu pendekatan nilai yang populer.
Trigonometri
Daftar dari fungsi-fungsi trigonometri dan inverse trigonometri yang terdapat di dalam
Scilab diberikan pada Tabel 3.5. Sebagian besar fungsi trigonometri dan inverse
trigonometri hanya membutuhkan argumen input tunggal, kecuali fungsi atan dan atand.
Terdapat dua macam sintaks untuk kedua fungsi tersebut, yaitu sintak dengan argumen
input tunggal (atan(n) dan atand(n)), serta sintak lainnya dengan dua argumen input
(atan(y,x) dan atand(y,x)).
Fungsi atan(n) dan atand(n) menggunakan dua kuadran dalam perhitungan nilai inverse
tangen. Output dari fungsi atan(n) dan atand(n) masing-masing berada dalam interval
sudut [-½, ½] radian dan [-90, 90] derajat. Fungsi atan(y,x) dan atand(y,x)
menggunakan empat kuadran dalam perhitungan nilai inverse tangen. Output dari fungsi
atan(y,x) dan atand(y,x) masing-masing berada dalam interval sudut [-, ] radian dan
[-180, 180] derajat.
Matematika Dasar - 39
Fungsi Deskripsi
-->sin(%pi/3)
ans =
0.8660254
-->cosd(45)
ans =
0.7071068
-->tan(%pi/4)
ans =
1.
-->acosd(0.5*sqrt(2))
ans =
45.
Matematika Dasar - 40
-->4*atan(1)
ans =
3.1415927
-->atan(-1,1)
ans =
- 0.7853982
Contoh 7. Sebuah peluru ditembakkan dari sebuah meriam dengan kecepatan awal 72
m/detik dan sudut kemiringan terhadap bidang horisontal adalah 60 derajat. Tentukan
jarak jangkauan peluru tersebut ?
Penyelesaian. Jarak jangkauan (r) peluru dapat dihitung dengan formula sebagai berikut:
( )
dimana vo adalah kecepatan awal, adalah sudut tembakan, g adalah percepatan gravitasi.
457.64278
Contoh 8. Dengan mengacu pada Gambar 3.2, tentukan besarnya gaya F yang harus
dikerjakan pada ujung pengungkit sehingga dihasilkan momen pada titik O sebesar 15 Nm
yang bekerja searah jarum jam? Diketahui = 60o, = 30o, a = 50 mm, serta b = 300 mm.
Matematika Dasar - 41
Gambar 3.2
Penyelesaian. Momen yang dihasilkan oleh gaya F yang bekerja pada pengungkit adalah:
M F cos a b sin F sin b cos
Dari persamaan ini diperoleh besarnya gaya F untuk menghasilkan momen M yaitu"
M
F
cos a b sin b sin cos
-->M = 15; // Nm
-->a = 0.05; // m
-->b = 0.30; // m
77.599076
Jadi gaya yang diperlukan untuk menghasilkan momen sebesar 15 Nm adalah 77.6 N.
Matematika Dasar - 42
Hiperbolik
Daftar dari fungsi-fungsi hiperbolik dan inverse hiperbolik yang terdapat di dalam Scilab
dapat dilihat pada tabel di bawah ini.
Fungsi Deskripsi
sinh Sinus hiperbolik
cosh Cosinus hiperbolik
tanh Tangen hiperbolik
coth Cotangen hiperbolik
asinh Inverse sinus hiperbolik
acosh Inverse cosinus hiperbolik
atanh Inverse tangen hiperbolik
Berikut ini adalah ilustrasi penggunaan fungsi-fungsi hiperbolik dan inverse hiperbolik.
-->sinh(2)
ans =
3.6268604
-->tanh(0.5 + 2.5*%i)
ans =
0.6433315 - 0.5249367i
-->asinh(3.5)
ans =
1.9657205
Contoh 9. Sebuah kabel optik tergantung pada tiang-tiang dimana ujung-ujung pada setiap
bentangnya membentuk sudut terhadap horisontal (Gambar 3.3). Tentukan tegangan
minimum yang bekerja pada kabel dan tinggi maksimum lendutannya? Diketahui kabel
optik mempunyai kerapatan massa 0.9 kg/m dan jarak antar tiang adalah 30 m.
Matematika Dasar - 43
Gambar 3.3
Penyelesaian. Tegangan tarik maksimum (Tmax) yang bekerja pada kabel dan tinggi
lendutan maksimum (h) dapat ditentukan dengan rumus-rumus sebagai berikut
a
w
FH 2
asinh tan
FH
Tmax
cos
a
w
FH
h cosh 2 1
w FH
w g
Dimana: FH adalah tegangan tarik horisontal yang bekerja pada kabel optik
Tmax adalah tegangan tarik maksimum yang bekerja pada kabel optik
h adalah panjang lendutan maksimum
a adalah jarak antara tiang
w adalah berat satuan kabel
adalah kerapatan massa (density) kabel
g adalah percepatan gravitasi
Perhitungan tegangan tarik maksium (Tmax) yang bekerja pada kabel dan tinggi lendutan
maksimum (h) adalah sebagai berikut.
Matematika Dasar - 44
336.32494
362.73813
2.9916403
Jadi tegangan tarik maksimum yang bekerja pada kabel adalah 362.7 N dan tinggi lendutan
maksimum pada bagian tengah kabel adalah 2.99 m.
Daftar dari fungsi-fungsi exponensial dan logaritma yang terdapat terpasang di dalam
Scilab diberikan pada Tabel 3.7.
Fungsi Deskripsi
exp Exponensial
Deskripsi mengenai fungsi-fungsi tersebut adalah sudah jelas dari deskripsi yang diberikan
pada Tabel 3.7 kecuali untuk fungsi nextpow2. Fungsi nextpow2(x) adalah suatu fungsi
yang digunakan untuk menghitung suatu bilangan integer n terkecil yang memenuhi
persyaratan 2n |x|.
-->exp(2.5)
ans =
12.182494
-->log(10)
ans =
2.3025851
-->log10(0.001)
ans =
- 3.
-->nextpow2(20)
ans =
5.
Contoh 10. Anggap suatu minuman kopi mempunyai kandungan ion hidrogen sebanyak
1.2×10-6 mol/Liter. Tentukan berapakah nilai pH-nya ?
Penyelesaian. Nilai pH suatu zat dapat ditentukan dengan formula sebagai berikut:
pH log10 H
dimana [H+] adalah konsentrasi dari ion hidrogen dalam satuan mol/Liter. Maka nilai pH
dari minuman kopi dapat dihitung sebagai berikut:
-->pH_kopi = -log10(kopi)
pH_kopi =
5.9208188
Contoh 11. Jumlah penduduk dunia pada awal tahun 1990 diperkirakan adalah sekitar 5.3
milyar dengan laju pertambahan penduduk sekitar 2% per tahun. Dengan mengunakan
asumsi bahwa pertumbuhan populasi penduduk akan bertambah secara eksponensial,
maka perkirakan jumlah penduduk dunia pada awal tahun 2015 ?
Penyelesaian. Jumlah penduduk pada awal suatu tahun tertentu dapat dihitung dengan
persamaan sebagai berikut:
y yo e kt
dimana yo adalah jumlah penduduk pada awal tahun 1990 (dalam satuan milyar), k adalah
laju pertambahan penduduk dan t adalah perbedaan waktu sejak tahun 1990 (dalam
satuan tahun).
Perhitungan jumlah penduduk dunia pada awal tahun 2015 dapat diselesaikan dengan
perintah-perintah sebagai berikut:
8.7382227
Jadi jumlah penduduk dunia pada awal tahun 2015 adalah sebanyak 8.73 milyar.
Faktorial
Notasi matematika untuk faktorial dari suatu bilangan bulat n adalah n!. Di dalam Scilab,
nilai faktorial dari suatu bilangan dapat dihitung dengan menggunakan fungsi factorial,
seperti yang ditunjukkan pada contoh di bawah ini:
-->factorial(6)
ans =
720.
Matematika Dasar - 47
Contoh 12. Sebuah panitia yang terdiri dari tiga orang akan diambil dan dibentuk dari
delapan orang. Tentukan berapa banyak kombinasi panitia yang dapat dibentuk apabila
satu orang hanya dapat masuk sekali saja dalam satu grup?
Penyelesaian. Jumlah kombinasi panitia yang dapat dibentuk dapat dihitung dengan
rumus sebagai berikut:
( )
dimana n adalah jumlah orang yang akan dipilih dan k adalah jumlah anggota panitia. Jadi,
jumlah kombinasi panitia yang dapat dibentuk adalah
-->K = factorial(8)/(factorial(3)*factorial(8-3))
K =
56.
Bilangan Kompleks
Misalkan z adalah bilangan kompleks z = x + iy, dimana i adalah simbol bilangan imajiner
1 , maka bilangan kompleks z di dalam Scilab dapat dinyatakan sebagai berikut:
z = x + y*%i atau z = x + %i*y
Sebagai contoh, notasi untuk bilangan kompleks z = 2 – 3i adalah sebagai berikut:
-->z = 2 - 3*%i
z =
2. - 3.i
-->x = 1 - 3*%i;
-->y = -2 + %i*5;
-->p = x + y
p =
- 1. + 2.i
Matematika Dasar - 48
-->q = x - y
q =
3. - 8.i
-->r = x*y
r =
13. + 11.i
-->r/x
ans =
- 2. + 5.i
-->x = 3 + 4*%i;
-->real(x)
ans =
3.
-->imag(x)
ans =
4.
-->w = 8 + 10*%i;
-->conj(w)
ans =
8. - 10.i
Matematika Dasar - 49
-->v = 12 - 5*%i;
-->abs(v)
ans =
13.
dimana: √
( )
Sebagai contoh, bilangan kompleks z = -3 + 4i dapat dirubah ke dalam bentuk polar dengan
perhitungan sebagai berikut.
-->z = -3 + 4*%i;
-->r = abs(z)
r =
5.
Matematika Dasar - 50
126.8699
Berikut ini adalah ilustrasi penulisan bilangan kompleks dalam notasi eksponensial.
-->z = -3 + 4*%i;
-->r = abs(z)
r =
5.
2.2142974
-->r*exp(theta*%i)
ans =
- 3. + 4.i
Semua tipe data di dalam Scilab dianggap berupa suatu matrik. Matrik adalah sebuah larik
data segiempat yang terdiri dari beberapa baris dan kolom. Vektor dan skalar merupakan
bentuk khusus dari matrik. Vektor adalah sebuah matrik yang hanya mempunyai satu baris
(vektor baris) atau satu kolom (vektor kolom) kemudian skalar adalah sebuah matrik yang
hanya terdiri dari satu elemen saja.
Berikut ini adalah ilustrasi mengenai obyek skalar, vektor dan matrik.
123.
1. 2. 3. 4. 5.
4.
4.
2.
-->M = [1 3 5; 2 4 6] // matrik (2 x 3)
M =
1. 3. 5.
2. 4. 6.
Matrik dan Vektor - 52
Suatu vektor atau matrik dapat dibuat secara manual dengan menggunakan operator
kurung-siku kanan ([) dan operator kurung-siku kiri (]).
Elemen-elemen suatu vektor dapat dipisahkan dengan menggunakan tanda spasi, koma (,)
atau titik koma (;). Jika elemen-elemen vektor dipisahkan dengan tanda spasi atau koma
maka yang dihasilkan adalah suatu vektor baris, namun jika elemen-elemen vektor
dipisahkan dengan titik-koma maka yang akan dihasilkan adalah suatu vektor kolom.
-->v1 = [1, 3, 9]
v1 =
1. 3. 9.
-->v2 = [2 4 6]
v2 =
2. 4. 6.
10.
11.
12.
-->A = [9 7 5; 1 4 3]
A =
9. 7. 5.
1. 4. 3.
-->B = [1 2 4 [Enter]
--> 2 4 8 [Enter]
--> 3 6 12]
B =
1. 2. 4.
2. 4. 8.
3. 6. 12.
Matrik dan Vektor - 53
Elemen matrik yang terdapat pada setiap baris harus sama jumlahnya. Jika hal ini tidak
dipenuhi maka akan muncul sebuah pesan kesalahan, seperti yang pada contoh berikut ini.
-->X = [1 2 3; 4 5 6 7; 8 9 10]
!--error 6
inconsistent row/column dimensions
Suatu ekspresi matematika juga dapat digunakan sebagai nilai suatu dari elemen vektor
atau matrik, seperti pada contoh di bawah ini:
3. 12.
2.7182818 2.3025851
Vektor Inkremental
Vektor inkremental adalah suatu vektor baris dimana nilai dari setiap elemennya
bertambah atau berkurang secara konstan terhadap elemen sebelumnya. Suatu vektor
inkremental dibuat dengan operator titik-dua () sebagai berikut.
x = j:k
x = j:d:k
Statemen j:k akan menghasilkan sebuah vektor baris dimana nilai elemen pertamanya
adalah j, nilai elemen berikutnya adalah j+1 dan seterusnya sampai nilai elemen terakhir
nilainya sama dengan k atau suatu nilai inkremental terbesar yang lebih kecil dari k.
Apabila nilai indek j lebih besar dari indek k maka statemen j:k akan menghasilkan
sebuah vektor kosong.
-->tahun = 2011:2016
tahun =
Statemen j:d:k akan menghasilkan sebuah vektor baris dimana nilai elemen pertamanya
adalah j, nilai elemen berikutnya adalah j+d, dan seterusnya sampai diperoleh suatu
elemen yang nilai nilainya sama dengan k atau suatu nilai inkremental terbesar yang lebih
kecil dari k. Nilai d dapat berupa suatu bilangan desimal positif maupun desimal negatif.
Namun bila d bernilai negatif maka nilai j harus lebih besar daripada k.
Matrik dan Vektor - 54
-->xpts = 0:.25:2
xpts =
-->y = 10:-2:1
y =
10. 8. 6. 4. 2.
Terdapat dua fungsi yang dapat digunakan untuk membuat suatu vektor baris inkremental
yaitu linspace dan logspace.
Linspace
Fungsi linspace mempunyai sintaks sebagai berikut:
X = linspace(n_awal, n_akhir, npts)
Output dari fungsi linspace adalah sebuah vektor baris yang mempunyai elemen sebanyak
npts dimana elemen-elemen tersebut mempunyai jarak linier yang seragam yang nilainya
terletak diantara n_awal dan n_akhir. Argumen npts bersifat opsional jika tidak digunakan
maka jumlah elemen yang dihasilkan adalah sebanyak 100 elemen.
-->a = linspace(1,2,4)
a =
1. 1.333 1.667 2.
-->b = linspace(4,0,5)
b =
4. 3. 2. 1. 0.
Logspace
Sintak dari fungsi logspace adalah sebagai berikut:
X = logspace(n_awal, n_akhir, npts)
Output dari fungsi logspace adalah sebuah vektor baris yang mempunyai elemen sebanyak
npts dimana elemen-elemen tersebut mempunyai jarak logaritmik yang seragam yang
Matrik dan Vektor - 55
nilainya terletak diantara 10n_awal dan 10n_akhir. Apabila argumen n_akhir berupa %pi maka
nilai dari elemen terakhir adalah bukan 10. Argumen npts bersifat opsional jika tak
digunakan maka jumlah elemen yang dihasilkan adalah sebanyak 50 elemen.
-->x = logspace(1,2,4)
x =
Scilab juga menyediakan fungsi-fungsi yang dapat digunakan untuk membuat beberapa
matrik khusus. Fungsi-fungsi tersebut yaitu ones, zeros, eye, diag dan rand.
Ones
Fungsi ones(m,n) akan menghasilkan suatu matrik berukuran m × n dimana semua
elemennya mempunyai nilai satu.
-->A = ones(3,4)
A =
1. 1. 1. 1.
1. 1. 1. 1.
1. 1. 1. 1.
-->B = ones(3,1)
B =
1.
1.
1.
Fungsi ones juga dapat menerima argumen berupa suatu matrik. Statemen ones(X) akan
menghasilkan suatu matrik satuan yang berukuran sama dengan matrik X.
-->C = [4 5 1; 4 4 2];
-->D = ones(C)
D =
1. 1. 1.
1. 1. 1.
Matrik dan Vektor - 56
Zeros
Fungsi zeros(m,n) akan menghasilkan suatu matrik berukuran m × n dimana semua
elemennya mempunyai nilai nol.
-->X = zeros(2,3)
X =
0. 0. 0.
0. 0. 0.
Argumen dari fungsi zeros juga dapat berupa suatu matrik. Fungsi zeros(X) akan
menghasilkan suatu matrik nol yang berukuran sama dengan matrik X.
Eye
Fungsi eye(m,n) akan menghasilkan suatu matrik identitas yang berukuran m × n.
-->I = eye(3,3)
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->J = eye(2,5)
J =
1. 0. 0. 0. 0.
0. 1. 0. 0. 0.
Fungsi eye juga dapat menerima argumen berupa suatu matrik. Statemen eye(X) akan
menghasilkan suatu matrik identitas yang berukuran sama dengan matrik X.
Rand
Fungsi rand dapat digunakan untuk membuat suatu matrik yang elemen-elemennya
merupakan bilangan random. Sintak dari fungsi rand adalah sebagai berikut:
A = rand(m,n,dist)
A = rand(X,dist)
dimana m dan n adalah jumlah baris dan kolom matrik yang akan dibuat, X adalah
sembarang matrik dan dist adalah distribusi dari bilangan random. Apabila argumen
fungsi rand berupa suatu matrik X maka matrik bilangan random yang dihasilkannya akan
Matrik dan Vektor - 57
-->x = rand(2,4)
x =
-->Y = rand(3,3,'normal')
Y =
Diag
Fungsi diag dapat digunakan untuk membuat sebuah matrik diagonal. Misalkan v adalah
sebuah vektor maka fungsi diag(v) akan menghasilkan suatu matrik yang elemen-elemen
diagonalnya merupakan elemen-elemen dari vektor v.
-->d = [1 2 3 4];
-->D = diag(d)
D =
1. 0. 0. 0.
0. 2. 0. 0.
0. 0. 3. 0.
0. 0. 0. 4.
Selain itu, fungsi diag juga dapat digunakan untuk mengekstrak elemen-elemen diagonal
suatu matrik, seperti pada contoh di bawah ini.
Matrik dan Vektor - 58
9. 8. 7.
6. 5. 4.
3. 2. 1.
-->diag(A)
ans =
9.
5.
1.
Konkatenasi
-->V1 = [1 2 3 4];
-->V2 = [5 6 7 8];
1. 2. 3. 4. 5. 6. 7. 8.
1. 2. 3. 4. 5. 6. 7. 8.
11. 12. 13. 14. 15. 16. 17. 18.
-->N1 = [1 2 3 4 5];
-->N3 = eye(2,2);
Matrik dan Vektor - 59
1. 2. 3. 4. 5.
10. 20. 30. 1. 0.
11. 21. 31. 0. 1.
-->A = [1 2 3];
-->B = [4 5 6 7];
-->X = [A; B]
!--error 6
inconsistent row/column dimensions
Dimensi Matrik
Informasi mengenai dimensi dari suatu matrik dapat diperoleh dengan menggunakan
fungsi size yang mempunyai sintaks sebagai berikut:
[nr,nc] = size(A)
dimana nr dan nc adalah jumlah baris dan kolom dari matrik atau vektor A. Fungsi size juga
dijalankan dengan argumen output tunggal, sebagai berikut:
n = size(A)
Output dari sintak ini adalah suatu vektor baris, dimana elemen pertama dan keduanya
masing-masing menyatakan jumlah baris dan jumlah kolom matrik A.
-->A = [1 1 0 1; 1 0 2 0; 0 -2 2 -4];
-->[nr,nc] = size(A)
nc =
4.
nr =
3.
Matrik dan Vektor - 60
Jumlah semua elemen yang terdapat pada suatu vektor atau matrik dapat diketahui dengan
menggunakan fungsi length, seperti yang ditunjukkan pada contoh-contoh di bawah ini.
-->length(a)
ans =
5.
-->length(A)
ans =
12.
Suatu matrix dapat dirubah dimensinya dengan fungsi matrix dengan sintaks sebagai
berikut:
matrix(A, m, n)
dimana A adalah matrik yang akan dirubah dimensinya, kemudian m dan n adalah ukuran
dimensi dari matrik yang baru. Jika yang dirubah dimensi baris atau kolomnya saja maka
angka -1 digunakan sebagai nilai argumen untuk dimensi lainnya yang tidak ditentukan.
-->V = 1:12;
-->M = matrix(V,3,4)
M =
1. 4. 7. 10.
2. 5. 8. 11.
3. 6. 9. 12.
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
-->B = matrix(A, 2, 6)
B =
1. 9. 6. 3. 11. 8.
5. 2. 10. 7. 4. 12.
Matrik dan Vektor - 61
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
Dimensi dari matrik yang dihasilkan oleh fungsi matrix harus sesuai atau kompatibel
dengan dimensi dari matrik lama. Apabila persyaratan ini tidak dipenuhi maka akan
muncul suatu pesan kesalahan seperti pada contoh di bawah ini.
-->X = matrix(A,5,3)
!--error 60
argument with incompatible dimensions
Elemen ke-i dari suatu vektor v dapat diekstrak dengan notasi sebagai berikut:
v(i)
Pada operasi ini, simbol $ dapat digunakan untuk menyatakan indek dari elemen yang
terakhir. Berikut ini ilustrasi proses ekstrasi elemen-elemen suatu vektor.
-->a = [1 3 5 7 9];
-->a(2)
ans =
3.
-->a($)
ans =
9.
Semua elemen vektor yang terletak pada indek ke-i sampai ke-j dapat diekstrak dengan
cara sebagai berikut.
v(i:j)
Elemen-elemen vektor yang letaknya tidak berurutan juga dapat diekstrak dengan
menggunakan notasi sebagai berikut:
v([i k p . . .])
dimana i, k, p adalah letak atau indek dari elemen-elemen yang akan diekstrak.
Matrik dan Vektor - 62
-->a = [1 3 5 7 9];
-->b = a(2:4)
b =
3. 5. 7.
9. 1. 5.
Elemen yang terletak pada baris ke-m dan kolom ke-n dari suatu matrik X dapat diekstrak
dengan notasi sebagai berikut:
X(m,n)
Pada operasi ini, simbol $ dapat digunakan untuk menyatakan baris terakhir atau kolom
terakhir.
-->A = [1 2 3; 4 5 6; 7 8 9]
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->a12 = A(1,2)
a12 =
2.
-->b = A(2,$)
b =
6.
-->A($,$)
ans =
9.
Matrik dan Vektor - 63
Elemen-elemen matrik X yang terletak pada baris ke-i dapat diekstrak dengan sintaks
sebagai berikut:
X(i,:)
Kemudian untuk mengekstrak semua elemen matrik X yang terletak pada kolom ke-j
sintaknya adalah sebagai berikut.
X(:,j).
Berikut ini ilustrasi ekstraksi elemen-elemen matrik yang terletak pada suatu baris atau
kolom tertentu.
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
-->A(3,:)
ans =
-->A(:,$)
ans =
4.
8.
12.
16.
Elemen-elemen matrik X yang terletak pada baris ke-i sampai baris ke-j serta kolom ke-m
sampai kolom ke-n dapat diekstrak dengan sintaks sebagai berikut:
X(i:j, m:n)
Pada operasi ini, simbol titik-dua (:) juga dapat digunakan untuk menyatakan elemen-
elemen yang terletak pada semua baris atau semua kolom yang dimaksud.
-->A(2:3, 2:4)
ans =
6. 7. 8.
10. 11. 12.
Matrik dan Vektor - 64
-->A(3:4, :)
ans =
Beberapa elemen matrik yang letaknya tidak berurutan dapat diekstrak secara serentak
dengan sintaks sebagai berikut:
X([p q ...], [r s ...])
dimana p q ... adalah indek untuk posisi baris, kemudian r s ... adalah indek untuk
posisi kolom.
2. 4.
6. 8.
Elemen-elemen matrik yang diekstrak harus berada di dalam dimensi matrik. Apabila
elemen yang diekstrak berada di luar dari dimensi matrik maka akan muncul sebuah pesan
kesalahan seperti pada contoh di bawah ini.
-->A(4,5)
!--error 21
invalid index
Elemen-elemen yang terdapat pada sebuah matrik atau vektor juga dapat dirubah nilainya
dengan menggunakan statemen penugasan, seperti yang terlihat pada contoh-contoh di
bawah ini.
-->x = [1 2 4 6];
-->x(2) = 3
x =
1. 3. 4. 6.
-->x($) = 12
x =
1. 3. 4. 12.
Matrik dan Vektor - 65
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
-->A(4,4) = 0
A =
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 0.
-->A(2,:) = [0 1 0 0]
A =
1. 2. 3. 4.
0. 1. 0. 0.
9. 10. 11. 12.
13. 14. 15. 0.
1. 2. 3. 4.
0. 1. 0. 0.
0. 0. 0. 12.
0. 0. 0. 0.
Seperti yang terlihat pada contoh-contoh di atas, notasi untuk menyatakan indek dari
elemen-elemen matrik atau vektor yang akan dirubah nilainya adalah sama seperti notasi
yang digunakan pada proses ekstraksi elemen-elemen matrik atau vektor.
Apabila indek atau posisi dari elemen yang akan dirubah nilainya berada di luar dari
dimensi matrik atau vektor maka dimensi dari matrik atau vektor akan bertambah secara
otomatis. Pada operasi ini elemen-elemen baru lainnya yang nilainya tidak didefinisikan
akan diisi dengan nilai nol.
-->X = [1 2 3 4];
-->X(7) = 7
X =
1. 2. 3. 4. 0. 0. 7.
Matrik dan Vektor - 66
-->Z = ones(3,3);
-->Z(3,5) = 2
Z =
1. 1. 1. 0. 0.
1. 1. 1. 0. 0.
1. 1. 1. 0. 2.
Elemen-elemen yang terdapat pada suatu vektor atau matrik dapat dihapus sehingga
menjadi sebuah vektor atau matrik baru yang lebih kecil. Notasi posisi elemen-elemen
vektor atau matriks adalah sama seperti notasi pada proses ekstraksi elemen-elemen
vektor atau matrik.
Berikut ini beberapa contoh operasi penghapusan elemen-elemen suatu vektor atau
matrik.
-->A = [1 2 3 4 5 6 7];
-->A(4) = [ ]
A =
1. 2. 3. 5. 6. 7.
16. 3. 2. 13.
5. 10. 11. 8.
9. 6. 7. 12.
4. 15. 14. 1.
-->xyz(2,:) = []
xyz =
16. 3. 2. 13.
9. 6. 7. 12.
4. 15. 14. 1.
-->xyz([1 3],:) = []
xyz =
9. 6. 7. 12.
Matrik dan Vektor - 67
Seperti yang terlihat pada contoh-contoh yang telah diberikan, statemen untuk menghapus
elemen-elemen suatu matrik atau vektor adalah serupa dengan sintak untuk merubah nilai
elemen-elemen suatu matrik atau vektor, namun pada bagian kanan dari statemennya
adalah berupa sebuah matrik kosong yang dinyatakan dengan simbol [].
Sebuah elemen tunggal tidak dapat dihapus dari suatu matrik karena elemen-elemen yang
terdapat di dalam suatu matrik harus membentuk sebuah larik segiempat. Apabila operasi
tersebut dilakukan maka akan muncul adalah sebuah pesan kesalahan seperti yang
ditunjukkan pada contoh di bawah ini.
-->Z = [1 2 3; 4 5 6]
Z =
1. 2. 3.
4. 5. 6.
-->Z(2,3) = []
!--error 15
submatrix incorrectly defined
Pada sebuah matrik atau vektor, indeks atau letak dari elemen-elemennya yang memenuhi
suatu kriteria tertentu dapat diketahui dengan cara sebagai berikut
find(lgk)
Argumen lgk adalah suatu ekspresi logika yang merepresentasikan kriteria pencarian.
Output dari fungsi find adalah suatu vektor baris yang menyatakan lokasi dari elemen-
elemen yang memenuhi kriteria yang diberikan dan jika tidak ada elemen yang memenuhi
kriteria maka outputnya adalah sebuah matrik kosong [ ].
-->x = [0.8 1.2 5.8 8.9 0.3 7.2 1.5 5.6 0.2];
3. 4. 6. 8.
-->y = x(i)
y =
Matrik dan Vektor - 68
3. 8.
-->w = x(k)
w =
5.8 5.6
[]
-->R = rand(4,4)
R =
1. 6. 7. 8. 11. 13.
-->X = R(i)
X =
0.923
0.518
0.833
0.610
0.843
0.853
[]
Elemen-elemen dari sebuah vektor atau matrik yang memenuhi suatu kriteria tertentu juga
dapat diekstrak secara langsung dengan subskripsi logika tanpa harus menggunakan fungsi
find, seperti yang ditunjukkan pada contoh-contoh di bawah ini.
-->x
Matrik dan Vektor - 69
x =
5.8 5.6
-->R
R =
0.468
0.395
0.518
0.61
0.492
Matrik Non-Numerik
Scilab juga dapat menangani operasi pembuatan maupun operasi manipulasi terhadap
matrik non-numerik seperti matrik polinomial dan matrik string secara mudah seperti
pada matrik numerik. Penjelasan mengenai hal tersebut akan diberikan pada Bab 7:
Polinomial dan Rasioanl dan Bab 8: String.
Bab 5
Operasi Matematika terhadap Matrik dan Vektor
Di dalam Scilab sebagian besar operasi matematika terhadap suatu matrik atau vektor,
seperti penjumlahan, pengurangan, perkalian, dapat dilakukan secara mudah dan ringkas
tanpa harus menggunakan statemen perulangan.
Beberapa contoh operasi penjumlahan dan pengurangan terhadap matrik dan vektor
adalah sebagai berikut.
-->F1 = [2 3 0];
-->F3 = [3 1 -5];
-->FResultan = F1 + F2 + F3
FResultan =
5. - 6. - 5.
-->A = [-4 6 3; 0 1 2]
A =
- 4. 6. 3.
0. 1. 2.
Operasi Matematika terhadap Matrik dan Vektor - 71
-->B = [5 -1 7; 3 1 8]
B =
5. - 1. 7.
3. 1. 8.
-->C = A + B
C =
1. 5. 10.
3. 2. 10.
-->D = B - A
D =
9. - 7. 4.
3. 0. 6.
-->d = [1 3 7];
-->t = d - p
!--error 9
inconsistent subtraction
-->A = [-4 6 3; 0 1 2]
A =
- 4. 6. 3.
0. 1. 2.
-->Z = [7 -2; 3 8]
Z =
7. - 2.
3. 8.
-->A + Z
!--error 8
inconsistent addition
Pada contoh ini, kesalahan pertama terjadi karena meskipun vektor d dan p jumlah
elemennya sama namun kedua vektor tersebut berbeda dimensinya, selanjutnya kesalahan
kedua terjadi karena matrik A dan Z mempunyai jumlah kolom yang berbeda.
Operasi Matematika terhadap Matrik dan Vektor - 72
Operasi penjumlahan dan pengurangan juga dapat dilakukan antara suatu matrik atau
vektor dengan skalar. Sintaks untuk operasi ini adalah sebagai berikut:
Y = X + k
Y = X - k
dimana X adalah suatu matrik atau vektor dan k adalah suatu skalar. Pada kasus ini, skalar
akan dioperasikan terhadap semua elemen-elemen vektor atau matrik.
Contoh operasi penjumlahan dan pengurangan antara matrik dan vektor dengan skalar
adalah sebagai berikut:
-->T_Celcius = 0:20:100
T_Celcius =
-->Q = P - 2000
Q =
1. 2. 3. 4. 5.
6. 7. 8. 9. 10.
Contoh 1. Sebuah pesawat terbang dengan arah N30oE dan kecepatan 400 km/jam.
Apabila angin bertiup dari arah utara dengan kecepatan 110 km/jam, tentukan kecepatan
relatif pesawat terhadap tanah? (Lihat Gambar 5.1)
Penyelesaian. Misalkan vpa adalah vektor kecepatan pesawat dan vag adalah vektor
kecepatan angin. Dengan menggunakan data-data yang diberikan maka kedua vektor
kecepatan tersebut dapat kita nyatakan sebagai berikut:
-->vag = [0 -110];
Kecepatan relatif pesawat terhadap tanah (vpg) dapat dihitung sebagai berikut:
200. 236.41016
Gambar 5.1
Kemudian, laju pesawat (v) serta arah kecepatannya () dapat dihitung sebagai berikut:
309.66072
-->theta = atand(vpg(2),vpg(1))
theta =
49.769202
Diperoleh bahwa pesawat melaju dengan kecepatan 309.7 km/jam dengan arah N40oE.
Terhadap sembarang matrik atau vektor dapat dilakukan suatu operasi perkalian atau
pembagian dengan suatu skalar. Sintaks untuk kedua operasi tersebut yaitu:
Y = k*X
Y = X/k
Operasi Matematika terhadap Matrik dan Vektor - 74
Pada kedua operasi ini, skalar akan dioperasikan terhadap semua elemen vektor atau
matrik.
Berikut ini contoh-contoh operasi perkalian dan pembagian antara matrik atau vektor
dengan skalar
-->panjang_cm = 0:25:100
panjang_cm =
-->panjang_inch = panjang_cm/2.54
panjang_inch =
-->Temperature = 0:20:100
Temperature =
420000. - 420000.
- 420000. 420000.
Contoh 2. Sebuah gaya F sebesar 100 N diaplikasikan pada titik O (Lihat Gambar 5.2).
Tentukan komponen-komponen gaya F yang bekerja pada sumbu x, y dan z?
Penyelesaian. Dengan mengacu pada Gambar 5.2, komponen gaya F yang bekerja pada
sumbu x, y dan z dapat dihitung dengan statemen sebagai berikut:
Gambar 5.2
Jadi komponen-komponen gaya F pada sumbu x, y dan z masing-masing yaitu 42.4 N, 56.6
N dan 70.7 N.
Contoh 3. Sebuah mobil bergerak dengan kecepatan 30 m/detik pada arah E 60o N
kemudian mobil tersebut berbelok secara tiba-tiba ke arah timur pada kecepatan 25
m/detik dalam waktu 2.5 detik. Tentukan percepatan dari mobil tersebut?
Penyelesaian. Misalkan v1 dan v2 adalah vektor kecepatan mobil sebelum dan sesudah
berbelok maka kedua vektor kecepatan tersebut dapat dinyatakan sebagai berikut:
15. 25.980762
-->dv = v2 -v1
dv =
10. - 25.980762
Besarnya percepatan (a) mobil dapat diperoleh dengan membagi besarnya kecepatan
relatif mobil dengan waktu (t) selama berbelok.
-->t = 2.5;
Operasi Matematika terhadap Matrik dan Vektor - 76
-->sqrt(dv(1)^2 + dv(2)^2)/t
ans =
11.135529
Perkalian Matrik
Berikut ini contoh-contoh operasi perkalian matrik yang mengikuti aturan aljabar linier.
-->p = [8 1 6; 3 5 7; 4 9 2]
p =
8. 1. 6.
3. 5. 7.
4. 9. 2
-->q = [0; 1; 0]
q =
0.
1.
0.
Operasi Matematika terhadap Matrik dan Vektor - 77
-->p*q
ans =
1.
5.
9.
-->A = [4 3; 7 2; 9 0]
A =
4. 3.
7. 2.
9. 0.
-->B = [2 5; 1 6]
B =
2. 5.
1. 6.
-->C = A*B
C =
11. 38.
16. 47.
18. 45.
Pada operasi perkalian terhadap matrik-matrik yang dimensinya tidak cocok maka akan
muncul suatu pesan kesalahan seperti yang diperlihatkan pada contoh di bawah ini.
-->D = B*A
!--error 10
Inconsistent multiplication.
Contoh 4. Misalkan A adalah sebuah vektor yang mempunyai komponen (2,5). Apabila
terhadap vektor A dilakukan rotasi sebesar 30o berlawanan arah dengan jarum jam,
tentukan komponen vektor A setelah dirotasi?
Penyelesaian. Jika (x, y) adalah komponen vektor A sebelum dirotasi dan (xrot, yrot) adalah
komponen vektor A setelah dirotasi sebesar berlawanan arah jarum jam yang dapat
dihitung dengan persamaan sebagai berikut
* + * +* +
Operasi Matematika terhadap Matrik dan Vektor - 78
Dengan menggunakan formula di atas, komponen vektor A setelah dirotasi sebesar 30o
berlawanan arah dengan jarum jam dapat dihitung sebagai berikut:
0.8660254 - 0.5
0.5 0.8660254
- 0.7679492
5.330127
Contoh 5. Perusahaan SuperKomp memproduksi dua model komputer yaitu PC-A dan PC-
B. Ongkos produksi (dalam satuan Rupiah) dan jumlah unit yang diproduksi pada setiap
kuartal untuk tahun 2010 adalah sebagai berikut:
Hitung jumlah total dari masing-masing komponen ongkos produksi pada setiap kuartal?
Penyelesaian. Anggap Ongkos adalah variabel yang menyatakan komponen ongkos untuk
komputer model PC-A dan PC-B dan Produksi adalah variabel jumlah produksi pada setiap
kuartal. Berikut ini adalah statemen-statemen Scilab untuk menyatakan ongkos produksi
dan jumlah produksi.
Operasi Matematika terhadap Matrik dan Vektor - 79
1200000. 1600000.
300000. 400000.
500000. 600000.
-->Produksi = 1000*[3 8 6 9; 6 2 4 3]
Produksi =
Kemudian total komponen ongkos produksi untuk setiap kuartal dapat dihitung dengan
cara sebagai berikut:
-->Total_Ongkos_perkuartal = Ongkos*Produksi
Total_Ongkos_perkuartal =
10^9 *
Jadi total komponen ongkos produksi pada setiap kuartal pada tahun 2010 adalah sebagai
berikut:
Berikut ini contoh-contoh operasi perkalian matrik secara elemen dengan elemen.
-->n = 1:6
n =
1. 2. 3. 4. 5. 6.
-->nn = n.*n
nn =
-->X = [8 1 6; 3 5 7; 4 9 2]
X =
8. 1. 6.
3. 5. 7.
4. 9. 2.
-->I = eye(3,3)
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->D = X.*I
D =
8. 0. 0.
0. 5. 0.
0. 0. 2.
-->A = [4 3; 7 2; 9 0]
A =
4. 3.
7. 2.
9. 0.
-->B = [2 5; 1 6]
B =
2. 5.
1. 6.
Operasi Matematika terhadap Matrik dan Vektor - 81
-->C = A.*B
!--error 9999
inconsistent element-wise operation
Contoh 6. Sebuah balok digunakan untuk menahan tumpukan karung pasir, seperti yang
terlihat pada Gambar 5.3. Tentukan resultan gaya yang dihasilkan oleh tumpukan karung
pasir tersebut dan lokasinya dari titik A? Diketahui: a = 3 m, b = 3 m, c = 1.5; w 1 = 1.5 kN/M,
w2 = 1 kN/M; w3 = 2.5 kN/m.
Gambar 5.3
Penyelesaian. Panjang setiap segmen dan intensitas beban yang bekerja pada setiap
segmen adalah sebagai berikut:
Gaya yang bekerja pada setiap segmen (F), letak gaya yang bekerja pada setiap segmen dari
titik A (x), resultan gaya (R), resultan momen yang bekerja pada titik A (M) serta letak dari
resultan gaya dari titik A (d) dapat kita hitung dengan statemen-statemen sebagai berikut:
4.5 3. 3.75
11.25
45.5625
4.05
Diperoleh bahwa resultan gaya adalah sebesar 11.25 kN terletak 4.05 m dari titik A.
Catatan: Fungsi sum adalah fungsi untuk menjumlahkan elemen-elemen suatau matrik atau
vektor. Penjelasan mengenai fungsi sum akan dijelaskan pada subbab akhir dari bab ini.
Pembagian Matrik
Pembagian Kiri
Operator pembagian kiri (\) digunakan untuk menyelesaikan sistem persamaan linier
, dimana A dan b masing-masing adalah koefisien sistem persamaan linier serta x
adalah variabel yang takdiketahui.
Nilai dari variabel-variabel yang tak diketahui (x) dari sistem persamaan linier
dapat dihitung dengan operator pembagian kiri dengan sintaks sebagai berikut:
x = A\b
Penjelasan yang lebih terperinci mengenai operator pembagian kiri akan diberikan pada
bab selanjutnya, yaitu Bab 6: Aljabar Linier.
[ ][ ] [ ]
-->A = [1 2 1 4; 2 0 4 3; 4 2 2 1; -3 1 3 2]
A =
1. 2. 1. 4.
2. 0. 4. 3.
4. 2. 2. 1.
- 3. 1. 3. 2.
13.
28.
20.
6.
Variabel yang tak diketahui (x) dapat dihitung dengan cara sebagai berikut:
-->x = A\b
x =
3.
- 1.
4.
2.
Operasi Matematika terhadap Matrik dan Vektor - 84
Pembagian Kanan
Sintaks untuk operasi pembagian kanan (/) adalah sebagai berikut:
M = Z/Y
Pada statemen di atas, Y dapat berupa skalar atau matrik. Jika Y berupa skalar maka
operasi pembagian tersebut adalah operasi pembagian antara matrik dengan skalar.
Namun jika Y berupa sebuah matrik maka operasi pembagian kanan adalah ekuivalen
dengan penyelesaian sistem persamaan linier . Pada sistem persamaan tersebut
matrik Y dan Z adalah matrik-matrik yang menyatakan koefisien dari sistem persamaan
linier kemudian M adalah matrik yang menyatakan variabel-variabel yang tak diketahui.
[ ]* + [ ]
-->B = [1 1; 0 1];
-->A = [4 5];
Selanjutnya, nilai dari variabel yang takdiketahui Y dapat dihitung dengan cara sebagai
berikut:
-->Y = A/B
Y =
4. 1.
Untuk memeriksa hasil dari perhitungan yang telah kita lakukan, kita dapat menjalankan
perintah sebagai berikut:
-->Y*B
ans =
4. 5.
Operasi Matematika terhadap Matrik dan Vektor - 85
[ ][ ] [ ]
Penyelesaian. Misalkan sistem persamaan linier ini dapat dinyatakan dalam persamaan
sebagai berikut
TY=Z
Dimana T adalah matrik yang menyatakan variabel-variabel yang tak diketahui, Y dan Z
masing-masing adalah koefisien persamaan linier pada bagian kiri dan kanan.
Nilai dari matrik T dapat kita hitung dengan statemen-statemen sebagai berikut:
-->Y = [-1 1 0; -1 -1 1; 1 1 1]
Y =
- 1. 1. 0.
- 1. - 1. 1.
1. 1. 1.
-->Z = [0 0 2; 4 2 3; 1 1 1]
Z =
0. 0. 2.
4. 2. 3.
1. 1. 1.
-->T = Z/Y
T =
0. 1. 1.
- 1. 0. 3.
0. 0. 1.
-->A = [1 2; 3 4]
A =
1. 2.
3. 4.
-->B = [2 3; 9 7]
B =
2. 3.
9. 7.
-->A ./ B
ans =
0.5 0.6666667
0.3333333 0.5714286
-->B .\ A
ans =
0.5 0.6666667
0.3333333 0.5714286
-->x = [1 2 3 4 5];
-->y = 1.0./x
y =
-->y = x.\1
y =
-->O = ones(3,3);
-->G = [1 2 3; 2 3 4; 3 4 5]
G =
1. 2. 3.
2. 3. 4.
3. 4. 5.
Operasi Matematika terhadap Matrik dan Vektor - 87
-->H = O./G
H =
1. 0.5 0.3333333
0.5 0.3333333 0.25
0.3333333 0.25 0.2
1. 0.5 0.3333333
0.5 0.3333333 0.25
0.3333333 0.25 0.2
Contoh 10. (Diferensiasi Numerik). Tentukan nilai turunan dari fungsi f(x) = sin(x) pada
x = /4 secara numerik dengan mengggunakan metode central difference?
Penyelesaian. Aproksimasi nilai turunan pertama dari suatu fungsi f(x) dengan
pendekatan central difference dapat diselesaikan dengan menggunakan formula sebagai
berikut:
( ) ( )
( )
Berikut ini perhitungan f '(/4) dengan metode central difference untuk berbagai nilai h.
-->h = logspace(-1,-9,5)
h =
Pemangkatan
Seperti pada operasi perkalian dan pembagian, dalam operasi pemangkatan juga terdapat
dua macam operasi pemangkatan sebagai berikut:
Operasi pemangkatan yang mengikuti aturan aljabar linier
Operasi pemangkatan secara elemen per elemen
Operasi Matematika terhadap Matrik dan Vektor - 88
-->P = [1 1 1; 1 2 3; 1 3 6]
P =
1. 1. 1.
1. 2. 3.
1. 3. 6.
Apabila suatu operasi pemangkatan matrik dilakukan terhadap sebuah matrik yang bukan
matrik bujur sangkar maka akan muncul sebuah pesan kesalahan, seperti pada contoh di
bawah ini.
-->R = [1 2 3; 9 0 5]
R =
1. 2. 3.
9. 0. 5.
-->R^2
!--error 20
Wrong type for first argument: Square matrix expected.
Contoh 11. Pada tahun 2000, persentase alokasi penggunaan lahan pada sebuah kota yaitu
25% untuk komersial, 20% untuk industrial dan 55% untuk residensial. Tentukan
persentase alokasi penggunaan lahan pada tahun 2005, 2010 dan 2015? Anggap
probabilitas perubahan alokasi lahan pada inteval 5 tahun adalah seperti pada tabel di
bawah ini.
Operasi Matematika terhadap Matrik dan Vektor - 89
0.7 0.1 0.
0.2 0.9 0.2
0.1 0. 0.8
Jika variabel y2005, y2010 dan y2015 masing-masing menyatakan persentase alokasi
penggunaan lahan pada tahun 2005, 2010 dan 2015. Nilai dari ketiga variabel tersebut
masing-masing dapat dihitung dengan persamaan sebagai berikut:
Selanjutnya persentasi alokasi penggunaan lahan pada tahun 2005, 2010 dan 2015 dapat
dihitung dengan statemen-statemen sebagai berikut:
-->y2005 = A*y2000
y2005 =
19.5
34.
46.5
-->y2010 = A^2*y2000
y2010 =
17.05
43.8
39.15
Operasi Matematika terhadap Matrik dan Vektor - 90
-->y2015 = A^3*y2000
y2015 =
16.315
50.66
33.025
Jadi diperoleh bahwa persentasi alokasi penggunaan lahan untuk tahun 2000, 2005, 2010
dan 2015 adalah seperti pada tabel di bawah ini.
-->Z = [1 2; 3 4]
Z =
1. 2.
3. 4.
1. 4.
9. 16.
-->n = 1:4
n =
1. 2. 3. 4.
-->10^n
ans =
-->x = [1 2; 4 8]
x =
1. 2.
4. 8.
2. 0.5
0.5 2.
-->x.^y
ans =
1. 1.4142136
2. 64.
Contoh 12. (Aproksimasi nilai e). Berikut ini adalah definisi dari konstanta matematika e.
( )
Tentukan aproksimasi nilai e untuk nilai n sama dengan 1, 102, 104, 106 dan 108?
Operasi Matematika terhadap Matrik dan Vektor - 92
-->n = logspace(0,8,5)
n =
2.7182818
Terlihat bahwa nilai n = 108 telah menghasilkan nilai aprokasimasi e yang cukup akurat
sampai 8 desimal.
Contoh 13. (Peluruhan radioaktif). Sebuah bahan radioaktif mempunyai waktu paruh
150 hari. Apabila hari ini massa radioaktif tersebut adalah 10 gram, berapakah jumlah
massa radioaktif yang tertinggal pada awal minggu untuk lima minggu awal dan lima
minggu terakhir untuk satu tahun mendatang?
Penyelesaian. Peluruhan suatu bahan radioaktif dapat dihitung dengan rumus sebagai
berikut:
( )
dimana m adalah massa radioaktif yang tertinggal, mo adalah massa awal bahan radioaktif,
t adalah waktu peluruhan, dan h adalah waktu paruh.
Berdasarkan formula tersebut maka jumlah massa bahan radioaktif yang tersisa pada
setiap akhir minggunya dapat kita hitung dengan perintah-perintah sebagai berikut:
-->waktu = 1:7:364;
Operasi Matematika terhadap Matrik dan Vektor - 93
-->massa_tersisa = massa_awal*(1/2)^(waktu/waktu_paruh);
Massa radioaktif yang tersisa selama periode lima minggu pertama dan lima minggu
terakhir adalah sebagai berikut:
-->massa_tersisa(1:5)
ans =
-->massa_tersisa($-4:$)
ans =
Hampir sebagian besar fungsi-fungsi matematika yang telah terpasang di dalam Scilab
dapat menerima argumen yang berupa suatu vektor atau matrik, seperti yang
diperlihatkan pada contoh-contoh di bawah ini.
-->x = 0:%pi/4:%pi
x =
-->y = cos(x)
y =
-->p = logspace(0,4,5)
p =
-->q = log10(p)
q =
0. 1. 2. 3. 4.
Operasi Matematika terhadap Matrik dan Vektor - 94
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
-->B = exp(A)
B =
Dari contoh-contoh perhitungan di atas, terlihat bahwa jika argumen input dari suatu
fungsi berupa suatu vektor atau matrik maka output yang dihasilkan oleh fungsi tersebut
juga merupakan suatu vektor atau matrik dengan ukuran yang sama.
( ) , ,
-->mu = 2;
-->x = 0:5;
-->fpoisson = mu^x./factorial(x).*exp(-mu)
fpoisson =
Nilai maksimum atau minimum dari elemen-elemen yang terdapat pada suatu matrik atau
vektor dapat kita cari dengan menggunakan fungsi max dan min. Notasi dan deskripsi untuk
kedua fungsi tersebut dapat dilihat pada tabel di bawah ini.
Operasi Matematika terhadap Matrik dan Vektor - 95
Fungsi Deskripsi
max(x,"r") Nilai maksimum dari elemen-elemen pada semua baris untuk setiap
vektor kolom yang menyusun matrik
max(x,"c") Nilai maksimum dari elemen-elemen pada semua kolom untuk setiap
vektor baris yang menyusun matrik
min(x,"r") Nilai minimum dari elemen-elemen pada semua baris untuk setiap
vektor kolom yang menyusun matrik
min(x,"c") Nilai minimum dari elemen-elemen pada pada semua kolom untuk
setiap vektor baris yang menyusun matrik
Penggunaan dari fungsi max dan min dapat dilihat pada contoh-contoh di bawah ini:
-->min(volume)
ans =
0.94
-->M3 = [8 1 6; 3 5 7; 4 9 2]
M3 =
8. 1. 6.
3. 5. 7.
4. 9. 2.
-->max(M3)
ans =
9.
-->max(M3,'r')
ans =
8. 9. 7.
Operasi Matematika terhadap Matrik dan Vektor - 96
Fungsi sum dan prod dapat kita gunakan untuk melakukan operasi penjumlahan dan
perkalian terhadap elemen-elemen suatu vektor atau matrik. Notasi dan deskripsi untuk
kedua fungsi tersebut dapat dilihat pada Tabel 5.2.
Fungsi Deskripsi
sum(x,"r") Jumlah dari elemen-elemen pada semua baris untuk setiap vektor
kolom yang menyusun matrik
sum(x,"c") Jumlah dari elemen-elemen pada semua kolom untuk setiap vektor
baris yang menyusun matrik
-->volume
volume =
-->sum(volume)
ans =
7.12
Operasi Matematika terhadap Matrik dan Vektor - 97
-->M3
M3 =
8. 1. 6.
3. 5. 7.
4. 9. 2.
-->sum(M3,'r')
ans =
-->i = 1:5;
-->prod(i)
ans =
120.
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->prod(X,'r')
ans =
Scilab juga menyediakan fungsi untuk melakukan operasi penjumlahan dan perkalian
secara kumulatif pada suatu matrik atau vektor. Fungsi-fungsi tersebut dan deskripsinya
diberikan pada Tabel 5.3.
-->i = 1:5;
-->cumsum(i)
ans =
1. 3. 6. 10. 15.
Operasi Matematika terhadap Matrik dan Vektor - 98
Fungsi Deskripsi
cumsum(x,"r") Jumlah kumulatif dari elemen-elemen pada semua baris untuk setiap
vektor kolom yang menyusun matrik
-->mat = [8 1 6; 3 5 7; 4 9 2]
mat =
8. 1. 6.
3. 5. 7.
4. 9. 2.
-->cumsum(mat)
ans =
8. 16. 36.
11. 21. 43.
15. 30. 45.
-->i = 1:5;
-->cumprod(i)
ans =
1. 2. 6. 24. 120.
Operasi Matematika terhadap Matrik dan Vektor - 99
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
-->cumprod(A)
ans =
1. 8. 120.
4. 40. 720.
Contoh 15. Dengan menggunakan metode integrasi trapezoidal tentukan nilai integral dari
fungsi f(x) = 0.2 + 25x – 200x2 + 675x3 – 900x4 + 400x5 pada selang [0, 0.8]?
Penyelesaian. Misalkan a dan b adalah batas bawah dan batas atas integral, maka nilai
integral dari fungsi f(x) pada selang tersebut dengan menggunakan metode integrasi
trapezoidal dapat dihitung dengan formula sebagai berikut:
( )
[ ( ) ∑ ( ) ( )]
-->function y = fx(x)
--> y = 0.2 + 25*x - 200*x^2 + 675*x^3 - 900*x^4 + 400*x^5
-->endfunction
-->n1 = n+1;
-->x = linspace(a,b,n1);
-->yxi = fx(x);
1.6405308
Contoh 16. (Aproksimasi konstanta e). Representasi nilai dari konstanta e dalam dalam
bentuk deret takhingga adalah sebagai berikut:
-->k = 0:10;
-->fk = factorial(k);
-->i = 1.0./fk;
->e = cumsum(i)
e =
column 1 to 7
column 8 to 11
2.7182818
Terlihat bahwa aproksimasi yang cukup akurat untuk nilai e dapat diperoleh dengan
menggunakan 10 suku awal dari deret di atas.
Bab 6
Aljabar Linier
Beberapa topik komputasi aljabar linier, seperti penjumlahan dan pengurangan matrik,
perkalian dan pembagian matrik dengan skalar, perkalian matrik dengan matrik, telah
dijelaskan pada bab sebelumnya. Pada bab ini akan diberikan penjelasan mengenai
penggunaan Scilab dalam beberapa topik komputasi aljabar linier lainnya seperti
transpose, norma vektor dan matrik, determinan, matrik inverse, sistem persamaan linier,
serta nilai eigen dan vektor eigen.
Transpose
Penerapan operasi transpose pada suatu vektor akan merubah suatu vektor baris menjadi
vektor kolom, atau sebaliknya. Operasi ini dilambangkan dengan tanda petik-tunggal (').
Berikut ini beberapa contoh operasi transpose pada suatu vektor.
-->A = [2 4 8 16]
A =
2. 4. 8. 16.
-->AT = A'
AT =
2.
4.
8.
16.
13.
15.
Aljabar Linier - 102
-->B2 = B1'
B2 =
13. 15.
Operasi transpose pada suatu matrik akan merubah elemen-elemen baris dari matrik
tersebut menjadi elemen-elemen kolom pada matrik yang baru.
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->B = A'
B =
1. 4. 7.
2. 5. 8.
3. 6. 9.
Jika operasi transpose diaplikasikan terhadap sebuah matrik atau vektor yang elemen-
elemennya ada yang berupa suatu bilangan kompleks maka yang akan dihasilkan adalah
sebuah matrik transpose konjugat, seperti yang diperlihatkan pada contoh di bawah ini.
1. 3. - 4.i
5.i 2. + 8.i
-->Q = P'
Q =
1. - 5.i
3. + 4.i 2. - 8.i
Untuk mendapatkan matrik transpose non-konjugat harus digunakan operator titik dan
petik-tunggal (.'), seperti yang diperlihatkan pada contoh di bawah ini.
-->R = P.'
R =
1. 5.i
3. - 4.i 2. + 8.i
Aljabar Linier - 103
Norma Vektor
Norma vektor merupakan ukuran yang digunakan untuk menyatakan panjang dari suatu
vektor. Terdapat tiga definisi untuk norma vektor yaitu:
1/ 2
n
Norma Euclidian atau (Norma L2): x
x x x
2
1
2
2 n
2 1/ 2
xi2
i 1
2
1/ p
n
Norma-p: x xip
i 1
p
-->x = [2 0 -1];
-->norm(x,1)
ans =
3.
-->norm(x)
ans =
2.236068
-->norm(x,'inf')
ans =
2.
Contoh 1. Tentukan resultan gaya dari sistem gaya yang ditunjukkan pada gambar 6.1?
Aljabar Linier - 104
Gambar 6.1
Penyelesaian. Anggap b dan c masing-masing adalah vektor arah dimana arah gaya FB dan
FC bekerja. Maka komponen vektor b dan c adalah sebagai berikut:
-->b = [3 -2 -6];
-->c = [2 3 -6];
-->FB = 840*b/norm(b)
FB =
-->FC = 420*c/norm(c)
FC =
1183.385
Norma Matrik
A F ai , j
2 2
Norma matrik Frobenius:
i, j
Norma-matrik 2: A 2 max Ax 2
x s 1
Norma-matrik ∞: A max
i
a j
ij
Definisi norma matrik di atas masing-masing dapat dihitung dengan sintak sebagai berikut:
norm(x, "fro") untuk menghitung norma matrik Frobenius.
norm(x, 2), atau norm(x) untuk menghitung norma-matrik 2.
norm(x, 1) untuk menghitung norma-matrix 1.
norm(x, "inf") atau norm(x, %inf) untuk menghitung norma-matrik ∞.
1.7320508 - 0.5773503
0. 1.6329932
-->norm(A)
ans =
2.
-->norm(A,'fro')
ans =
2.4494897
Rank Matrik
Rank adalah jumlah kolom bebas linier yang terdapat pada suatu matrik. Rank matrik A
dapat dihitung dengan fungsi rank(A).
Aljabar Linier - 106
-->L = [7 0; 0 5]
L =
7. 0.
0. 5.
-->rank(L)
ans =
2.
16. 2. 3. 13.
5. 11. 10. 8.
9. 7. 6. 12.
4. 14. 15. 1.
-->r = rank(K)
r =
3.
Determinan
Nilai determinan dari suatu matrik bujur sangkar A dapat dihitung fungsi det(A). Nilai
determinan dapat dipakai untuk menentukan sifat singularitas matrik. Jika det(A) ≠ 0 maka
matrik A bersifat taksingular dan mempunyai inverse, namun jika det(A)=0 maka A adalah
matrik singular dan tidak mempunyai matrik inverse.
-->X = [2 6 4; 1 3 0; -1 0 2]
X =
2. 6. 4.
1. 3. 0.
- 1. 0. 2.
-->det(X)
ans =
12.
Aljabar Linier - 107
3. 6. - 4.
1. - 1. 3.
6. 12. - 8.
-->det(Z)
ans =
0.
Contoh 2. Hitung volume sebuah parallepiped yang terbentuk dari kombinasi linier vektor
u1 = (1,1,0), u2 = (1,1,1) dan u3 = (0,2,3), seperti pada gambar di bawah ini?
Gambar 6.2
-->volumeSolid = abs(det(solid))
volumeSolid =
2.
Matrik Inverse
Notasi matematika untuk matrik inverse dari suatu matrik bujur sangkar A yaitu A-1.
Matrik inverse dari matrik A adalah suatu matrik yang memenuhi persamaan AA-1 = I atau
A-1A = I. Matrik inverse dari suatu matrik A dapat dihitung dengan fungsi inv(A).
-->X
X =
2. 6. 4.
1. 3. 0.
- 1. 0. 2.
-->Y = inv(X)
Y =
0.5 - 1. - 1.
- 0.1666667 0.6666667 0.3333333
0.25 - 0.5 0.
-->I = X*Y
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
Apabila fungsi inv dijalankan pada sebuah matrik singular maka akan muncul sebuah
pesan kesalahan, seperti pada contoh di bawah ini.
3. 6. - 4.
1. - 1. 3.
6. 12. - 8.
-->W = inv(Z)
!--error 19
Problem is singular
Aljabar Linier - 109
Contoh 3 (Regresi Linier). Berikut ini adalah sebuah hasil percobaan dari pembebanan
pada sebuah senar piano. Dengan menggunakan metode kuadrat terkecil, tentukan garis
regresi linier terdapat data-data pengamatan tersebut?
Penyelesaian. Garis regresi linier dari sekumpulan data dapat dinyatakan dalam
persamaan sebagai berikut
, , ,
dimana ( , ) adalah data-data pengamatan, serta n adalah jumlah pengamatan.
Y [ ], [ ], * +
Dengan metode kuadrat terkecil, parameter a dan b dapat dihitung sebagai berikut:
( )
Parameter garis regresi linier dapat dihitung dengan statemen-statemen sebagai berikut:
-->X = [1 0; 1 2; 1 4; 1 6; 1 8; 1 10];
-->par = inv(X'*X)*X'*Y
par =
439.01095
0.0491429
Jadi garis regresi linier terhadap sekumpulan data di atas adalah sebagai berikut:
Aljabar Linier - 110
Suatu sistem persamaan linier yang terdiri dari m persamaan serta n variabel takdiketahui
dapat dinyatakan dengan notasi matematika sebagai berikut:
dimana aij adalah koefisien dari variabel yang takdiketahui, xj adalah nama variabel-
variabel yang takdiketahui dan bi adalah koefisien pada sisi kanan persamaan.
Sistem persamaan linier di atas dapat dinyatakan dalam notasi matrik sebagai berikut:
Ax b
Di dalam Scilab, suatu sistem persamaan linier dapat diselesaikan dengan tiga macam cara
sebagai berikut:
operasi pembagian kiri,
metode eliminasi Gauss-Jordan,
metode matrik inverse.
Pembagian Kiri
Sistem persamaan linear Ax = b dapat diselesaikan secara mudah dengan menggunakan
operator backslash (\) dengan sintaks sebagai berikut
x = A\b
Aljabar Linier - 111
Perhitungan yang dilakukan pada operasi pembagian kiri adalah sebagai berikut:
Apabila matrik A berupa matrik bujur sangkar dan nonsingular maka statemen x = A\b
dapat dianggap ekuivalen dengan statemen x = inv(A)*b. Akan tetapi pada operasi
pembagian kiri, penyelesaiannya tidak dihitung dengan menggunakan matrik inverse.
Apabila matrik A adalah bukan suatu matrik bujur sangkar maka persamaan Ax = b
diselesaikan dengan metode kuadrat terkecil dengan mencari nilai x yang menghasilkan
nilai minimum terhadap norm(A*x – b). Untuk kasus ini, penyelesaian dengan cara ini
dapat menghasilkan penyelesaian yang unik apabila nilai rank dari matrik A sama
dengan jumlah kolomnya. Namun apabila nilai rank matrik A lebih kecil dari jumlah
kolomnya maka penyelesaian yang diperoleh tidak bersifat unik.
Penyelesaian. Matrik koefisien dan vektor kolom untuk koefisien pada sisi kanan dari
sistem persamaan linier dapat dinyatakan dengan statemen-statemen berikut:
-->A = [2 1 1; 6 2 1; -2 2 1];
-->sol = A\b
sol =
- 1.
2.
1.
1.
- 1.
7.
Contoh 5. Hitung arus yang mengalir pada setiap tahanan yang terdapat dalam rangkaian
listrik seperti yang terlihat pada Gambar 6.3 ?
Gambar 6.3
Penyelesaian. Untuk menghitung arus yang mengalir pada setiap tahanan, harus
diasumsikan terlebih dahulu arah arusnya, seperti pada Gambar 6.4, kemudian
menggunakan hukum Kirchoff untuk menurunkan sistem persamaan linier yang mengatur
rangkaian listrik tersebut.
Gambar 6.4
Hukum Kirchoff tentang arus menyatakan bahwa jumlah arus yang masuk pada suatu titik
percabangan adalah sama dengan jumlah arus yang keluar dari titik percabangan tersebut.
Berikut ini beberapa persamaan yang diperoleh dengan menerapkan hukum ini pada
setiap titip percabangan.
io i1 i2
i1 i3 i5
i 2 i5 i 4
i3 i 4 i o
Hukum Kirchoff tentang tegangan menyatakan bahwa jumlah total tegangan yang terdapat
pada suatu rangkaian listrik yang tertutup adalah sama dengan nol. Dengan menerapkan
hukum ini dapat dihasilkan persamaan-persamaan sebagai berikut:
Aljabar Linier - 113
5i1 10i3 10
2i2 4i4 10
5i1 2i2 50i5 0
Dengan menggabungkan kedua sistem persamaan linier di atas, maka dihasilkan sebuah
sistem persamaan linier untuk rangkaian listrik tersebut yaitu sebagai berikut:
io i1 i2 0
i1 i3 i5 0
i 2 i 4 i5 0
i o i3 i 4 0
5i1 10i3 10
2i2 4i4 10
5i1 2i2 50i5 0
Misalkan A adalah matrik koefisien dari sistem persamaan linier dan B adalah vektor untuk
koefisien pada sisi kanan dari sistem persamaan di atas.
-->A = [ 1 -1 -1 0 0 0
--> 0 1 0 -1 0 -1
--> 0 0 1 0 -1 1
--> -1 0 0 1 1 0
--> 0 5 0 10 0 0
--> 0 0 2 0 4 0
--> 0 5 -2 0 0 50];
Arus yang mengalir pada setiap tahanan dapat kita hitung dengan cara sebagai berikut:
-->i = A\B
i =
2.3333333
0.6666667
1.6666667
0.6666667
1.6666667
1.669D-16
Diperoleh arus yang mengalir pada setiap tahanan adalah sebagai berikut
i0 = 2.333, i1 = 0.667, i2 = 1.667, i3 = 0.667, i4 = 1.667 dan i5 = 0.
Aljabar Linier - 114
Contoh 6. Sama seperti pada Contoh 3, tentukan parameter dari garis regresi linier dengan
menggunakan operator pembagian kiri?
-->X
X =
1. 0.
1. 2.
1. 4.
1. 6.
1. 8.
1. 10.
-->Y
Y =
439.
439.12
439.21
439.31
439.4
439.5
-->par = X\Y
par =
439.01095
0.0491429
Terlihat bahwa hasil perhitungannya adalah sama seperti hasil perhitungan pada contoh 3.
E = rref([A b])
dimana A adalah matrik koefisien, b adalah vektor kolom yang merepresentasikan bagian
sisi kanan sistem persamaan linier. Matrik E adalah sebuah matrik yang menyatakan hasil
proses eliminasi Gauss-Jordan.
Aljabar Linier - 115
Contoh 7. Selesaikan sistem persamaan linier yang terdapat pada Contoh 4 dengan
menggunakan metode eliminasi Gauss-Jordan.
2x y z 1
6 x 2 y z 1
2x 2 y z 7
Penyelesaian. Anggap MOrig adalah matrik yang mewakili sistem persamaan linier
tersebut. Matrik Morig dapat dibuat dengan statemen-statemen sebagai berikut.
-->A = [2 1 1; 6 2 1; -2 2 1];
-->MOrig = [A b]
MOrig =
2. 1. 1. 1.
6. 2. 1. - 1.
- 2. 2. 1. 7.
Operasi eliminasi Gauss-Jordan terhadap matrik MOrig dapat dilakukan dengan statemen
sebagai berikut:
-->MGJ = rref(MOrig)
MGJ =
1. 0. 0. - 1.
0. 1. 0. 2.
0. 0. 1. 1.
Mengacu pada hasil perhitungan ini, sistem persamaan linier sebelum dan setelah
dilakukan proses eliminasi Gauss Jordan dapat dinyatakan sebagai berikut:
2x y z 1 x 1
6 x 2 y z 1 y 2
2x 2 y z 7 z 1
Sehingga jawaban yang diperoleh yaitu x = -1, y = 2, z = 1.
Aljabar Linier - 116
-->A2 = [2 4 6; 1 2 3; 1 0 1; 2 4 0];
1. 0. 0. - 2.
0. 1. 0. 3.
0. 0. 1. - 1.
0. 0. 0. 0.
Sistem persamaan linier sebelum dan sesudah dilakukan proses eliminasi dapat
dinyatakan sebagai berikut.
2 x1 4 x 2 6 x3 2 x1 2
x1 2 x 2 3 x3 1 x2 3
x1 x3 3 x3 1
2 x1 4 x 2 8 0 0
Terlihat bahwa persamaan terakhir yang terdapat pada matrik Sol2 dapat diabaikan
karena menjadi persamaannya berubah menjadi 0 = 0. Penyelesaian yang kita peroleh
yaitu x1 = -2, x2 = 3, dan x3 = -1.
Contoh 9. Selesaikan sistem persamaan linier yang terdapat pada Contoh 4 dengan
menggunakan metode matrik inverse.
2x y z 1
6 x 2 y z 1
2x 2 y z 7
Penyelesaian. Sama seperti pada contoh 3, berikut ini adalah matrik koefisien (A) dan
vektor kolom untuk koefisien pada sisi kanan (b) dari persamaan linier.
-->A
A =
2. 1. 1.
6. 2. 1.
- 2. 2. 1.
-->b
b =
1.
- 1.
7.
-->sol = inv(A)*b
sol =
- 1.
2.
1.
Terlihat bahwa hasil penyelesaian yang diperoleh adalah sama dengan penyelesaian yang
diperoleh dengan operasi pembagian kiri maupun penyelesaian dengan metode Eliminasi
Gauss Jordan.
Nilai eigen dari suatu matrik A yang berukuran n x n adalah suatu bilangan (real atau
kompleks) sehingga persamaan sebagai berikut:
vektor eigen untuk nilai eigen . Nilai eigen dan vektor eigen dapat dihitung dengan fungsi
spec yang mempunyai sintaks sebagai berikut
lambda = spec(A)
[v, lambda] = spec(A)
dimana lambda adalah nilai-nilai eigen dari matrik A dan v adalah suatu matrik dimana
vektor-vektor kolom yang merupakan vektor eigen untuk setiap nilai lambda.
Contoh 10. Tentukan nilai eigen dan vektor eigen dari matrik sebagai berikut
[ ]
Penyelesaian. Nilai eigen dan vektor eigen dari matrik di atas dapat dihitung dengan
statemen-statemen sebagai berikut.
-->Z = [7.3 0.2 -3.7; -11.5 1.0 5.5; 17.7 1.8 -9.3]
Z =
-->[x,l] = spec(Z)
l =
- 4. 0 0
0 0 0
0 0 3.
x =
Dari output di atas diperoleh nilai eigennya adalah 1 = -4, 2 = 0, 3 = 3. Kemudian vektor
eigen untuk setiap nilai eihen tersebut masing-masing dalah sebagai berikut :
[ ], [ ], [ ]
Aljabar Linier - 119
Contoh 11. Jika pada sebuah titik bekerja sistem tegangan tiga dimensi sebagai berikut:
[ ] MN/m2
Tegangan-tegangan utama yang bekerja pada sebuah sistem tegangan nilainya adalah sama
dengan nilai-nilai eigen dari matrik tegangannya. Oleh karena itu, tegangan-tegangan
utama dapat dihitung dengan menggunakan statemen sebagai berikut:
-->sigmaPrincipal = spec(sigma)
sigmaPrincipal =
12.679492
47.320508
90.
Diperoleh nilai tegangan-tegangan utama adalah 90 MN/m2, 47.3 MN/m2 dan 12.7 MN/m2.
Bab 7
Polinomial dan Rasional
Polinomial adalah suatu fungsi matematika yang mempunyai bentuk sebagai berikut
( )
dimana a0, a1, … an adalah koefisien–koefisien polinomial dan n adalah derajat polinomial.
Rasional adalah suatu fungsi matematika yang mempunyai bentuk sebagai berikut:
( )
Suatu fungsi polinomial dapat dibuat dengan tiga macam cara. Cara pertama yaitu dengan
menggunakan variabel khusus %s seperti pada contoh berikut ini.
2
2 - 3s + s
Cara kedua untuk membuat suatu polinomial adalah dengan fungsi poly sebagai berikut:
P = poly(vec, x, fl)
dimana vec adalah suatu vektor yang menyatakan akar-akar atau koefisien polinomial, x
adalah simbol variabel polinomial, dan fl adalah string yang menunjukkan tipe data pada
vektor vec. Argumen fl bersifat opsional dimana nilainya yaitu "roots" (default) atau
"coef". Apabila argumen fl bernilai "roots" maka elemen-elemen dari vektor vec adalah
akar-akar dari polinomial, dimana untuk akar majemuk harus ditulis sebanyak jumlah
akarnya. Namun jika fl bernilai "coef" maka elemen-elemen vektor vec adalah koefisien
Polinomial dan Rasional - 121
polinomial dimananya koefisiennya dimulai dari suku terkecil sampai suku terbesar.
Sebagai contoh, fungsi polinomial Rx 6 x 5x dapat dibuat cara sebagai berikut:
2 3
2 3
6 - x + 5x
Kemudian fungsi polinomial As s 1s 2 dapat dibuat dengan cara sebagai berikut:
2
2 - 3s + s
Cara ketiga dalam pembuatan suatu polinomial yaitu dengan mendefinisikan variabel
polinomial secara simbolik. Misalkan x adalah variabel polinomial maka variabel tersebut
dapat dibuat dengan sintak sebagai berikut:
x = poly(0, 'x')
Sebagai contoh, polinomial Bx x 14 x 49 dapat dibuat dengan cara sebagai berikut.
2
-->x = poly(0,'x');
2
49 - 14x + x
Derajat Polinomial
Derajat suatu fungsi polinomial dapat diketahui dengan fungsi degree, seperti yang
ditunjukkan pada contoh di bawah ini.
2 3 4 5 6
48 - 184x + 275x - 202x + 76x - 14x + x
Polinomial dan Rasional - 122
-->degree(C)
ans =
6.
Koefisien Polinomial
Koefisien-koefisien suatu fungsi polinomial dapat diekstrak dengan fungsi coeff. Sintak
dari fungsi coeff adalah sebagai berikut:
C = coeff(P, v)
dimana P adalah suatu polinomial dan v adalah argumen opsional untuk menyatakan
derajat dari koefisien polinomial yang akan diekstrak dan jika tidak dipergunakan maka
semua koefisien polinomial akan diekstrak.
-->C
C =
2 3 4 5 6
48 - 184x + 275x - 202x + 76x - 14x + x
-->v = coeff(C)
v =
-->coeff(C,[0 1 3])
ans =
Suatu fungsi rasional dapat dibuat dengan melakukan operasi pembagian terhadap dua
fungsi polinomial, seperti yang diilustrasikan pada contoh-contoh di bawah ini.
2
3 + 2x + x
Polinomial dan Rasional - 123
2 3
6 + 7x + 8x + 9x
-->R = P/Q
R =
2
3 + 2x + x
----------------
2 3
6 + 7x + 8x + 9x
2
- 4 + 3x + x
4 + x
-->c = a/b
c =
- 1 + x
-----
1
Suatu fungsi rasional juga dapat dibuat secara langsung dengan menggunakan variabel
khusus %s atau dengan menggunakan variabel simbolik seperti pada contoh-contoh di
bawah ini.
2
3 + 2s + s
----------------
2 3
6 + 7s + 8s + 9s
-->x = poly(0,'x');
Polinomial dan Rasional - 124
-->s = (x - 3)^2/(x - 2)
s =
2
9 - 6x + x
----------
- 2 + x
Evaluasi terhadap sebuah fungsi polinomial atau fungsi rasional pada suatu nilai tertentu,
dapat dilakukan dengan fungsi horner yang mempunyai sintaks sebagai berikut:
y = horner(Q, x)
dimana Q adalah suatu fungsi polinomial atau rasional dan x adalah nilai-nilai yang akan
dievaluasi.
-->s = poly(0,'s');
2 3
6 - s + 5s
-->horner(P, 4)
ans =
310.
2 3
6 - s + 5s
------------
2 4
1 - 10s + 4s
-->horner(R,[0 10])
ans =
6. 0.1257916
Polinomial dan Rasional - 125
2
3 + 2x + x
2 3
6 + 7x + 8x + 9x
-->P + Q
ans =
2 3
9 + 9x + 9x + 9x
-->Q - P
ans =
2 3
3 + 5x + 7x + 9x
-->x = poly(0,'x');
-->f1 = 2/x;
-->f1 - f2
ans =
2
4 + 2x - x
----------
2
2x + x
-->R = r1 + r2
Polinomial dan Rasional - 126
R =
2
2 + 3x + 5x
-------------
2 3 4
x + x + x + x
-->Y = Q + R
Y =
2 3 4 5 6 7
2 + 9x + 18x + 21x + 30x + 24x + 17x + 9x
-----------------------------------------
2 3 4
x + x + x + x
Perkalian
Operasi perkalian terhadap suatu fungsi polinomial atau rasional dapat dilakukan dengan
menggunakan operator bintang (*), seperti pada contoh-contoh di bawah ini.
-->y = poly(0,'y');
-->e = y – 3;
-->f = y + 4;
-->g = e*f
g =
2
- 12 + y + y
-->x = poly(0,'x');
-->r = (x + 1)/(3 - x)
r =
1 + x
-----
3 - x
-->s = (x - 3)^2/(x - 2)
s =
2
9 - 6x + x
----------
- 2 + x
Polinomial dan Rasional - 127
-->t = r*s
t =
2
3 + 2x - x
----------
- 2 + x
2
4 - 4x + x
-->w = t*v
w =
2 3
- 6 - x + 4x - x
--------------
1
Fungsi pembilang (numerator) dan fungsi pembagi (denumerator) yang terdapat pada
suatu fungsi rasional dapat diekstrak dengan menggunakan fungsi numer dan denom, seperti
yang ditunjukkan pada contoh berikut ini.
-->x = poly(0,'x');
2 3
6 - x + 5x
----------
- 4 + x
-->numer(p)
ans =
2 3
6 - x + 5x
-->denom(p)
ans =
- 4 + x
Polinomial dan Rasional - 128
Sebuah operasi pembagian fungsi polinomial N(x) dengan D(x) dapat dinyatakan dalam
persamaan matematika sebagai berikut:
N x R x
P x
D x D x
Pada persamaan ini, P(x) adalah hasil bagi dan R(x) adalah sisa pembagian. Operasi ini
dapat diselesaikan dengan menggunakan fungsi pdiv dengan sintaks sebagai berikut:
[R,P] = pdiv(N,D)
Sebagai contoh, hasil dan sisa dari operasi pembagian polinomial (5x3 – x2 + 6) dengan
polinomial (x – 4) dapat dihitung dengan statemen-statemen sebagai berikut.
2 3
6 - x + 5x
- 4 + x
-->[r,q] = pdiv(p1,p2)
q =
2
76 + 19x + 5x
r =
310.
Akar-Akar Polinomial
Akar-akar dari suatu fungsi polinomial P(x) adalah semua nilai r yang menghasilkan nilai
P(r) = 0. Akar-akar polinomial P(x) dapat dihitung dengan menggunakan fungsi roots(P).
Polinomial dan Rasional - 129
Output dari fungsi roots adalah suatu vektor kolom yang elemen-elemennya adalah akar-
akar dari polinomial P(x) dimana jika terdapat akar-akar majemuk maka akan terdapat
beberapa elemen vektor yang mempunyai nilai sama.
2
- 1 - x + x
-->roots(p)
ans =
- 0.6180340
1.618034
2 3
- 6 + 6x - 2x + 2x
-->q = roots(Q)
q =
1.
1.7320508i
- 1.7320508i
2 3 4
- 18 + 21s + s - 5s + s
-->roots(Z)
ans =
1.
- 2.
3.
3.
Contoh 1. Sebuah peluru ditembakkan dari sebuah meriam pada ketinggian 100 m dengan
kecepatan awal pada sumbu horisontal dan vertikal masing-masing adalah 40 m/det dan
20 m/det. Tentukan jangkauan dari peluru tersebut?
Polinomial dan Rasional - 130
Gambar 7.1
Setelah t detik ditembakkan, posisi peluru pada sumbu horisontal (x) dan sumbu vertikal
(y) dapat dihitung dengan rumus-rumus sebagai berikut:
Dimana x0 dan y0 adalah posisi awal peluru pada sumbu horisontal dan sumbu vertikal, v0x
dan v0y adalah kecepatan awal pada sumbu horisontal dan sumbu vertikal serta g adalah
percepatan gravitasi.
Posisi peluru setelah t detik dapat dinyatakan dalam fungsi polinomial sebagai berikut:
-->t = poly(0,'t');
-->x = x0 + v0x*t
x =
40t
Polinomial dan Rasional - 131
2
100 + 20t - 4.905t
Jangkauan peluru dapat diperoleh dengan mencari akar positif dari polinomial y dan
kemudian mensubstitusikan nilainya ke dalam polinomial x.
-->tr = roots(y)
tr =
- 2.9154344
6.9929064
279.71625
Faktorisasi
Suatu fungsi polinomial dapat dinyatakan dalam bentuk yang difaktorisasi sebagai berikut
Px k x a x b x f
dimana a, b, . . . f adalah akar-akar fungsi polinomial serta k adalah suatu konstanta. Bentuk
faktorisasi dari fungsi suatu polinomial P dapat diperoleh dengan fungsi polfact yang
mempunyai sintaks sebagai berikut.
f = polfact(P)
dimana f adalah vektor polinomial yang elemen-elemennya terdiri atas [fo f1 ... fn],
dimana fo adalah suatu konstanta dan f1 sampai fn adalah faktor-faktor polinomial.
2 3
- 6 - 5s + 3s + 2s
Polinomial dan Rasional - 132
-->faktR = polfact(R)
faktR =
2 2 + s - 1.5 + s 1 + s
Turunan
Turunan dari suatu fungsi polinomial atau rasional dapat diperoleh dengan fungsi derivat
seperti yang ditunjukkan pada contoh-contoh di bawah ini.
-->x = poly(0,'x');
2 3
6 - x + 5x
-->dy = derivat(y)
dy =
2
- 2x + 15x
-->r = poly(0,'r');
3
12.566371 + 6.2831853r
----------------------
r
-->dA = derivat(A)
dA =
3
- 12.566371 + 12.566371r
----------------------
2
r
Contoh 2. Sama seperti Contoh 1, tentukan ketinggian maksimum dari lintasan peluru?
Penyelesaian. Dari Contoh 1 diperoleh bahwa posisi peluru pada sumbu vertikal setelah t
detik ditembakkan dapat dinyatakan dalam fungsi polinomial sebagai berikut:
Polinomial dan Rasional - 133
-->t = poly(0,'t');
2
100 + 20t - 4.905t
Kecepatan peluru pada sumbu vertikal dapat diperoleh dengan statemen sebagai berikut:
20 - 9.81t
-->t_ymaks = roots(vy)
t_ymaks =
2.038736
Pada saat peluru berada pada lintasan tertinggi maka kecepatannya pada sumbu vertikal
akan bernilai nol yang terjadi pada waktu t = 2.03 detik. Dengan mensubstitusikan nilai
tersebut ke dalam polinomial y maka dapat diperoleh posisi maksimum peluru pada sumbu
vertikal.
120.38736
Contoh 3. Sebuah kotak segi empat yang terbuka atasnya akan dibuat dari sebuah pelat
besi yang berukuran 20 cm × 12 cm dengan cara memotong bujur sangkar yang
mempunyai sisi x cm pada keempat ujungnya, seperti yang terlihat pada gambar di bawah
ini, kemudian melipat ke atas dan menyambung bagian-bagian yang dipotong tersebut.
Tentukan dimensi x sehingga dihasilkan volume kotak yang maksimum?
Polinomial dan Rasional - 134
Gambar 7.2
-->x = poly(0,'x');
-->p = 20 - 2*x;
-->l = 12 - 2*x;
-->V = p*l*x
V =
2 3
240x - 64x + 4x
-->dV = derivat(V)
dV =
2
240 - 128x + 12x
-->xopt = roots(dV)
xopt =
2.4274007
8.239266
-->Vmaks = horner(V,xopt(1))
Vmaks =
262.68226
Hanya nilai x = 2.43 yang memberikan penyelesaian yang masuk akal. Sehingga untuk
memperoleh kotak yang mempunyai volume maksimum maka pada pada keempat ujung
pelat harus dipotong bujur sangkar dengan sisi 2.43 cm. Nilai maksimum dari volume
kotak adalah 262.68 cm3.
Polinomial dan Rasional - 135
Matrik polinomial atau matrik rasional adalah matrik yang elemen-elemennya berupa
suatu fungsi polinomial atau suatu fungsi rasional. Operasi pembuatan dan manipulasi
pada kedua tipe matrik tersebut adalah serupa dengan operasi pada matrik numerik.
Berikut ini contoh pembuatan dan manipulasi suatu matrik polinomial dan rasional
-->s = poly(0,'s');
2
s s
1 1 + s
-->E(3,3) = 1 + s + s^2
E =
2
s s 0
1 1 + s 0
2
0 0 1 + s + s
1 1
----- -
2
1 + s s
1 1
----- -----
2 2
1 + s 1 - s
-->I = [1 0; 0 1];
-->K = %s*I - A
K =
- 2 + s 1
2 - 1 + s
-->K'
ans =
- 2 + s 2
1 - 1 + s
-->det(K)
ans =
2
- 3s + s
2 3 4
- 1 - 3s + s - 2s + s
-------------------
2 3 4 5
- 3s + s - 3s + s
2 3 4
- 2 - 5s - s - 3s + s
-------------------
2 3 4 5
- 3s + s - 3s + s
Dari contoh-contoh yang diberikan, terlihat bahwa berbagai operasi matematika maupun
operasi manipulasi terhadap suatu matrik polinomial atau matrik rasional dapat dilakukan
dengan mudah seperti pada operasi-operasi terhadap matrik numerik.
Polinomial dan Rasional - 137
[ ]
( ) ( )
| |
( )
| |
Akar-akar dari polinomial karakteristik PA() adalah nilai-nilai eigen dari matrik A.
2. 1. - 1.
3. 2. - 3.
3. 1. - 2.
-->x = poly(0,'x');
-->M = A - eye(3,3)*x
M =
2 - x 1 - 1
3 2 - x - 3
3 1 - 2 - x
-->PA = det(M)
PA =
2 3
- 2 + x + 2x - x
Polinomial dan Rasional - 138
Dari output di atas diperoleh polinomial karakterisik dari matrik di atas yaitu:
( )
-->nilai_eigen = roots(PA)
nilai_eigen =
1.
- 1.
2.
-->spec(A)
ans =
- 1.
2.
1.
Terlihat output yang dihasilkan oleh statemen roots(PA) adalah sama dengan output yang
dihasilkan oleh statemen spec(A).
Bab 8
String
Pembuatan String
Sebuah string dibuat dengan menggunakan tanda kutip-tunggal (') atau kutip-ganda (").
Obyek string dapat berupa suatu skalar atau matrik. Berikut ini contoh pembuatan string.
!Scilab R Maxima !
Penggabungan String
Beberapa string dapat digabung menjadi sebuah string baru dengan menggunakan
operator tambah (+), seperti yang terlihat pada contoh di bawah ini:
Panjang String
Fungsi length juga dapat kita gunakan untuk mengentahui panjang dari suatu string
seperti pada contoh berikut ini.
String - 140
-->length(SciNum)
ans =
31.
Sekumpulan karakter yang terdapat di dalam suatu string yang terletak pada posisi
tertentu dapat diekstrak dengan fungsi part yang mempunyai notasi sebagai berikut:
v = part(str, k)
dimana k adalah suatu vektor indek yang menyatakan letak karakter.
-->ss
ss =
-->part(ss, 1:9)
ans =
Komputasi
-->part(ss, [11:16,34:37])
ans =
TeknikData
Posisi dari suatu string pada string lainnya dapat diketahui dengan fungsi strindex. Sintak
dari fungsi strindex adalah sebagai berikut.
idk = strindex(str1, str2)
Output dari fungsi strindex adalah indek atau posisi pertama dari string str2 pada string
str1. Apabila string yang dicari tidak terdapat di dalam string rujukan, maka output yang
dihasilkan adalah berupa suatu matrik kosong [ ].
String - 141
-->strindex(SciNum, "Numerik")
ans =
11.
-->strindex(SciNum, "Matematika")
ans =
[]
Memecah String
Suatu string dapat dipecah menjadi beberapa string yang lebih kecil dengan fungsi
strsplit yang mempunyai sintaks sebagai berikut:
v = strsplit(str, ind)
dimana str adalah string yang akan dipecah dan ind adalah indek posisinya. Ilustrasi
penggunaan fungsi strsplit dapat dilihat pada contoh di bawah ini.
-->SciNum
SciNum =
!Komputasi !
! !
!Numerik !
! !
!dengan Scilab !
Suatu string juga dapat dipecah menjadi beberapa string yang lebih kecil berdasarkan
karakter tertentu sebagai tanda pemisahnya. Operasi ini dapat dilakukan dengan fungsi
tokens yang mempunyai sintaks sebagai berikut:
z = tokens(str,tk)
dimana z adalah suatu vektor kolom yang berisi substring yang dihasilkan dari string induk
str, dan tk adalah sebuah karakter atau vektor karakter yang dijadikan sebagai tanda
pemisah. Apabila argumen tk tidak digunakan maka tanda pemisah untuk memecah string
str adalah spasi dan tab.
String - 142
-->tokens(ss)
ans =
!Komputasi !
! !
!Teknik !
! !
!dan !
! !
!Visualisasi !
! !
!Data !
-->tokens('y=a+b*2', ['=','+','*'])
ans =
!y !
! !
!a !
! !
!b !
! !
!2 !
Substitusi String
Bagian dari suatu string dapat kita ganti atau substitusi dengan suatu string yang lain
dengan menggunakan fungsi strsubst yang mempunyai sintaks sebagai berikut
strsubst(str1, str2, str3)
Statemen ini akan mengganti string str2 yang terdapat di dalam string str1 dengan suatu
string str3. Berikut ini contoh-contoh penggunaan fungsi strsubst:
-->bem = strsubst(fem,"Hingga","Batas")
bem =
Elemen-elemen yang terdapat pada sebuah matrik string dapat digabung menjadi sebuah
string tunggal dengan fungsi strcat. Sintak dari fungsi strcat adalah sebagai berikut:
txt = strcat(mstr, newstr)
dimana mstr adalah sebuah matrik string dan newstr adalah argumen opsional yang
berupa suatu string baru yang akan disisipkan diantara elemen-elemen matrik string mstr,
dan txt adalah string yang dihasilkan.
-->strcat(sci)
ans =
ScilabScicos
Karakter-karakter yang terdapat pada string dapat dikonversi dari huruf besar menjadi
huruf kecil atau sebaliknya dapat dilakukan dengan fungsi convstr sebagai berikut:
convstr(string, fl)
dimana fl adalah tanda konversi, yaitu 'u' untuk konversi ke huruf besar dan 'l' untuk
konversi ke huruf kecil. Berikut ini contoh penggunaan fungsi convstr:
METODE NUMERIK
Karakter-karakter yang terdapat dalam suatu string juga dapat dikonversi menjadi kode
ASCII dengan menggunakan fungsi ascii. Fungsi ascii juga dapat digunakan untuk
melakukan operasi sebaliknya yaitu mengkonversi kode ASCII menjadi suatu string.
Ilustrasi penggunaan fungsi ascii adalah sebagai berikut.
-->k = ascii(x)
k =
-->ascii(k)
ans =
Sci Comp
Selain dengan fungsi ascii, konversi dari kode ASCII menjadi string juga dapat dilakukan
dengan fungsi char, seperti yang ditunjukkan pada contoh berikut ini.
-->char(k)
ans =
Sci Comp
Suatu data numerik dapat dirubah menjadi suatu data string dengan menggunakan fungsi
string, seperti yang diperlihatkan pada contoh-contoh berikut ini:
-->pi = 3.14;
-->pi_str = string(pi)
pi_str =
3.14
Sebuah string yang melambangkan suatu ekpresi matematika dapat dievaluasi nilainya
dengan menggunakan fungsi eval atau evstr, seperti pada contoh-contoh di bawah ini.
10.
-->w = "cosd(45)";
-->evstr(w)
ans =
0.7071068
String - 145
!2 0 !
! !
!0 4 !
-->E = eval(D)
E =
2. 0.
0. 4.
-->det(eval(D))
ans =
8.
-->inv(evstr(D))
ans =
0.5 0.
0. 0.25
Terhadap suatu matrik string, juga dapat dilakukan beberapa operasi manipulasi matrik,
seperti transpose, penambahan elemen matrik, ekstrasi elemen-elemen matrik,
konkatenasi dan lain sebagainya, seperti yang ditunjukkan oleh contoh-contoh berikut ini.
!Scilab SciNotes !
SciNotes
!u1 u2 u3 !
! !
!v1 v2 v3 !
-->uv' // transpose
ans =
!u1 v1 !
! !
!u2 v2 !
! !
!u3 v3 !
Bab 9
Tanggal dan Waktu
Informasi mengenai tanggal sekarang dapat diperoleh dengan menggunakan fungsi date.
-->date()
ans =
19-May-2011
Informasi mengenai tanggal dan waktu sekarang juga dapat diketahui dengan fungsi clock.
Output dari fungsi clock adalah sebuah vektor baris yang elemen-elemennya adalah tahun,
bulan, tanggal, jam, menit dan detik pada waktu sekarang.
-->clock()
ans =
Kalender
Kalender dari suatu bulan tertentu dapat diketahui dengan menggunakan fungsi calendar:
calendar(tahun, bulan)
Argumen tahun dan bulan menyatakan tahun dan bulan yang dari kalender dimaksud.
Output dari perintah calendar adalah sebuah daftar yang terdiri dari tiga elemen. Elemen
pertama adalah bulan dan tahun, elemen kedua adalah nama hari dan elemen ketiga adalah
tanggal kalender dalam satu bulan. Jika fungsi calendar dijalankan tanpa argumen input
maka outputnya adalah kalender bulan pada saat sekarang.
Tanggal dan Waktu - 148
-->kal = calendar()
kal =
kal(1)
Feb 2015
kal(2)
M Tu W Th F Sat Sun
kal(3)
0. 0. 0. 0. 0. 0. 1.
2. 3. 4. 5. 6. 7. 8.
9. 10. 11. 12. 13. 14. 15.
16. 17. 18. 19. 20. 21. 22.
23. 24. 25. 26. 27. 28. 0.
0. 0. 0. 0. 0. 0. 0.
Stopwatch
Waktu yang diperlukan untuk melakukan eksekusi terhadap sekelompok statemen dapat
diketahui dengan menggunakan pasangan fungsi tic dan toc. Kedua fungsi tersebut
mempunyai sintaks sebagai berikut:
tic();
[statemen-statemen yang dieksekusi]
toc()
Fungsi tic digunakan untuk menjalankan stopwatch kemudpan fungsi toc digunakan
untuk mematikan stopwatch. Output dari fungsi tic-toc adalah jumlah detik yang
diperlukan untuk melakukan eksekusi terhadap statemen-statemen yang berada di antara
perintah tic dan toc.
0.031
Tanggal dan Waktu - 149
Alternatif lain untuk menghitung waktu yang dibutuhkan untuk melakukan eksekusi
terhadap sekumpulan perintah yaitu dengan menggunakan fungsi timer. Sintaks dari
fungsi timer adalah sebagai berikut
timer();
[statemen-statemen yang dieksekusi]
timer()
Fungsi timer yang pertama akan menjalankan perhitungan waktu CPU (CPU time).
Kemudian fungsi timer yang kedua akan memberikan waktu (dalam waktu CPU) yang
diperlukan untuk mengeksekusi statemen-statemen yang berada diantara fungsi timer
yang pertama dengan fungsi timer kedua.
0.03125
Fungsi tic-toc atau timer biasanya digunakan untuk membandingkan waktu eksekusi
yang diperlukan oleh suatu algoritma dalam untuk menyelesaikan suatu komputasi
tertentu. Kedua fungsi tersebut biasanya digunakan untuk mencari algoritma yang paling
efisien jika pada suatu komputasi tertentu terdapat beberapa algoritma yang tersedia.
Bab 10
Perbandingan dan Logika
Pada suatu rangkaian beberapa statemen untuk menyelesaikan suatu perhitungan atau
operasi tertentu, kadangkala diperlukan suatu kondisi untuk mengontrol proses eksekusi
terhadap sebuah statemen atau sebuah blok statemen. Kondisi tersebut biasanya
dinyatakan dalam suatu ekspresi perbandingan atau ekspresi logika.
Operasi Perbandingan
Nilai dari dua obyek dapat dibandingkan dengan menggunakan operator-operator seperti
yang terdapat pada tabel di bawah ini.
Operator Deskripsi
== Sama dengan
operasi perbandingan adalah sebuah obyek boolean. Apabila ekspresi yang diuji pada
suatu operasi perbandingan mempunyai nilai logika benar maka outputnya adalah obyek
boolean T (true, benar) namun jika ekpresi yang diuji mempunyai nilai logika salah maka
outputnya adalah obyek boolean F (false, salah).
-->x ~= y
ans =
-->z > y
ans =
-->A = [1 3 5]; B = [1 3 9] ;
-->B >= A
ans =
T T T
-->I = eye(3,3)
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->O = ones(3,3)
O =
1. 1. 1.
1. 1. 1.
1. 1. 1.
-->I >= O
ans =
T F F
F T F
F F T
Perbandingan dan Logika - 152
-->R = rand(2,2)
R =
0.7592942 0.9996990
0.1945969 0.5191445
T T
F T
Operasi perbandingan biasanya digunakan sebagai ekspresi yang diuji dalam suatu
statemen kondisional if-else atau sebagai ekspresi yang digunakan untuk mengontrol
proses iterasi dalam suatu statemen perulangan while.
Berikut ini adalah contoh penggunaan operasi perbandingan yang terdapat di dalam suatu
blok kondisional if-else.
-->signum(-3.45)
ans =
- 1.
Penggunaan operasi perbandingan pada suatu blok perulangan while dapat dilihat pada
contoh di bawah ini.
-->eps = 1;
-->eps = eps*2
eps =
2.220D-16
Perbandingan dan Logika - 153
Seperti yang telah dijelaskan pada Bab 4, operasi perbandingan juga digunakan dalam
proses ekstraksi elemen-elemen suatu matrik atau vektor yang memenuhi suatu kondisi
tertentu.
-->R
R =
0.7592942 0.999699
0.1945969 0.5191445
0.7592942
0.999699
0.5191445
Operasi Logika
Suatu operasi logika digunakan untuk menentukan nilai logika yang dihasilkan oleh
kombinasi logika atau (or), logika dan (and) dari dua obyek boolean, atau untuk melakukan
operasi negasi (not) terhadap suatu obyek boolean. Operasi logika adalah operasi yang
bersifat elemen-dengan-elemen. Obyek-obyek yang diuji dalam suatu operasi logika dapat
berupa suatu ekspresi perbandingan maupun berupa suatu konstanta boolean. Tabel 10.2
adalah daftar dari operator-operator logika yang terdapat di dalam Scilab. Konstanta-
konstanta boolean yang telah terpasang di dalam Scilab dapat dilihat pada Tabel 10.3.
Operator Deskripsi
~ negasi/bukan (not)
Perbandingan dan Logika - 154
Variabel Deskripsi
-->r = p | q
r =
-->x = 1; y = 2; z = 3;
-->R
R =
0.7592942 0.999699
0.1945969 0.5191445
F F
F T
Kadang dalam sebuah statemen dapat terdapat bermacam-macam tipe operator (operator
matematika, operator perbandingan dan operator logika). Pada kasus seperti ini , tingkatan
operasinya yang paling tinggi adalah operasi aritmatika, kemudian operasi perbandingan
dan yang terakhir adalah operasi logika.
Suatu operasi logika seringkali digunakan sebagai ekspresi yang diuji dalam suatu
statemen kondisional if-else atau sebagai ekspresi yang digunakan untuk mengontrol
proses iterasi dalam suatu statemen perulangan while.
Perbandingan dan Logika - 155
Berikut ini contoh operasi logika yang terdapat di dalam suatu statemen kondisional if.
-->x = [2 3];
-->for k = 4:20
--> if modulo(k,2) ~= 0 & modulo(k,3) ~= 0
--> x = [x k];
--> end
-->end
-->x
x =
Contoh ini adalah perhitungan untuk menentukan bilangan prima yang nilainya lebih kecil
dari 20.
Contoh suatu operasi logika yang terdapat di dalam suatu statemen perulangan while
adalah sebagai berikut.
-->eps = 1;
-->eps = eps*2
eps =
2.220D-16
Suatu operasi logika juga dapat diterapkan terhadap obyek-obyek numerik. Pada kasus ini,
angka nol akan dianggap sebagai konstanta boolean salah (F) dan sembarang angka lainnya
selain angka nol akan dianggap sebagai konstanta boolean benar (T). Berikut ini contoh
operasi logika terhadap obyek-obyek numerik.
-->Q = [0 1 0];
-->P | Q
ans =
F T T
Perbandingan dan Logika - 156
Fungsi-Fungsi Logika
Selain menyediakan beberapa operator logika, di dalam Scilab juga terpasang dua fungsi
logika yaitu and dan or. Kedua fungsi tersebut dapat digunakan untuk melakukan operasi
logika dan serta logika atau terhadap elemen-elemen suatu matrik/vektor boolean.
And
Fungsi and adalah fungsi untuk operasi logika dan. Berikut ini sintak dari fungsi and:
B = and(A) atau B = and(A,'*')
B = and(A,1) atau B = and(A,'r')
B = and(A,2) atau B = and(A,'c')
dimana A adalah suatu matrik boolean. Output dari fungsi and adalah konstanta boolean T
jika semua elemen matrik yang diuji mempunyai nilai benar dan konstanta boolean F jika
terdapat sebuah elemen matrik yang diuji yang mempunyai nilai salah.
Deskripsi ketiga macam sintaks dari fungsi logika and adalah sebagai berikut:
and(A) atau and(A,'*'): fungsi and dioperasikan terhadap semua elemen matrik.
and(A,1) atau and(A,'r'): fungsi and dioperasikan terhadap elemen-elemen pada
setiap vektor kolom yang menyusun matrik A.
and(A,2) atau and(A,'c'): fungsi and dioperasikan terhadap elemen-elemen pada
setiap vektor baris yang menyusun matrik A.
T T F
T F F
-->and(D)
ans =
-->and(D,1)
ans =
T F F
Perbandingan dan Logika - 157
Or
Fungsi or adalah fungsi untuk logika atau. Sintak dari fungsi or adalah sebagai berikut:
B = or(A) atau B = or(A,'*')
B = or(A,1) atau B = or(A,'r')
B = or(A,2) atau B = or(A,'c')
dimana A adalah suatu matrik boolean. Output dari fungsi or adalah konstanta boolean T
jika terdapat sebuah elemen matrik yang diuji mempunyai nilai benar dan konstanta
boolean F jika semua elemen matrik yang diuji yang mempunyai nilai salah.
Deskripsi ketiga macam sintaks dari fungsi logika or adalah sebagai berikut:
or(A) atau or(A,'*'): fungsi or dioperasikan terhadap semua elemen matrik.
or(A,1) atau or(A,'r'): fungsi or dioperasikan terhadap elemen-elemen pada setiap
vektor kolom yang menyusun matrik A.
or(A,2) atau or(A,'c'): fungsi or dioperasikan terhadap elemen-elemen pada setiap
vektor baris yang menyusun matrik A.
-->D
D =
T T F
T F F
-->or(D)
ans =
Fungsi-Fungsi Pengujian
Tabel 10.4 adalah daftar dari beberapa fungsi yang dapat digunakan untuk berbagai
macam operasi seperti memeriksa eksistensi sebuah variabel, menguji tipe dan nilai dari
elemen-elemen matrik dan lain sebagainya. Output yang dihasilkan oleh fungsi-fungsi
tersebut adalah konstanta boolean T (true, benar) atau konstanta boolean F (false, salah)
tergantung pada hasil pengujiannya.
Perbandingan dan Logika - 158
Fungsi Deskripsi
-->clear
-->x = 1.23;
-->A = [1 2 3; 0 4 5]
A =
1. 2. 3.
0. 4. 5.
-->ieee(2)
-->B = A.\1
B =
1. 0.5 0.3333333
Inf 0.25 0.2
-->C = B.\1
C =
1. 2. 3.
0. 4. 5.
Perbandingan dan Logika - 159
-->isdef("x")
ans =
-->isdef("z")
ans =
-->isreal(P)
ans =
-->isvector(P)
ans =
-->isvector(A)
ans =
-->isequal(A,C)
ans =
-->isinf(B)
ans =
F F F
T F F
Informasi yang dihasilkan oleh suatu fungsi pengujian kadangkala diperlukan sebagai
kondisi yang diuji di dalam sebuah statemen kondisional, seperti yang ditunjukkan pada
contoh di bawah ini.
-->function a = my_abs(x)
--> if isreal(x)
--> a = sign(x).*x
--> else
--> a = sqrt(real(x).^2 + imag(x).^2)
--> end
-->endfunction
-->Y = my_abs(X)
Y =
1.23 10.
Fungsi my_abs pada contoh ini adalah emulasi dari fungsi abs yang telah terpasang di
dalam Scilab.
Bab 11
Perulangan dan Kondisional
Scilab menyediakan beberapa statemen yang dapat digunakan untuk mengontrol alur
eksekusi terhadap serangkaian statemen. Statemen-statemen tersebut yaitu for, while, if–
else dan select–case, break dan continue.
For
Statemen for digunakan untuk melakukan eksekusi secara berulang (iterasi) dalam jumlah
tertentu terhadap suatu blok-statemen. Bentuk umum statemen ini adalah sebagai berikut:
Contoh perulangan for yang menggunakan vektor inkremental i:j sebagai ekspresi yang
digunakan untuk mengontrol suatu perulangannya adalah sebagai berikut :
-->s = 0;
-->for i = 1:25
--> s = s + 1/i;
-->end
-->s
s =
3.8159582
Perulangan dan Kondisional - 162
Contoh perulangan for yang menggunakan vektor inkremental i:j:k sebagai ekspresi
perulangannya adalah sebagai berikut :
-->function y = sin_taylor(x,n)
--> tnd = 1;
--> y = 0;
--> for i = 1:2:n
--> y = y + tnd*x.^i/factorial(i);
--> tnd = -tnd;
--> end
-->endfunction
-->sin_taylor([0.05,0.1], 7)
ans =
0.0499792 0.0998334
Selain berupa suatu vektor inkremental, ekspresi yang digunakan untuk mengontrol suatu
perulangan for juga dapat berupa sebuah vektor atau matrik sembarang. Misalkan V
adalah sebuah vektor atau matrik yang digunakan sebagai ekspresi perulangan maka
statemen perulangannya secara umum dapat dinyatakan sebagai berikut:
for var = V
blok-statemen
end
Pada sebuah perulangan yang menggunakan suatu vektor sebagai ekspresi perulangannya
maka jumlah perulangannya adalah sebanyak jumlah elemen vektor dimana pada setiap
langkah perulangan ke-i nilai variabel iterasinya adalah nilai elemen ke-i, seperti yang
diperlihatkan pada contoh di bawah ini.
-->temp = 0;
-->for x = C
--> temp = temp + x;
-->end
-->mean_C = temp/length(C)
mean_C =
84.7
Perulangan dan Kondisional - 163
Kemudian pada suatu perulangan yang menggunakan suatu matrik sebagai ekspresi
perulangannya maka jumlah perulangannya adalah sebanyak jumlah kolom matrik dan
pada setiap langkah perulangan ke-i nilai variabel iterasinya adalah vektor kolom ke-i,
seperti yang diperlihatkan pada contoh berikut ini.
-->jumlah = zeros(1,4);
-->i = 0;
-->for j = N
--> i = i + 1;
--> jumlah(i) = sum(j);
-->end
-->jumlah
jumlah =
Statemen perulangan for juga dapat diletakkan di dalam sebuah statemen perulangan yang
lain, seperti pada contoh di bawah ini.
-->for i=1:3
--> for j=1:3
--> H(i,j) = 1/(i+j-1);
--> end
-->end
-->H
H =
Penggunaan statemen for pada sebagian besar contoh-contoh yang telah diberikan hanya
sebagai ilustrasi saja untuk memperjelas penggunaan statemen for. Pada beberapa contoh
di atas, statemen for dapat diganti dengan statemen lain yang berbasis vektor.
Perulangan dan Kondisional - 164
Penggunaan statemen for sebaiknya hanya digunakan ketika statemen yang berbasis
vektor sulit atau tidak dapat digunakan, seperti pada perhitungan di bawah ini,
function y = sin_taylor(x, n)
tnd = 1;
y = 0;
for i = 1:2:n
y = y + tnd*x.^i/factorial(i);
tnd = -tnd;
end
endfunction
Pada perhitungan ini penggunaan statemen for tidak dapat dihindari dan digantikan
dengan statemen lain yang berbasis vektor.
While
Statemen perulangan while digunakan untuk menangani suatu proses perulangan yang
jumlah perulangannya tidak dapat ditentukan secara pasti. Bentuk umum dari statemen
perulangan while adalah sebagai berikut:
Blok statemen yang terdapat di dalam sebuah blok perulangan while akan dieksekusi
secara berulang selama ekspresi yang diuji masih bernilai benar, proses perulangan akan
dihentikan jika ekspresi yang diuji bernilai salah. Kata-kunci then dapat diganti dengan
ENTER, do, simbol koma (,) atau simbol titik-koma (;).
-->eps = 1;
-->eps = 2*eps
eps =
2.220D-16
Perulangan dan Kondisional - 165
-->tol = 1e-6;
-->x
x =
3.5128336
Break
Statemen break digunakan untuk menghentikan suatu proses perulangan secara paksa.
Pada suatu perulangan yang bersarang, statemen break hanya akan menghentikan proses
perulangan dimana statemen break berada.
-->function y = my_sqrt(x)
-->// Penentuan akar kuadrat suatu bilangan x
-->
--> y = x/2; // nilai awal
--> while %t
--> y = (y + x/y)/2;
--> if abs(x - y^2) < 1e-6 then break end
--> end
-->endfunction
-->my_sqrt(12.34)
ans =
3.5128336
Pada contoh ini, ekspresi logika yang diuji pada statemen while nilainya selalu benar (%t)
sehingga statemen break digunakan untuk menghentikan proses perulangannya jika suatu
kondisi tertentu telah dipenuhi.
Perulangan dan Kondisional - 166
Continue
-->n = 5;
-->x_even = [];
Penggunaan statemen continue di dalam suatu blok perulangan kadang dapat dihindari
dengan menggunakan statemen-statemen lain yang ekuivalen. Sebagai contoh, perhitungan
di atas dapat diselesaikan tanpa harus menggunakan statemen continue dengan statemen-
statemen sebagai berikut.
Seperti yang terlihat pada contoh ini, blok statemen yang tidak menggunakan statemen
continue lebih ringkas dan lebih mudah dibaca daripada blok statemen yang
menggunakan statemen continue.
Perulangan dan Kondisional - 167
If-Else
Statemen if–else digunakan untuk mengontrol apakah suatu blok statemen akan
dieksekusi atau tidak. Bentuk paling sederhana dari statemen ini adalah sebagai berikut:
if ekspresi then
blok-statemen
end
Blok statemen yang terletak di dalam blok if hanya akan dieksekusi jika ekspresi yang
diuji bernilai benar. Kata-kunci then dalam blok kondisional if-else dapat diganti dengan
ENTER, tanda koma (,) atau tanda titik-koma (;).
-->function y = my_clean(x,tol)
--> y = x
--> for i = 1:length(x)
--> if abs(y(i)) < tol then
--> y(i) = 0.
--> end
--> end
-->endfunction
-->my_clean(x, 1.d-6)
ans =
9.99 0.
-->function y = my_sort(x)
--> n = length(x)
--> for i = 1:n
--> for j = (i+1):n
--> if x(j) < x(i)
--> temp = x(j)
--> x(j) = x(i)
--> x(i) = temp
--> end
--> end
--> end
--> y = x
-->endfunction
Perulangan dan Kondisional - 168
-->my_sort(x)
ans =
0. 2. 3. 5. 10.
Apabila terdapat dua alternatif pilihan untuk ekspresi yang diuji dalam blok kondisional
maka blok kondisional if-else cocok untuk digunakan.
if ekspresi then
blok-statemen pertama
else
blok-statemen kedua
end
Pada blok kondisional if-else jika ekspresi yang diuji mempunyai nilai benar maka blok-
statemen pertama yang akan dieksekusi namun jika ekspresi yang diuji bernilai salah maka
blok-statemen kedua yang akan dieksekusi.
5107.
kepala =
4893.
Perulangan dan Kondisional - 169
Apabila ekspresi yang diuji dalam suatu blok kondisional yang mempunyai lebih dari dua
macam pilihan maka bentuk kondisional yang sesuai adalah if-elseif-else yang
mempunyai bentuk umum sebagai berikut:
if ekspresi_1 then
blok-statemen pertama
elseif ekspresi_2 then
blok-statemen kedua
. . .
else
blok-statemen ke-n
end
Pada blok kondisional if-elseif-else, suatu blok-statemen akan dieksekusi jika ekspresi
yang diuji untuk blok-statemen tersebut mempunyai nilai benar. Apabila semua ekspresi
yang diuji tidak ada yang mempunyai nilai logika benar maka blok-statemen yang terdapat
pada blok else yang akan dieksekusi. Blok else bersifat opsional dan dapat diabaikan
apabila tidak diperlukan.
-->signnum(-3.45)
ans =
- 1.
-->signnum(10)
ans =
1.
Perulangan dan Kondisional - 170
Statemen kondisional juga dapat dibuat bersarang atau berada di dalam statemen
kondisional yang lainnya, seperti yang ditunjukkan pada contoh di bawah ini.
-->function uji(x, y)
-->// Fungsi untuk membandingkan nilai dari argumen x dan y
-->
--> if x == y
--> disp(string(x) + " dan " + string(y) + " adalah sama")
--> else
--> if x < y
--> disp(string(x) + " lebih kecil daripada " + string(y))
--> else
--> disp(string(x) + " lebih besar daripada " + string(y))
--> end
--> end
-->endfunction
-->uji(%pi, %e)
Select-Case
Statemen kondisional select-case cocok untuk digunakan jika ekspresi yang diuji dalam
blok kondisional mempunyai nilai diskrit, baik berupa suatu data integer maupun string.
Bentuk umum dari statemen select-case adalah sebagai berikut:
select ekspresi
case ekspresi_1 then
blok-statemen pertama
case ekspresi_2
blok-statemen kedua
. . .
else
blok-statemen ke-n
end
Pada blok kondisional select-case, jika ekspresi yang diuji mempunyai nilai yang sama
dengan nilai ekspresi dari suatu case maka blok-statemen pada case tersebut yang akan
dieksekusi. Namun jika nilai dari ekspresi yang diuji tidak ada yang sama dengan salah satu
dari nilai ekspresi pada suatu case maka blok statemen yang terdapat pada blok else yang
Perulangan dan Kondisional - 171
akan dieksekusi. Blok else bersifat opsional dan dapat tidak digunakan jika tidak
diperlukan.
-->function my_sign(x)
--> select sign(x)
--> case -1
--> disp(string(x) + ' adalah bilangan negatif')
--> case 1
--> disp(string(x) + ' adalah bilangan positif')
--> else
--> disp(string(x) + ' adalah bilangan nol')
--> end
-->endfunction
-->my_sign(-20.8)
-->function n = nilai(z)
--> select convstr(z,"u")
--> case "A" then n = 4
--> case "B" then n = 3
--> case "C" then n = 2
--> case "D" then n= 1
--> else n = 0
--> end
-->endfunction
-->nilai("c")
ans =
2.
Dalam suatu operasi kondisional, jika ekspresi yang diuji mempunyai nilai diskrit maka
penggunaan statemen select-case adalah lebih cocok dibandingkan dengan statemen if-
elseif-else. Hal ini karena blok statemen kondisional yang dibuat dengan statemen
select-case lebih mudah untuk dibaca dan mempunyai bentuk yang lebih elegan.
Bab 12
Editor Teks SciNotes
SciNotes adalah sebuah program editor teks yang disediakan oleh Scilab untuk
memudahkan pembuatan atau pengembangan sebuah file skrip atau fungsi. SciNotes dapat
dijalankan melalui menu Applications SciNotes yang terdapat pada jendela konsol
Scilab atau dengan menggunakan perintah editor atau scinotes. Gambar berikut ini
adalah tampilan dari jendela editor teks SciNotes.
SciNotes menyediakan fitur-fitur menarik yang sangat berguna pada waktu pembuatan
atau pengeditan suatu file skrip atau fungsi. Fitur-fitur tersebut antara lain sebagai berikut:
Penggunaan warna-warna tertentu untuk memperjelas sintaksis suatu statemen.
Indentasi secara otomatis pada saat penulisan suatu blok statemen perulangan atau
kondisional.
Dapat memperbaiki indentasi pada statemen-statemen yang diblok.
Autocompletion terhadap operator atau kata-kunci.
Pencarian dan penggantian terhadap suatu kata atau frasa yang terdapat di dalam file
yang sedang dibuka.
Berikut ini adalah sebuah ilustrasi pembuatan sebuah fungsi dalam SciNotes.
File skrip atau fungsi yang telah selesai dibuat dalam SciNotes dapat dieksekusi ke dalam
konsol Scilab melalui menu Execute atau dengan menggunakan tombol klik kanan pada
mouse.
Bab 13
Skrip
Skrip adalah sebuah file teks yang di dalamnya terdapat statemen-statemen Scilab. Pada
saat suatu skrip dijalankan maka statemen-statemen yang terdapat di dalamnya akan
dieksekusi seolah-olah statemen-statemen tersebut diketikkan pada Jendela Scilab.
Pembuatan Skrip
Pada dasarnya suatu file skrip dapat dibuat dengan menggunakan sembarang program
editor teks, seperti notepad. Namun cara terbaik dalam pembuatan sebuah file skrip yaitu
dengan program editor teks SciNotes karena program tersebut merupakan teks editor yang
disediakan oleh Scilab untuk memudahkan pembuatan sebuah file skrip atau file fungsi.
SciNotes dapat dijalankan melalui jendela Scilab melalui menu Application SciNotes.
Sebuah skrip yang telah selesai dibuat dengan teks editor SciNotes dapat disimpan dengan
menggunakan menu File Save. Meskipun dapat digunakan sembarang ektensi, namum
sebuah file skrip sebaiknya disimpan dengan ekstensi sce.
Contoh 1. (Deret Fibonacci). Berikut ini adalah sebuah skrip [fibo.sce] untuk
menentukan sejumlah 10 suku awal dari deret Fibonacci.
// Deret Fibonacci
n = 10;
f = ones(1,n);
for k = 3:n
f(k) = f(k-1) + f(k-2);
end
disp(f, "10 suku pertama deret Fibonacci : ")
Skrip - 175
Statemen-statemen yang terdapat di dalam sebuah skrip yang sedang dibuka pada jendela
SciNotes dapat dijalankan melalui menu Execute. Apabila skrip [fibo.sce] pada Contoh 1
dieksekusi melalui menu Execute File with no Echo maka tampilan berikut ini akan
muncul pada Jendela Scilab.
-->exec('F:\Scilab\Skrip\fibo.sce', -1)
Sebuah file skrip yang tersimpan pada sebuah direktory dapat dieksekusi dengan statemen
exec(file_skrip) dimana file_skrip adalah nama filenya. Apabila filenya tersimpan
pada direktori kerja maka argumen file_skrip cukup dinyatakan dengan menggunakan
nama filenya saja, seperti contoh di bawah ini:
-->exec('fibo.sce');
Namun jika filenya tidak tersimpan pada direktori kerja maka argumen file_skrip harus
berupa nama file skrip dan nama direktorinya, seperti yang contoh di bawah ini:
-->exec('D:\Skrip dan Fungsi\fibo.sce');
Apabila di belakang statemen exec(file_skrip) tidak ditambahkan tanda titik-koma (;)
maka statemen-statemen yang terdapat di dalam skrip yang dieksekusi akan ditampilkan
pada jendela Scilab.
Contoh 2. Seorang penjual koran pada sebuah terminal bus dalam satu hari kira-kira dapat
bertemu dengan 1000 orang yang berbeda. Dari semua orang yang ditemuinya, jumlah
orang yang membeli korannya adalah sekitar 20 orang. Harga beli koran dari agen adalah
Rp 2000 dan harga jualnya adalah Rp 3000 kemudian koran yang tak laku tidak dapat
dikembalikan lagi ke agen koran.
Berikut ini adalah sebuah skrip untuk melakukan simulasi sehingga diperoleh jumlah
koran yang sebaiknya dibeli oleh penjual koran sehingga dia mendapatkan keuntungan
maksimum.
for i = 1:j
laku = min(sum(rand(1,N) <= p),koran);
laba = laba + 3000*laku - 2000*koran;
end
laba = laba/j;
[l,i] = gsort(laba);
disp("Pembelian koran yang menghasilkan tiga keuntungan terbesar")
disp(koran(i(1:3)), "Jumlah koran :");
disp(laba(i(1:3)), "Keuntungan :");
Anggap skrip ini bernama [simulasi penjualan koran.sce]. Berikut ini hasil eksekusi
dari skrip tersebut.
Jumlah koran :
Keuntungan :
Contoh 3. (Deret Bilangan Prima) Berikut ini adalah sebuah skrip untuk membuat deret
bilangan prima yang nilainya lebih kecil dari suatu bilangan bulat n.
// Deret bilangan prima yang lebih kecil dari suatu bilangan bulat n
clear
mprintf("\n Deret bilangan prima yang lebih kecil")
mprintf(" dari suatu bilangan bulat n\n\n")
n = input(" Bilangan bulat n ? ");
sieve = 2:n;
prima = [];
for i = 2:n
if find(sieve == i)
prima = [prima i];
sieve = [sieve(modulo(sieve,i) ~= 0) i];
end
end
Anggap skrip ini bernama [prima.sce]. Eksekusi terhadap file skrip ini untuk mencari
deret bilangan prima yang lebih kecil dari bilangan 20 akan menghasilkan tampilan seperti
yang diperlihatkan di bawah ini.
-->exec("prima.sce");
Bilangan bulat n ? 20
Penyelesaian suatu perhitungan yang relatif panjang melalui sebuah file skrip merupakan
cara yang lebih baik dan efektif dibandingkan penyelesaiannya melalui jendela Scilab. Hal
ini karena jika ditemukan kesalahan dalam perhitungan atau dalam penulisan statemen
dalam file skrip maka perbaikan kesalahannya hanya dilakukan terhadap statemen-
statemen yang salah saja. Seandainya perhitungannya dilakukan melalui jendela Scilab
maka semua statemennya harus ditulis ulang kembali disertai dengan perbaikan pada
statemen-statemen yang salah. Keuntungan lainnya yaitu sebuah file skrip dapat digunakan
sebagai dokumentasi dari suatu perhitungan yang telah dilakukan.
Sayangnya untuk suatu perhitungan dengan data yang berbeda maka harus dilakukan
pengeditan terlebih dahulu terhadap file skripnya dan setelah itu melakukan eksekusi
untuk melihat hasil perhitungannya. Untuk kondisi semacam ini penggunaan skrip menjadi
tidak praktis dan sebaiknya digunakan file fungsi. Penjelasan rinci mengenai file fungsi
diberikan pada bab selanjutnya.
Bab 14
Fungsi
File-Fungsi
File-fungsi adalah sebuah file teks yang di dalamnya terdapat statemen-statemen Scilab
dimana statemen-statemen tersebut harus diitulis dengan sintaks sebagai berikut.
Diman func_name adalah nama fungsi, in1, in2 adalah argumen-argumen input kemudian
out1, out2 adalah argumen-argumen output. Pada fungsi yang tidak mempunyai argumen
input penggunaan tanda kurung kiri dan kurung kanan, ( ), bersifat opsional. Pada fungsi-
fungsi yang mempunyai argumen output tunggal penggunaan kurung-siku kiri dan kurung-
siku kanan, [ ], bersifat opsional. Aturan penamaan fungsi adalah sama seperti aturan
penamaan suatu variabel.
Berikut ini beberapa hal yang sebaiknya dilakukan pada saat pembuatan sebuah fungsi.
Pada bagian awal sebuah fungsi, dimasukkan beberapa baris komentar yang berisi
tentang tujuan komputasi dari fungsi.
Variabel-variabel yang terdapat di dalam suatu fungsi harus mudah dimengerti.
Terdapat penjelasan singkat tentang variabel-variabel yang digunakan.
Menuliskan baris komentar pada bagian awal dari suatu blok statemen yang cukup
panjang maupun pada blok-statemen untuk perhitungan yang cukup sulit.
Fungsi - 179
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.
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].
function y = cos_d(x)
y = clean(cos(x/180*%pi))
endfunction
function y = sin_d(x)
y = clean(sin(x/180*%pi))
endfunction
Fungsi - 180
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].
if (n >= nmax)
disp('Perhitungan belum konvergen setelah ' + ...
string(nmax) + ' iterasi.')
abort
end
endfunction
Fungsi - 181
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.
-->fibonacci(5)
ans =
1. 1. 2. 3. 5.
-->x = [0 30 45 60 90];
-->cos_d(x)
ans =
-->tan_d(x)
ans =
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.
Berikut ini ilustrasi pembuatan fungsi secara langsung pada jendela Scilab.
-->function y = func(x)
--> y = x - exp(-x)
-->endfunction
-->x = 1.0
-->y = func(x)
y =
0.6321206
-->[u,v] = foo(345,123)
v =
222.
u =
468.
Fungsi - 183
Fungsi f(x) yang akan dicari akarnya dapat dibuat dengan statemen Scilab sebagai berikut.
-->function y = func(x)
--> y = x - exp(-x)
-->endfunction
-->exec('secant.sci');
Selanjutnya akar dari fungsi f(x) dapat dihitung dengan statemen sebagai berikut:
- 1.242D-13
x0 =
0.5671433
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]=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-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.
Fungsi - 185
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.
-->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.
Fungsi - 186
-->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 n 1
factorial (n)
n(n 1)(n 2) ... 2 1 jika n 1
Untuk n > 1, fungsi faktorial dapat dinyatakan dalam bentuk sebagiai berikut:
factorial(n) = n factorial(n – 1)
function f = faktorial(n)
if n > 1 then
f = n*faktorial(n-1)
else
f = 1
end
endfunction
-->faktorial(5)
ans =
120.
Fungsi - 187
Contoh 6. Suku ke-n dari deret Fibonacci dapat dinyatakan dengan formula berikut:
f n f n1 f n2 dimana f1 = 1 dan f2 = 1.
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.
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].
Fungsi - 188
if (n >= nmax)
warning('Perhitungan belum konvergen setelah ' + ...
string(nmax) + ' iterasi.')
abort
end
endfunction
-->function y = f(x)
--> y = x^2 - 1
-->endfunction
Fungsi - 189
Misalkan dalam pencarian akar dari fungsi f(x) kita menggunakan nilai awal x1=1 dan x2=2
maka perintah untuk mencari akar fungsi f(x) adalah sebagai berikut:
-->[x0,f0] = fsecant(f,1,2)
f0 =
0.
x0 =
1.
Pada saat proses eksekusi terhadap statemen fsecant(f,1,2) berlangsung maka blok
statemen perulangan while tidak akan dikerjakan karena nilai f(1)=0 telah memenuhi
kondisi perbadingan pada blok statemen berikut
if abs(fx) < epsilon
return
end
Statemen return yang terdapat di dalam blok tersebut akan menyebabkan proses eksekusi
terhadap fungsi fsecant dihentikan.
Apabila kita jalankan kembali fungsi fsecant dengan pasangan nilai awal yang lain, yaitu
x1=-2 dan x2=2, maka pada jendela Scilab akan muncul output sebagai berikut:
-->[x,fx] = fsecant(f,-2,2)
!--error 10000
Terjadi pembagian dengan nol
at line 32 of function fsecant called by :
[x,fx] = fsecant(f,-2,2)
Pesan kesalahan ini muncul karena f(-2)=f(2), yang mana kondisi ini memenuhi ekspresi
perbandingan yang diuji pada blok statemen berikut
if abs(f(x2)-f(x1)) < %eps then
error('Terjadi pembagian dengan bilangan nol')
end
Selanjutnya, jika kita gunakan kembali fungsi fsecant untuk mencari akar dari fungsi yang
lain yaitu g x x 25 .
2
-->function y = g(x)
--> y = x^2 + 25
-->endfunction
Fungsi - 190
Anggap dalam penentuan akar dari fungsi g(x) digunakan nilai awal x1=3 dan x2=4 maka
output yang muncul pada jendela Scilab adalah sebagai berikut:
Pesan peringatan ini muncul karena setelah 100 kali perulangan akar dari fungsi g(x)
masih belum dapat ditemukan.
Selanjutnya jika fungsi fsecant dijalankan kembali dengan nilai awal berupa bilangan
kompleks, seperti pada contoh di bawah ini, maka diperoleh hasil sebagai berikut:
5.i
Terlihat bahwa fungsi fsecant dapat menemukan salah satu dari akar fungsi
Pause
Statemen pause akan menyela proses eksekusi yang sedang berlangsung di dalam sebuah
fungsi atau skrip. Proses eksekusi akan dihentikan pada baris dimana statemen pause
tersebut diletakkan. Statemen pause biasanya digunakan untuk dalam proses debugging
terhadap suatu skrip atau fungsi. Berikut ini ilustrasi penggunaan perintah pause.
n = 0
pause
if (n >= nmax)
warning('Iterasi tidak konvergen setelah ' + ...
string(nmax) + ' iterasi.')
abort
end
endfunction
Selanjutnya kita panggil fungsi psecant.sci ke dalam ruang kerja dan kemudian
digunakan untuk mencari akar dari fungsi f x x exp( x) .
-->function y = func(x)
--> y = x - exp(-x)
-->endfunction
Ketika fungsi psecant dijalankan maka akan muncul sebuah tampilan seperti di bawah ini.
-->[x,fx,n] = psecant(func,0.5,1)
Simbol -1-> yang muncul pada jendela Scilab merupakan efek dari penggunan statemen
Fungsi - 192
pause yang terdapat di dalam fungsi psecant. Penggunaan statemen pause akan
menciptakan sebuah ruang kerja baru dimana semua variabel yang berada di atas statemen
pause telah tersimpan di dalam ruang kerja baru tersebut. Setelah tanda -1-> kita dapat
memberikan perintah-perintah seperti yang biasa dimasukkan pada baris perintah.
-1->x2, n
x2 =
0.5671433
n =
4.
-1->f(x)
ans =
3.357D-11
Untuk melanjutkan eksekusi terhadap fungsi psecant dapat digunakan perintah resume
atau return. Untuk membatalkan eksekusi terhadap file tersebut gunakan perintah abort.
Setbpt
Berbeda dengan pause, statemen setbpt hanya dapat digunakan terhadap sebuah fungsi.
Pada penggunaan statemen setbpt tidak perlukan adanya penyisipan statemen tersebut ke
dalam fungsi dan dijalankan pada jendela Scilab dengan sintaks sebagai berikut:
setbpt(nama-fungsi, [nomer-baris])
dimana nama-fungsi adalah nama fungsi dan nomer-baris adalah nomer-nomer baris yang
akan dipasang titik sela.
Contoh 9. Pada contoh ini fungsi [fsecant.sci] digunakan untuk menentukan akar dari
fungsi f x x exp( x) .
-->function y = func(x)
--> y = x - exp(-x)
-->endfunction
Namun pada saat eksekusi ditambahkan beberapa titik sela dengan menggunakan fungsi
setbpt. Anggap pada fungsi fsecant kita tambahkan titik sela pada baris ke-27 dan ke-38
maka perintahnya adalah sebagai berikut.
Selanjutnya jika kita jalankan fungsi fsecant maka tampilan pada jendela Scilab adalah
seperti berikut ini.
-1->
Terlihat bahwa efek dari perintah setbpt adalah sama dengan perintah pause.
Setelah tanda -1-> kita dapat memberikan perintah-perintah seperti pada baris perintah
biasa, seperti yang diperlihatkan di bawah ini.
-1->x1, x2
x1 =
0.
x2 =
0.5
-1->resume
Stop after row 38 in function fsecant.
-1->x, n
x =
0.5671433
n =
4.
-1->return
fx =
- 3.307D-12
x =
0.5671433
Ketika perintah setbpt sedang dijalankan, proses eksekusi terhadap fungsi dapat
dilanjutkan dengan digunakan perintah resume atau return. Jika digunakan perintah abort
maka eksekusinya akan dibatalkan dan tidak ada output yang dihasilkan oleh fungsi yang
sedang dijalankan.
Fungsi - 194
Titik-titik sela yang terpasang pada suatu fungsi dapat dilihat dengan perintah dispbpt().
-1->dispbpt
Breakpoints of function : fsecant
27
38
Titik-titik sela yang terpasang pada suatu fungsi dapat dihapus dengan statemen sebagai
berikut
delbpt(fct, nmr_brs)
dimana nmr_brs adalah sebuah vektor yang menyatakan nomor baris dari titik-titk sela
yang akan dihapus. Jika argumen nmr_brs tidak digunakan maka semua titik-sela yang
terpasang pada fungsi fct akan dihapus. Apabila fungsi delbpt dijalankan tanpa argumen
maka semua titik-sela yang telah terpasang pada semua fungsi akan dihapus.
-->delbpt('fsecant', 27)
-->delbpt()
Jumlah argumen input dan output yang dipakai pada saat menjalankan sebuah fungsi dapat
diketahui dengan fungsi argn yang mempunyai sintaks sebagai berikut:
[lhs,rhs] = argn()
lhs = argn(1)
rhs = argn(2)
dimana rhs dan lhs adalah jumlah argumen input dan output yang digunakan.
Penggunaan fungsi argn dapat dilihat pada fungsi fabc pada contoh di bawah ini.
sela ke dalam fungsinya untuk dapat melihat nilai-nilai outputnya. Sebagai contoh, untuk
melihat nilai dari fungsi argn pada fungsi fabc di atas kita harus menjalankan statemen
setbpt terlebih dahulu sebelum menjalankan fungsi fabc.
-->setbpt('fabc',2)
Selanjutnya jika fungsi fabc dijalankan maka output yang muncul adalah sebagai berikut.
-->[m,n] = fabc(3,4,5)
Stop after row 2 in function fabc :
-1->n_in
n_in =
3.
-1->n_out
n_out =
2.
-1->argn(2)
ans =
3.
-1->resume
Perintah argn dapat digunakan untuk mengontrol jumlah minimum argumen input yang
diperlukan. Apabila jumlah argumen inputnya kurang dari yang dipersyaratkan maka
fungsi yang dipanggil biasanya tidak akan dieksekusi dan kemudian ditampilkan sebuah
pesan kesalahan.
Contoh 10. Fungsi rasional di bawah ini adalah fungsi untuk mencari hampiran bilangan
rasional dari suatu bilangan real. Fungsi rasional adalah modifikasi dari fungsi rat yang
telah terpasang pada Scilab. Berikut ini adalah statemen-statemen fungsi rasional.
if argn(2) < 1
Fungsi - 196
if argn(2) == 2
[a,b] = rat(x,tol)
else
[a,b] = rat(x)
end
if argn(1) == 2
n = a
d = b
else
n = string(a) + '/' + string(b)
end
endfunction
-->[p,q] = rasional(0.333)
q =
1000.
p =
333.
-->pi = rasional(%pi,0.001)
pi =
22/7
Menampilkan Baris Komentar yang Terdapat Pada Bagian Awal Suatu Fungsi
Pada bagian awal suatu fungsi biasanya terdapat beberapa baris komentar. Baris komentar
tersebut dapat kita tampilkan dengan perintah sebagai berikut
head_comments("func")
Dimana func adalah nama fungsi. Sebelum perintah tersebut dijalankan maka kita harus
memanggil fungsinya terlebih dahulu ke dalam ruang kerja Scilab.
-->head_comments("rasional")
function [n,d] = rasional(x,tol)
Fungsi untuk mencari hampiran bilangan rasional dari
suatu bilangan real.
Kelebihan Fungsi
Contoh 11. (Metode Optimasi Golden Section). Metode golden section adalah salah satu
metode yang populer untuk penyelesaian suatu persoalan optimasi nonlinier yang terdiri
dari satu variabel. Berikut ini adalah statemen-statemen untuk metode golden section.
R = 0.618033989;
C = 1.0 - R;
x1 = R*a + C*b;
Fungsi - 198
x2 = C*a + R*b;
f1 = f(x1);
f2 = f(x2);
if f1 < f2;
fmin = f1;
xmin = x1;
else
fmin = f2;
xmin = x2;
end
endfunction
Berikut ini adalah contoh penggunaan metode Golden Section untuk menentukan nilai
minimum dari sebuah fungsi sebagai berikut
f x 2 x 2
16
x
pada interval 1 x 4. Grafik dari fungsi f(x) ditunjukkan pada Gambar 14.2. Dari Gambar
14.2 terlihat bahwa fungsi obyektif mempunyai nilai minimum terletak pada nilai x yang
sedikit lebih besar 1.5. Oleh karena itu, kita dapat menggunakan jangkauan [1.5,1.75]
sebagai interval pencarian nilai x yang menghasilkan nilai fungsi obyektif yang optimum.
Fungsi - 199
Gambar 14.2
Nilai optimum dari fungsi obyektif f(x) dapat diperoleh dengan statemen-statemen sebagai
berikut:
-->function y = fobj(x)
--> y = 2.0*x^2 + 16.0./x
-->endfunction
-->[xmin,fmin] = golden_section(fobj,1.5,1.75,1e-6,1e-6)
fmin =
15.119053
xmin =
1.5874012
Dari output yang diberikan oleh fungsi golden_section diperoleh bahwa titik optimumnya
adalah xoptimum = 1.587 dengan nilai minimum fminimum = 15.119.
Bab 15
Input dan Output
Selain melalui baris perintah, suatu data juga dapat dimasukkan dengan fungsi input
dengan sintaks sebagai berikut.
x = input("teks")
x = input("teks", "string")
Dimana teks adalah keterangan tentang data yang akan dimasukkan. Jika data yang
dimasukkan berupa string maka "string" harus digunakan sebagai argumen kedua pada
fungsi input. Argumen "string" dapat disingkat dengan karakter tunggal "s".
Jumlah iterasi ?
Metode ?
Fungsi input dapat digunakan di dalam sebuah skrip untuk proses pemasukan data secara
interaktif.
Selain dengan cara menuliskan nama variabelnya pada baris perintah, nilai dari suatu
variabel var juga dapat ditampilkan pada Jendela Scilab dengan fungsi disp(var), seperti
yang ditunjukkan pada beberapa contoh di bawah ini.
-->n = 100;
Input dan Output - 201
-->x = [3 5 2];
-->disp(n)
100.
-->disp(x)
3. 5. 2.
-->disp(str)
Fungsi disp juga dapat digunakan untuk menampilkan nilai dari beberapa variabel
sekaligus dengan menggunakan sintaks disp(var1, var2, ... varn), dimana var1, var2,
varn adalah nama-nama variabel. Fungsi disp akan menampilkan nilai variabel-variabel
dengan urutan yang terbalik dengan urutan daftar variabel pada argumen input.
3628800.
Untuk variabel numerik, perintah disp akan menampilkan nilainya sesuai dengan format
yang sedang digunakan.
-->x = 1/9;
-->disp(x)
0.1111111
-->format('e',10)
-->disp(x)
1.111D-01
Penanda File
Penanda file adalah angka yang digunakan oleh Scilab sebagai unit file untuk file-file yang
Input dan Output - 202
sedang digunakan pada proses pembacaan atau penulisan data. Namun terdapat sebuah
perkecualian pada penanda file, yaitu untuk angka 5 dan 6. Kedua angka tersebut telah
digunakan secara khusus oleh Scilab masing-masing sebagai penanda untuk papan-ketik
(keyboard) dan Jendela Scilab (Konsol Scilab). Kedua nilai tersebut tersimpan dalam
variabel khusus %io.
-->%io
%io =
5. 6.
Seperti penanda file lainnya, angka 5 atau %io(1) dan angka 6 atau io(2) dapat digunakan
pada proses pemasukan data maupun penulisan data.
Sebuah variabel juga dapat dicetak nama dan nilainya ke dalam suatu file dengan fungsi
print yang mempunyai sintak sebagai berikut:
print(nama_file, x1, x2, ..., xn)
Dimana nama_file adalah nama file untuk menyimpan variabel x1, x2, ..., xn. Nama file
harus ditulis dengan nama direktorinya apabila filenya tidak berada pada direktori kerja,
namun jika berada dalam direktori kerja maka cukup dengan nama filenya saja. Urutan
dari tampilan variabel yang dihasilkan oleh fungsi print adalah terbalik dengan urutan
variabel-variabel pada argumen inputnya. Fungsi print akan mencetak data numerik
sesuai dengan format numerik yang sedang digunakan.
Fungsi print juga dapat digunakan untuk menampilkan nilai sebuah variabel pada jendela
Scilab dengan menggunakan angka 6 atau %io(2) sebagai argumen nama file.
print(%io(2), x1, x2, ..., xn)
-->print(%io(2),x,y)
y =
Input dan Output - 203
999.
x =
123.
-->print('xy.txt',x,y)
Isi dari file xy.txt adalah seperti yang diperlihatkan pada gambar berikut ini.
Gambar 15.1
Pada beberapa proses input dan output dengan suatu file, kadang filenya harus dibuka
terlebih dahulu sebelum dapat digunakan dan kemudian ditutup kembali jika telah selesai
dipergunakan.
Sebuah file dapat dibuka dengan fungsi file yang mempunyai sintaks sebagai berikut:
fid = file('open', fname, status)
dimana fid adalah angka penanda file, fname adalah nama file data dan status adalah
status file. Nama file harus ditulis dengan spesifikasi lengkap apabila filenya tidak berada
pada direktori kerja dan jika berada dalam direktori kerja cukup dengan nama filenya saja.
Argumen status pada fungsi file adalah string yang menunjukkan status file yang
nilainya adalah salah satu dari beberapa string dibawah ini:
'new ' untuk file yang baru (default)
'old ' untuk file yang sudah ada,
Input dan Output - 204
Misalkan data-data yang akan disimpan ke dalam file adalah sebagai berikut:
!Scilab Maxima R !
-->R = rand(3,5)
R =
Anggap data-data tersebut akan disimpan ke dalam file data1.txt dan data2.txt, maka
dibuat terlebih dahulu file-filenya dengan perintah sebagai berikut:
-->unit1 = file('open','C:\Temp\data1.txt','new')
unit1 =
1.
-->unit2 = file('open','C:\Temp\data2.txt','new')
Unit2 =
2.
Nilai dari variabel FreeSoftware disimpan ke dalam file data1.txt dengan perintah
sebagai berikut.
-->write(1, FreeMathSoftware)
Penjelasan mengenai perintah write akan diberikan pada subbab selanjutnya. Isi dari file
data1.txt adalah seperti yang diperlihatkan pada Gambar 15.2.
Input dan Output - 205
Gambar 15.2
Berikut adalah perintah-perintah untuk menyimpan nilai variabel R pada file data2.txt,
dengan menambahkan sebuah keterangan tambahan pada baris pertama.
-->write(unit2, R)
Isi dari file data2.txt adalah seperti yang diperlihatkan Gambar 15.3.
Gambar 15.3
File-file yang telah dibuka dengan statemen file('open', ...) dapat ditutup dengan
statemen file('close',fid), dimana fid adalah penanda file. Sebagai contoh, untuk
menutup file data1.txt dapat digunakan salah satu dari statemen di bawah ini.
-->file('close', 1)
-->file('close', unit1)
Daftar file-file yang sedang digunakan dapat dilihat dengan menggunakan fungsi file
tanpa menggunakan argumen input, seperti pada contoh di bawah ini.
Input dan Output - 206
-->file()
ans =
2. 5. 6.
Angka 2 adalah penanda file untuk file, sedangkan angka 5 dan 6 adalah penanda untuk
papan ketik dan jendela Scilab.
Sebuah file juga dapat dibuka dengan fungsi mopen yang mempunyai sebagai berikut:
fid = mopen(fname, mode)
dimana fid adalah angka penanda file, fname adalah nama file data dan mode adalah string
yang menyatakan operasi pada file. Nama file harus ditulis dengan spesifikasi lengkap
apabila tidak berada pada direktori kerja namun apabila berada dalam direktori kerja
cukup dengan nama filenya saja.
Berikut ini beberapa pilihan untuk argumen mode yang terdapat pada fungsi mopen:
'r' : untuk membaca dari file, filenya harus sudah ada apabila filenya tidak ada maka
operasinya tidak dilakukan.
'w' : untuk menulis pada file baru, jika filenya sudah ada maka isinya akan dihapus
dan diganti dengan data yang baru.
'a' : untuk menambahkan data pada file, jika filenya belum ada maka filenya akan
dibuat oleh Scilab.
-->fid = mopen('C:\Temp\data3.txt','w');
Penjelasan mengenai fungsi mfprintf akan diberikan pada subbab selanjutnya. Isi file
data3.txt dari perintah di atas adalah seperti yang terlihat pada Gambar 15.4.
Input dan Output - 207
Gambar 15.4
Sebuah file yang telah dibuka dengan fungsi mopen dapat ditutup dengan fungsi
file('close', ...) atau dengan fungsi mclose sebagai berikut:
mclose(fid)
dimana fid adalah penanda file yang akan ditutup. Perintah mclose('all') akan menutup
semua file yang telah dibuka.
Informasi mengenai sebuah file yang sedang dibuka dapat diketahui dengan fungsi
dispfiles(fid), dimana fid adalah penanda file. Jika fungsi dispfiles dijalankan tanpa
argumen maka ditampilkan informasi dari semua file yang sedang dibuka. Berikut ini
ilustrasi penggunaan fungsi dispfiles.
-->f1 = file('open','C:\Temp\data1.txt','old');
-->f2 = mopen('C:\Temp\data2.txt','r');
-->f3 = mopen('C:\Temp\data3.txt','a');
-->dispfiles(f1)
|File name |Unit|Type|Options |
|------------------------------------------|
|C:\Temp\data1.txt|1 |F77 |old formatted |
-->dispfiles()
|File name |Unit|Type|Options |
|------------------------------------------|
|C:\Temp\data1.txt|1 |F77 |old formatted |
|C:\Temp\data2.txt|2 |C |r |
|C:\Temp\data3.txt|3 |C |a |
|Input |5 |F77 |old formatted |
|Output |6 |F77 |new formatted |
Input dan Output - 208
Suatu data string dapat disimpan ke dalam sebuah file teks dengan fungsi mputl yang
mempunyai sebagai berikut:
mputl(str, nama_file)
dimana str adalah nama string yang akan ditulis dan nama_file adalah nama dari file yang
digunakan untuk menyimpan string. Penggunaan fungsi mputl tidak memerlukan filenya
untuk dibuka terlebih dahulu.
Data string yang tersimpan suatu file teks dapat dibaca dengan menggunakan fungsi mgetl
yang mempunyai sintak sebagai berikut:
mgetl(nama_file, n)
dimana nama_file adalah nama dari file dimana string tersimpan, dan n adalah jumlah
baris yang akan dibaca. Argumen n bersifat opsional jika tidak digunakan maka semua
baris string akan dibaca.
-->mputl(FreeMathSoftware, 'C:\Temp\Teks1.txt');
-->clear
-->S = mgetl('C:\Temp\Teks1.txt')
S =
!Scilab !
! !
!Maxima !
! !
!R !
!Scilab !
! !
!Maxima !
Isi dari file teks1.txt adalah seperti yang telah diperlihatkan pada gambar 15.2
Input dan Output - 209
Fungsi write dapat digunakan untuk menyimpan nilai suatu variabel ke dalam sebuah
sebuah file atau untuk menampilkannya pada jendela Scilab. Sintaks dari fungsi write
adalah sebagai berikut:
write (nama_file, var, fmt)
dimana nama_file adalah penanda file atau nama file, var adalah nama variabel dan fmt
adalah format penulisan yang digunakan. Argumen fmt bersifat optional, apabila tidak
dipergunakan maka data akan ditulis dengan format default.
Format penulisan data pada fungsi write adalah serupa dengan format pada bahasa
Fortran. Berikut ini karakter-karakter yang dapat digunakan untuk format penulisan data:
/ baris baru
i[w] bilangan integer dengan lebar w karakter
f[w.d] bilangan desimal dengan lebar w karakter yang memiliki d digit setelah titik
desimal, disarankan nilai w ≥ (d + 3).
e[w.d] bilangan desimal dengan notasi sains E, untuk menyatakan pangkat dari 10,
dengan lebar w karakter yang memiliki d digit setelah titik desimal, disarankan
nilai w ≥ (d + 7).
[n]x spasi sebanyak n.
t[n] meletakkan kursor pada posisi n.
Format bilangan integer dan desimal dapat diulangi beberapa kali dengan meletakan
jumlah perulangan di depannya. Jika terdapat beberapa format maka tanda koma
digunakan sebagai pemisah antara format yang satu dengan format yang lain. Format yang
berulang dapat dibuat dengan menggunakan tanda kurung untuk melingkupi format
tersebut dan dengan jumlah perulangan di depannya.
Contoh penggunaan fungsi write untuk menuliskan data pada sebuah file adalah sebagai
berikut:
Input dan Output - 210
-->write('x.dat',x,'(3(f6.2,2x))')
Gambar 15.5
Berikut ini adalah contoh penulisan nilai variabel pada jendela Scilab dengan fungsi write.
-->write(6,x,'(3(4x,f7.3))')
-0.820 0.400 -0.410
-0.180 -0.860 -0.470
-0.550 -0.310 0.780
Pembacaan data dari suatu file maupun dari papan ketik dengan menggunakan format
Fortran dapat dilakukan dengan menggunakan fungsi read sebagai berikut:
x = read (nama_file, m, n, fmt)
dimana nama_file adalah penanda file atau nama file data, m dan n adalah ukuran matrik
data serta fmt adalah format penulisan yang digunakan. Jika tidak diketahui jumlah baris
data maka gunakan nilai m=-1. Argumen fmt bersifat opsional dan apabila digunakan maka
formatnya harus sesuai dengan format yang digunakan pada waktu penulisan data.
Contoh pembacaan dari sebuah file dengan fungsi read adalah sebagai berikut.
-->xbaru = read('x.dat',3,3)
xbaru =
-->x = read('x.dat',-1,3)
x =
Berikut ini contoh penggunaan fungi read untuk membaca data dari papan ketik.
-->mat
mat =
3.4 7.1
9.2 8.5
Pada pembacaan data melalui papan ketik dengan fungsi read, setelah statemennya
dijalankan maka di bawahnya akan muncul tanda -->. Setelah tanda ini, data-data harus
dimasukkan secara perbaris sesuai dengan dimensi datanya.
Fungsi mfprintf juga dapat digunakan untuk menyimpan nilai suatu variabel ke dalam
sebuah sebuah file atau untuk menampilkan nilai suatu variabel pada Jendela Scilab.
Sintaks dari fungsi mfpintf adalah sebagai berikut:
mfprintf(nama_file, fmt, var1, var2, .., varn)
dimana nama_file adalah nama file data, fmt adalah format penulisan data, serta var1,
var2, varn adalah nama-nama variabel yang ingin disimpan pada file data.
Format penulisan data pada fungsi mfprinft adalah serupa dengan format pada bahasa C.
Berikut ini karakter-karakter yang dapat digunakan pada penulisan format data:
\n baris baru
%[w]i bilangan integer yang menpunyai lebar w karakter
%[w.d]f bilangan dengan notasi desimal yang mempunyai lebar w karakter dan d digit
setelah titik desimal, disarankan nilai w ≥ (d + 3).
%[w.d]e bilangan dengan notasi eksponensial e, untuk menyatakan pangkat dari 10,
Input dan Output - 212
yang mempunyai lebar w karakter dan d digit setelah titik desimal, disarankan
nilai w ≥ (d + 7).
%[w.d]g bilangan dengan notasi desimal atau notasi eksponensial e jika notasi desimal
tidak mencukupi untuk menyatakan bilangan.
%s string
%c karakter
\t tabulasi
Pembacaan variabel-variabel yang tersimpan pada suatu file juga dapat dilakukan dengan
perintah mfscanf yang mempunyai sintak sebagai berikut:
[n, v_1, ... v_n] = mfscanf(r, nama_file, fmt)
L = mfscanf(r, nama_file, fmt)
dimana r adalah jumlah berapa kali format pembacaan data digunakan, nama_file adalah
nama file data, fmt adalah format pembacaan data dalam sintaks bahasa C, n menyatakan
jumlah data yang dibaca atau berupa -1 jika tidak ada data yang dibaca, v_1, ... v_n adalah
nama-nama variabel yang dibaca, serta L adalah suatu matrik untuk data yang homogen
atau suatu list untuk data yang tak homogen. Apabila argumen r tidak digunakan maka
format pembacaan data hanya akan dipakai sekali. Sintaks format pembacaan data adalah
sama dengan format penulisan data.
-->fd = mopen('Xc.dat','w');
-->mclose(fd);
-->fd = mopen('Xc.dat','r');
Input dan Output - 213
Nilai dari suatu variabel juga dapat ditampilkan pada Jendela Scilab dengan fungsi mprintf.
Fungsi ini serupa dengan fungsi disp namun mempunyai kelebihan yaitu format penulisan
variabelnya dapat diatur sesuai dengan yang kita kehendaki. Sintaks dari fungsi mprintf
adalah sebagai berikut
mprintf(fmt, var1, var2, .., varn)
dimana fmt adalah format penulisan yang serupa dengan format bahasa C, serta var1,
var2, varn adalah nama-nama variabel yang ingin ditampilkan pada jendela Scilab.
-->x = [0 5 10 15 20];
-->for i = x
--> mprintf(" x = %6.2f, exp(x) = %12.6g\n", i,exp(i))
-->end
x = 0.00, exp(x) = 1
x = 5.00, exp(x) = 148.413
x = 10.00, exp(x) = 22026.5
x = 15.00, exp(x) = 3.26902e+006
x = 20.00, exp(x) = 4.85165e+008
Suatu data matrik dapat disimpan secara langsung pada suatu file tanpa harus membuka
filenya terlebih dahulu dengan fungsi fprintfMat yang mempunyai sintak sebagai berikut
fprintfMat(nfile, M, fmt, teks)
dimana nfile adalah nama file data, M adalah data matrik, fmt dalah format penulisan, teks
adalah baris teks pertama yang akan dituliskan pada file data. Argumen format dan teks
adalah argumen-argumen yang bersifat opsional.
Input dan Output - 214
-->R33 = rand(3,3)
R33 =
-->fprintfMat('C:\Temp\dataR33a.txt', R33)
Isi dari file dataR33a.txt dan dataR33b.txt masing-masing adalah seperti yang terlihat pada
gambar-gambar di bawah ini.
Gambar 15.6
Gambar 15.7
Suatu data matrik yang tersimpan pada suatu file dapat dibaca dengan fungsi fscanfMat
yang mempunyai sintaks sebagai berikut
[M, teks] = fscanfMat(nama_file)
dimana nama_file adalah nama file data, M adalah data matrik, dan teks adalah string yang
terdapat pada baris pertama dari file data.
Input dan Output - 215
-->X = fscanfMat('C:\Temp\dataR33a.txt')
X =
-->[y,t] = fscanfMat('C:\Temp\dataR33b.txt')
t =
Bilangan acak
y =
Semua variabel yang terdapat pada ruang kerja dapat disimpan pada suatu file dengan
format biner dengan menggunakan fungsi save,
save("nama_file")
dimana nama_file adalah nama file data. Untuk menyimpan beberapa variabel saja,
(misalnya var1, var2 dan var3) maka sintaksnya adalah
save("nfile", "var1", "var2", "var3").
Untuk membaca semua variabel yang tersimpan dalam suatu file data yang mempunyai
format biner dapat dilakukan dengan fungsi load,
load("nama_file"),
dimana nama_file adalah nama file data. Untuk mengambil nilai dari beberapa variabel saja,
misalnya variabel var1 dan var2, maka perintahnya adalah sebagi berikut
load("nfile", "var1", "var2").
-->X = rand(3,3)
X =
-->Y = ones(3,3);
-->Z = diag(1:4)
Z =
1. 0. 0. 0.
0. 2. 0. 0.
0. 0. 3. 0.
0. 0. 0. 4.
-->load('C:\Temp\XYZ.dat');
-->X
X =
-->Y
Y =
1. 1. 1.
1. 1. 1.
1. 1. 1.
-->load('C:\Temp\XYZ.dat','Z');
-->Z
Z =
1. 0. 0. 0.
0. 2. 0. 0.
0. 0. 3. 0.
0. 0. 0. 4.
-->X
!--error 4
Undefined variable: X
Terlihat bahwa perintah terakhir menghasilkan pesan kesalahan. Hal ini karena variabel
yang dipanggil kembali ke dalam ruang kerja pada perintah sebelumnya hanya variabel Z
saja.
Input dan Output - 217
Selain dengan menggunakan fungsi save dan load, penyimpanan variabel-variabel yang
terdapat pada ruang kerja ke dalam sebuah file dengan format biner dan pembacaan file
data dengan format biner juga dapat kita lakukan melalui menu File Save enviroment
dan File Load enviroment.
Bab 16
Grafik Dua Dimensi dan Tiga Dimensi
Suatu grafik diperlukan sebagai visualisasi dari sebuah fungsi matematika, sekumpulan
data atau hasil suatu perhitungan. Di dalam Scilab, pembuatan suatu grafik dapat dilakukan
dengan mudah karena Scilab telah menyediakan fitur-fitur yang relatif lengkap untuk
pembuatan suatu grafik dua dimensi maupun tiga dimensi. Grafik yang dihasilkan akan
ditampilkan pada jendela grafik yang terpisah dari jendela Scilab, seperti yang terlihat pada
gambar di bawah ini.
Sebuah grafik tunggal dari sekumpulan titik atau pasangan data dapat dibuat dengan
menggunakan fungsi plot dan plot2d dengan sintak sebagai berikut:
plot(xdata, ydata)
plot2d(xdata, ydata)
dimana xdata dan ydata adalah dua buah vektor yang mempunyai dimensi sama.
-->x = linspace(-5,5,2000);
-->y = (x-1).*(x-2).*(x+3).*(x-4);
Kurva yang dihasilkan oleh fungsi plot2d adalah seperti pada gambar di bawah ini.
Gambar 16.2
Dalam pembuatan sebuah grafik, Scilab akan menghubungkan dua titik yang berdekatan
sebagai garis lurus. Oleh karena itu untuk mendapatkan sebuah grafik yang halus maka
diperlukan titik dalam jumlah yang cukup banyak.
Jendela Grafik - 220
Argumen xdata dalam fungsi plot dan plot2d bersifat opsional dan jika tidak digunakan
maka nilainya akan diasumsikan sebagai sebuah vektor inkremental 1:n, dimana n adalah
panjang vektor ydata, seperti pada contoh di bawah ini.
-->clf()
Gambar 16.3
Pada contoh di atas, fungsi clf digunakan untuk menghapus isi dari jendela grafik yang
sedang aktif. Hal tersebut perlu dilakukan karena karena fungsi plot dan plot2d akan
menambahkan grafik yang akan dibuat pada jendela grafik yang aktif. Cara lain untuk
menghapus sebuah grafik yaitu melalui menu Edit Clear figure yang terdapat pada
jendela grafik.
Jendela Grafik - 221
Grafik yang dihasilkan oleh fungsi plot2d merupakan sebuah grafik polos tanpa dilengkapi
dengan judul grafik dan label pada setiap sumbunya. Fungsi xtitle dapat digunakan untuk
menambahkan judul grafik, label pada sumbu horisontal dan sumbu vertikal. Sintak dari
fungsi xtitle yaitu:
xtitle(jdl, lbl_x, lbl_y)
dimana jdl, lbl_x dan lbl_y masing-masing adalah string yang menyatakan judul grafik,
label pada sumbu horisontal dan label pada sumbu vertikal.
Ilustrasi penggunaan fungsi xtitle dapat dilihat pada contoh di bawah ini.
-->x = linspace(-4,4,1000);
-->y = exp(-x.^2/2);
-->clf()
-->plot2d(x,y)
Gambar 16.4
Selain fungsi xtitle, kita juga dapat menggunakan fungsi title, xlabel dan ylabel
masing-masing untuk membuat judul grafik, label pada sumbu horisontal dan sumbul
Jendela Grafik - 222
Berikut ini adalah contoh penggunaan dari fungsi title, xlabel dan ylabel.
-->x = -5:0.01:5;
-->clf();
-->plot2d(x,gx)
-->xlabel('x')
-->ylabel("g(x)")
Gambar 16.5
Jendela Grafik - 223
Fungsi plot2d juga dapat digunakan untuk membuat sebuah grafik yang terdiri dari
beberapa kurva. Kurva-kurva yang dibentuk dari pasangan setiap vektor kolom yang
terdapat pada matrik Y dengan vektor x dapat dibuat dengan statemen sebagai berikut:
plot(x,Y)
plot2d(x,Y)
Selain dengan cara di atas, pembuatan sebuah grafik yang terdiri dari beberapa kurva
sekaligus juga dapat dibuat dengan sintaks sebagai berikut.
plot(x, [y1 y2 ... yn])
plot2d(x, [y1 y2 ... yn])
dimana x, y1, y2, yn merupakan vektor-vektor kolom dengan jumlah elemen yang sama.
Berikut ini adalah contoh pembuatan sebuah grafik yang terdiri dari beberapa kurva.
-->x = linspace(-1,1,61)';
-->xtitle('Kurva majemuk','x','y')
Gambar 16.6
Jendela Grafik - 224
Suatu grafik yang terbentuk dari sejumlah pasangan data yang memiliki jumlah titik yang
sama namun nilai titik-titiknya pada sumbu horisontal berbeda dapat dibuat dengan cara
sebagai berikut
plot([x1 x2 ... ], [y1 y2 ... ])
plot2d([x1 x2 ... ], [y1 y2 ... ]).
-->t = linspace(0,2*%pi,100)';
Gambar 16.7
Dalam pembuatan grafik, bentuk dan warna garis dapat ditentukan secara otomatis oleh
Scilab. Untuk mendapatkan grafik dengan bentuk dan warna garis sesuai dengan yang kita
inginkan dapat dilakukan dengan menggunakan argumen-argumen opsional yang terdapat
pada fungsi plot atau plot2d.
Kurva-kurva yang dibuat dengan fungsi plot2d dapat diatur bentuk dan warnanya dengan
sintaks sebagai berikut:
plot2d([x1 x2 ... ], [y1 y2 ... ], style=val)
Jendela Grafik - 225
dimana val adalah suatu vektor baris yang menyatakan corak untuk setiap kurva. Argumen
style bersifat opsional dan jika tidak digunakan maka warnanya akan diatur secara
otomatis. Nilai argumen style dapat berupa bilangan bulat positif untuk menyatakan
warna garis atau berupa bilangan bulat negatif dan nol untuk menyatakan simbol penanda
dari titik-titik kurva. Kode untuk warna garis adalah angka 1 sampai 32, dimana setiap
angka menyatakan sebuah warna tertentu seperti yang ditunjukkan pada Gambar 16.8.
Kode yang menyatakan simbol untuk penanda titik-titik kurva adalah seperti yang
diperlihatkan pada gambar 16.9.
-->x = linspace(-1,1,500)';
-->xtitle('','x','y')
Jendela Grafik - 226
Gambar 16.10
Berikut ini contoh pengaturan simbol untuk titik-titik kurva dengan fungsi plot2d.
Gambar 16.11
Jendela Grafik - 227
Untuk grafik yang dibuat dengan fungsi plot, pengaturan corak dan warna garisnya dapat
dilakukan dengan sintak sebagai berikut:
plot(x1, y1, fmt1, x2, y2, fmt2, ...)
dimana x1, y1 dan x2, y2 adalah vektor-vektor data atau titik-titik yang akan diplot, fmt1
dan fmt2 adalah string-string yang menyatakan corak garis, penanda dan warna garis.
Argumen fmt1, fmt2 bersifat opsional apabila tidak digunakan maka dalam pembuatan
grafik akan digunakan format default. Susunan string-string yang digunakan untuk
mengatur corak garis, penanda dan warna garis dalam argumen fmt1, fmt2 dapat dibuat
dengan urutan yang sembarang.
Berikut ini kode string untuk mengatur warna garis dengan fungsi plot.
r Merah
g Hijau
b Biru
c Cyan
m Magenta
y Kuning
k Hitam
w Putih
Berikut ini kode string untuk mendefinisikan corak garis dengan fungsi plot.
Berikut in kode string yang dapat digunakan sebagai penanda titik-titik kurva dengan
fungsi plot.
+ Tambah
o Bulat
* Asterisk (*)
. Titik
x Silang
s atau square Kotak
d atau diamond Diamond
^ Segitiga
V Segitiga
> Segitiga
< Segitiga
'pentagram' Pentagram
Berikut ini contoh pengaturan corak dan warna garis serta penanda pada titik-titik kurva
dengan fungsi plot.
-->xdat = (0:10)';
-->yfit = -3*xdat + 5;
-->clf();
Gambar 16.12
Legenda Grafik
Pada sebuah grafik terdiri dari beberapa kurva maka sebuah legenda dapat ditambahkan
pada grafik untuk memperjelas dan memudahkan pembacaan kurva-kurva yang ada pada
grafik tersebut. Legenda grafik dapat ditambahkan dengan fungsi legend sebagai berikut:
legend(str1, str2, ..., opt, boxed)
legend([str1, str2, ...], opt, boxed)
Penjelasan argumen input pada fungsi legend adalah sebagai berikut: str1, str2 adalah
string-string untuk legenda kurva, opt adalah argumen opsional untuk posisi legenda dan
boxed adalah argumen opsional untuk tampilan kotak untuk legenda. Berikut ini pilihan-
pilihan untuk argumen opt.
1: letak legenda pada pojok kanan atas.
2: letak legenda pada pojok kiri atas.
3: letak legenda pada pojok kiri bawah.
4: letak legenda pada pojok kanan bawah
5: penempatan letak legenda secara interaktif dengan mouse (default).
Jendela Grafik - 230
Nilai pilihan untuk argumen boxed adalah %t (default) untuk menampilkan kotak di
sekeliling legenda atau %f untuk tidak menampilkan kotak di sekeliling legenda.
-->xdata = (0:10)';
-->yfit = -3*xdata + 5;
-->xtitle('','x','y');
Gambar 16.13
Selain skala linier, sumbu horisontal atau sumbu vertikal pada suatu grafik juga dapat
menggunakan skala logaritmik. Pengaturan skala sumbu-sumbu grafik dapat dilakukan
melalui argumen opsional logflag yang terdapat pada fungsi plot2d dengan sintaks
sebagai berikut:
plot2d(x,y, logflag=skl)
Jendela Grafik - 231
dimana skl adalah tanda untuk menyatakan skala yang digunakan pada sumbu horisontal
dan sumbu vertikal. Nilai argumen skl adalah salah satu string sebagai berikut: "nn", "nl",
"ln" dan "ll". Karakter "n" dan "l" masing-masing untuk menyatakan skala linier dan
skala logaritmik. Karakter pertama menyatakan skala pada sumbu horisontal dan karakter
kedua menyatakan skala pada sumbu vertikal. Nilai default untuk argumen logflag adalah
"nn".
Gambar 16.14
-->clf()
-->title("logflag = ln")
Jendela Grafik - 232
Gambar 16.15
Sumbu-sumbu grafik dapat diatur tampilan dan posisinya dengan menggunakan argumen-
argumen opsional yang terdapat pada fungsi plot2d dengan sintak sebagai berikut:
plot2d(x, y, rect=[xmin,ymin,xmax,ymax], frameflag=vfr, axesflag=vax)
dimana rec adalah batas nilai minimum dan maksimum pada sumbu horisontal (xmin,
xmax) dan sumbu vertikal (ymin, ymax), frameflag adalah pengaturan untuk nilai range
aktual pada sumbu horisontal dan sumbu vertikal, kemudian axesflag adalah pengaturan
letak dari sumbu-sumbu grafik.
4: nilai range aktual dihitung dari nilai minimum dan maksimum dari data-data yang diberikan
dan nilainya dibesarkan untuk mendapatkan skala isometrik.
5: nilai range aktual ditentukan oleh nilai argumen rect dan nilainya dibesarkan untuk
mendapatkan tampilan label-label sumbu yang bagus.
6: dihitung dari nilai minimum dan maksimum dari data-data yang diberikan dan nilainya
dibesarkan untuk mendapatkan tampilan label-label sumbu yang bagus.
7: serupa dengan frameflag=1 namun grafik yang sudah ada diplot kembali dengan
menggunakan skala yang baru.
8: serupa dengan frameflag=2 namun grafik yang sudah ada diplot kembali dengan
menggunakan skala yang baru.
9 (default): serupa dengan frameflag=8 namun nilai range pada sumbu horisontal dan
sumbu vertikal dibesarkan untuk mendapatkan tampilan label-label sumbu yang bagus.
-->t = linspace(0,2*%pi,100)';
-->x = -cos(3*t).*cos(t);
-->y= -cos(3*t).*sin(t);
-->clf() ; plot2d(x,y,axesflag=0)
Gambar 16.16
-->t = linspace(0,2*%pi,100);
-->x = 3*cos(t);
-->y = 2*sin(t);
-->clf()
-->plot2d(x,y,rect=[-4,-3,4,3],frameflag=3,axesflag=4)
Gambar 16.17
Jendela Grafik - 235
Kisi-kisi (grid)
Pada suatu grafik juga dapat ditambahkan kisi-kisi atau grid dengan menggunakan
statemen sebagai berikut
xgrid(style)
dimana style adalah kode warna grid. Kode-kode warna yang dapat digunakan adalah
sama seperti kode warna untuk corak garis. Argumen style bersifat opsional apabila tidak
dipergunakan maka nilainya adalah 1.
-->t = linspace(-4*%pi,4*%pi,400)';
-->clf();
-->plot2d(x,y,style=5,rect=[-3,-4,4,3],frameflag=4)
-->xgrid(17);
-->xtitle('Spiral Archimedes')
Gambar 16.18
Jendela Grafik - 236
Kurva yang dihasilkan oleh fungsi plot2d dibuat dengan cara menghubungkan dua titik
yang berdekatan sebagai suatu segmen garis lurus. Selain dengan cara tersebut, Scilab juga
menyediakan beberapa cara yang lain dalam pembuatan kurva sebagai berikut:
plot2d2: kurva diplot seperti fungsi tangga.
plot2d3: kurva dibuat dengan cara menghubungkan setiap titik data dengan garis
vertikal ke sumbu horisontal.
plot2d4: kurva diplot dengan cara sama yang seperti pada fungsi plot2d namun
dengan tambahan anak panah yang menghubungkan dua titik yang berdekatan.
-->x = linspace(0,%pi,5);
-->title("plot2d2")
-->title('Prob Binomial(20,1/2)')
Jendela Grafik - 237
-->title("plot2d4")
Grafik dari sebuah fungsi fx yang mempunyai variabel tunggal juga dapat dibuat dengan
fungsi fplot2d(x,fx), dimana x adalah suatu vektor yang elemen-elemennya merupakan
titik-titik pada sumbu horisontal dari fungsi fx. Argumen-argumen opsional pada fungsi
fplot2d adalah sama seperti argumen-argumen opsional pada fungsi plot2d.
-->function y = g(x)
--> y = (0.5 - 1.5*x).*exp(-0.5*x)
-->endfunction
-->x = linspace(0,10,1000);
-->xtitle("","x","g(x)")
Gambar 16.22
Grafik Polar
Selain dengan sumbu kartesian (x-y), suatu grafik juga dapat dibuat dengan koordinat polar
dengan menggunakan fungsi polarplot yang mempunyai sintak sebagai berikut:
polarplot(theta, rho, style, leg)
dimana theta dan rho adalah vektor yang berisi sudut dan radius dari titik-titik data, style
adalah argumen opsional untuk mengatur corak dari setiap kurva, serta leg adalah
Jendela Grafik - 239
-->t = linspace(0,8*%pi,10000);
-->clf()
Gambar 16.23
Suatu grafik yang telah dibuat dapat diedit secara interaktif melalui menu Edit Axes
properties yang terdapat pada jendela grafik. Apabila menu tersebut dijalankan maka
akan muncul sebuah jendela Axes Editor seperti yang ditunjukkan pada Gambar 16.24.
Jendela Grafik - 240
Melalui jendela Axes Editor dapat dilakukan berbagai macam operasi pengeditan grafik
seperti menambahkan judul grafik, menambahkan label pada sumbu-sumbu grafik,
mengatur format huruf, menambahkan kisi-kisi, menambahkan kotak di sekililing grafik
dan lain sebagainya.
Misalkan kita mempunyai sebuah grafik polos seperti yang terdapat pada Gambar 16.25
yang dihasilkan oleh statemen-statemen sebagai berikut.
-->plot(t,y)
Untuk menjadikan grafik polos pada Gambar 16.25 lebih informatif dan menarik maka
dapat ditambahkan judul grafik, label pada sumbu-sumbunya, atau kisi-kisi, sehingga
diperoleh grafik seperti yang terdapat pada Gambar 16.29 dan Gambar 16.31.
Jendela Grafik - 241
Gambar 16.25
Judul Grafik "Peluruhan Radioaktif" dibuat dengan mengetikkan string tersebut pada
kotak teks dalam subform Title yang terdapat pada form Axes Editor (lihat Gambar 16.26).
Setelah itu, dapat dirubah format hurufnya, pada contoh ini digunakan huruf SansSerif
dengan format tebal dan miring, ukuran huruf 2 serta warna huruf merah.
Gambar 16.26 Contoh Pengeditan Judul Grafik melalui jendela Graphic Editor
Jendela Grafik - 242
Label "waktu” dan "massa tertinggal" pada sumbu horisontal dan sumbu vertikal dibuat
cara mengetikkan kedua string tersebut pada kotak teks dalam subform X dan Y, (lihat
Gambar 16.27 dan Gambar 16.28).
Gambar 16.27 Contoh Pengeditan Label Sumbu Horisontal dengan Graphic Editor
Gambar 16.28 Contoh Pengeditan Label Sumbu Vertikal dengan Graphic Editor
Jendela Grafik - 243
Gambar 16.29 merupakan gambar yang dihasilkan dari operasi pengeditan yang telah kita
lakukan.
Gambar 16.29
Kisi-kisi grafik pada sumbu horisontal dan sumbu vertikal dapat ditambahkan melalui
jendela Axes Editor dengan menggunakan tombol geser Grid Color yang terdapat pada
bagian Axis Options yang terdapat pada form X dan Y. Warna grid dapat diperoleh dengan
cara menggeser tombol geser Grid Color. Gambar 16.30 adalah ilustrasi penambahan kisi-
kisi pada sumbu horisontal. Selanjutnya, penambahan kisi-kisi pada sumbu vertikal dapat
dilakukan dengan cara yang serupa. Pada contoh ini, digunakan warna biru sebagai warna
kisi-kisi. Gambar 16.31 adalah gambar yang dihasilkan oleh proses pengeditan ini.
Jendela Grafik - 244
Gambar 16.31
Jendela Grafik - 245
Melalui jendela Axes Editor kita juga dapat merubah skala pada sumbu-sumbu grafik.
Sebagai contoh, skala pada sumbu vertikal dapat dirubah menjadi skala logaritmik dengan
mengklik pilihan log yang terdapat di dalam kelompok Axis Options pada form Y (lihat
Gambar 16.32). Grafik yang dihasilkan oleh proses pengeditan ini adalah seperti yang
ditunjukkan pada Gambar 16.33.
Untuk melakukan pengeditan warna garis, corak garis atau penanda untuk titik-titik pada
kurva kita dapat melakukannya melalui jendela Polyline Editor. Jendela tersebut dapat
ditampilkan dengan mengklik object Axis yang terdapat pada bagian kiri dari jendela
Graphic Editor pada kelompok Object Browser, kemudian klik Compound dan setelah itu
pilih Polyline (Axes Compound Polyline). Setelah cara tersebut dilakukan maka akan
muncul sebuah jendela seperti yang ditunjukkan pada Gambar 16.34. Sebagai contoh, kita
dapat merubah garis yang terdapat pada Gambar 16.33 menjadi garis berwarna hijau
dengan tebal 3 seperti yang ditunjukkan pada Gambar 16.35. Pengeditan ini dapat
dilakukan melalui kotak pilihan Line dan tombol geser Foreground yang terdapat dalam
form style (lihat Gambar 16.34).
Jendela Grafik - 246
Gambar 16.33
Gambar 16.34
Jendela Grafik - 247
Gambar 16.35
Sebuah jendela grafik dapat dibagi menjadi sejumlah jendela grafik yang lebih kecil
(subgrafik) dengan fungsi subplot(m,n,j), dimana m dan n menyatakan jumlah jendela
subgrafik perbaris dan jendela subgrafik perkolom, serta j adalah nomer jendela subgrafik.
Urutan nomer jendela subgrafik dimulai dari kiri ke kanan dan dari atas ke bawah.
Berikut ini contoh penggunaan fungsi subplot untuk membagi jendela grafik menjadi
jendela subgrafik sebanyak 1×2.
-->clf()
-->plot2d(x,y,style=5,logflag="ln"), xtitle("logflag=""ln""")
-->plot2d(x,y,style=2,logflag="ll"), xtitle("logflag=""ll""")
Jendela Grafik - 248
Berikut ini contoh penggunaan fungsi subplot untuk membagi jendela grafik menjadi
jendela subgrafik sebanyak 2×2.
-->t=linspace(-2*%pi,2*%pi,400)';
-->x1=cos(t); y1=sin(t);
-->x2=(1+cos(t)).*cos(t); y2=(1+cos(t)).*sin(t);
-->x3=cos(3*t); y3=sin(5*t);
-->x4=-cos(3*t).*cos(t); y4=-cos(3*t).*sin(t);
-->plot2d(x1,y1,style=2,frameflag=4), xtitle('Circle')
-->plot2d(x2,y2,style=3), xtitle('Heart')
-->plot2d(x3,y3,style=5), xtitle('Lissajous')
-->plot2d(x4,y4,style=6), xtitle('Trifolium')
Visualisasi data atau fungsi juga dapat ditampilkan pada lebih dari satu jendela grafik,
seperti yang diperlihatkan pada Gambar 16.38. Gambar tersebut diperoleh dengan
menggunakan perintah-perintah sebagai berikut:
Jendela Grafik - 250
-->x = linspace(-8,8,50); y = x;
-->[X,Y] = ndgrid(x,y);
-->Z = sin(R)./R;
-->plot3d1(x,y,Z)
-->f.color_map = jetcolormap(50);
-->colorbar(min(Z),max(Z))
-->scf(1); t = linspace(0,2*%pi,400);
-->polarplot(sin(3*t),cos(5*t), style=2)
Fungsi scf(n) adalah fungsi yang dapat digunakan untuk membuat sebuah jendela grafik
baru atau untuk mengaktifkan sebuah sebuah jendela grafik yang telah terbuka. Argumen n
pada fungsi scf adalah nomer jendela grafik.
Suatu kurva parametrik tiga dimensi dapat dibuat dengan menggunakan fungsi
param3d(x,y,z), dimana x, y, z adalah koordinat dari titik-titik kurva. Berikut ini ilustrasi
penggunaan fungsi param3d.
-->t = linspace(0,10*%pi,1000);
-->x = t.*cos(t);
-->y = t.*sin(t);
-->z = t;
Sebuah grafik permukaan tiga dimensi dapat dibuat dengan fungsi plot3d atau plot3d1.
Kedua fungsi tersebut dapat dijalankan dengan sintaks sebagai berikut:
plot3d(x, y, Z)
plot3d1(x, y, Z)
Fungsi plot3d akan menghasilkan sebuah grafik tiga dimensi dengan warna tunggal.
Fungsi plot3d1 akan menghasilkan sebuah grafik tiga dimensi disertai dengan gradasi
warna sebagai pembeda nilai elevasi.
Argumen x dan y adalah vektor-vektor baris yang elemen-elemennya adalah titik grid pada
sumbu-x dan sumbu-y, Z adalah suatu matrik yang berukuran m × n, (m adalah jumlah
elemen vektor x dan n adalah elemen vektor y). Selanjutnya elemen-elemen Z(i,j) adalah
nilai-nilai permukaan dari pasangan titik x(i) dan y(j).
Dalam pembuatan matrik Z biasanya harus dijalankan terlebih dahulu fungsi ndgrid untuk
membuat matrik titik grid dari vektor x dan vektor y. Sintak dari fungsi ndgrid adalah
sebagai berikut:
[XN,YN] = ndgrid(x, y)
-->x = -1:0.5:1
x =
- 1. - 0.5 0. 0.5 1.
-->y = -1:0.4:1
y =
-->[U,V] = ndgrid(x,y);
Jendela Grafik - 253
-->U
U =
- 1. - 1. - 1. - 1. - 1. - 1.
- 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5
0. 0. 0. 0. 0. 0.
0.5 0.5 0.5 0.5 0.5 0.5
1. 1. 1. 1. 1. 1.
-->V
V =
Contoh visualisasi data dengan menggunakan fungsi plot3d adalah sebagai berikut.
-->x = linspace(0,2*%pi,50); y = x;
-->[X,Y] = ndgrid(x,y);
-->Z = cos(X).*cos(Y);
-->clf();
Gambar 16.41 adalah sebuah contoh visualisasi data dengan fungsi plot3d1. Gambar
tersebut dihasilkan dengan menggunakan statemen-statemen sebagai berikut:
-->clf();
-->x = linspace(-8,8,50); y = x;
-->[X,Y] = ndgrid(x,y);
-->Z = sin(R)./R;
-->f = scf();
-->f.color_map = jetcolormap(50);
-->colorbar(min(Z),max(Z))
Tampilan pada Gambar 16.40 dan Gambar 16.41 adalah berbeda dengan tampilan default
gambar yang dihasilkan oleh fungsi plot3d dan plot3d1. Sebagai ilustrasi, tampilan yang
default dari Gambar 16.41 adalah seperti pada gambar di bawah ini.
Tampilan gambar dengan sudut pandang yang lain dapat dilakukan melalui form
Viewpoint yang terdapat pada jendela Axes Editor (Gambar 16.43). Setelah dilakukan
pengaturan tersebut maka tampilan pada Gambar 16.42 akan berubah menjadi tampilan
seperti pada Gambar 16.41.
Selain melalui jendela Axes Editor, pengaturan sudut pandang juga dapat dilakukan melalui
menu Tools 2D/3D Rotation yang terdapat pada jendela Graphics.
Jendela Grafik - 256
Gambar 16.44
Gradasi warna yang digunakan dalam visualisasi data dapat diatur dengan fungsi colormap.
Terdapat 15 macam gradasi warna yang disediakan oleh Scilab yaitu: autumn, bone, cool,
copper, gray, hot, HSV, jet, ocean, pink, rainbow, spring, summer, white dan winter.
Ilustrasi untuk setiap jenis colormap dapat dilihat melalui demonstrasi yang disediakan oleh
Scilab (Gambar 16.45).
Sebuah tipe gradasi warna dapat dijalankan dengan sintaks umum sebagai berikut:
f = scf();
[statemen-statemen untuk visualiasi tiga dimensi]
f.color_map = [tipe]colormap(n);
dimana n adalah ukuran colormap, [tipe]colormap adalah tipe gradasi warna, misal:
jetcolormap untuk gradasi warna dengan warna jet, coolcolormap untuk gradasi warna
dengan warna cool, dan seterusnya.
Untuk menampilkan sebuah legenda mengenai nilai yang direpresentasikan oleh suatu
warna kita dapat menggunakan fungsi colorbar(zmin,zmax). Argumen zmin dan zmax
adalah nilai minimun dan maksimum yang akan ditampilkan pada legenda.
Jendela Grafik - 257
Sebuah grafik permukaan tiga dimensi juga dapat dibuat dengan fungsi surf yang
mempunyai sintaks sebagai berikut
surf(x, y, Z)
Argumen x dan y masing-masing adalah vektor-vektor baris yang menyatakan titik-titik
grid pada sumbu-x dan sumbu-y, Z adalah suatu matrik yang berukuran m × n (m adalah
jumlah elemen vektor x dan n adalah elemen vektor y). Selanjutnya elemen Z(i,j) adalah
nilai-nilai permukaan dari pasangan titik x(j) dan y(i).
Dalam pembuatan matrik Z yang diplot dengan fungsi surf biasanya dijalankan terlebih
dahulu fungsi meshgrid untuk membuat titik-titik grid pada sumbu x dan sumbu y. Sintaks
dari fungsi meshgrid yaitu:
Matrik XM dihasilkan dengan cara melakukan operasi konkatenasi baris sebanyak m kali
terhadap vektor x. Matrik YM dihasilkan dengan cara melakukan operasi konkatenasi kolom
sebanyak n kali terhadap transpose vektor y.
-->x = -1:0.5:1;
-->y = -1:0.4:1;
-->[X,Y] = meshgrid(x,y)
Y =
- 1. - 1. - 1. - 1. - 1.
- 0.6 - 0.6 - 0.6 - 0.6 - 0.6
- 0.2 - 0.2 - 0.2 - 0.2 - 0.2
0.2 0.2 0.2 0.2 0.2
0.6 0.6 0.6 0.6 0.6
1. 1. 1. 1. 1.
X =
- 1. - 0.5 0. 0.5 1.
- 1. - 0.5 0. 0.5 1.
- 1. - 0.5 0. 0.5 1.
- 1. - 0.5 0. 0.5 1.
- 1. - 0.5 0. 0.5 1.
- 1. - 0.5 0. 0.5 1.
-->x = linspace(0,5,10); y = x;
-->[X,Y] = meshgrid(x,y);
-->clf() ;f = scf(0);
-->f.color_map = hsvcolormap(32);
Jendela Grafik - 259
Selain dari sekumpulan grid titik, Scilab juga menyediakan fungsi untuk pembuatan grafik
tiga dimensi dari sebuah fungsi matematika. Operasi tersebut dapat dilakukan dengan
fungsi fplot3d atau fplot3d1 yang mempunyai sintaks sebagai berikut.
fplot3d(x, y, f)
fplot3d1(x, y, f)
Dimana x dan y adalah vektor-vektor baris yang menyatakan grid pada sumbu-x dan
sumbu-y, dan f adalah suatu fungsi yang akan diplot.
Fungsi fplot3d akan menghasilkan suatu permukaan tiga dimensi dengan warna tunggal.
Fungsi fplot3d1 akan menghasilkan suatu permukaan tiga dimensi dengan gradasi warna
untuk menunjukkan perbedaan elevasi. Keuntungan pembuatan grafik tiga dimensi dengan
fungsi fplot3d atau fplot3d1 yaitu tidak perlukan pembuatan suatu grid data.
Jendela Grafik - 260
-->function z = g(x,y)
--> z = (x.^2 - y.^2).*exp(-x.^2 - y.^2)
-->endfunction
-->x = linspace(-3,3,20);
-->y = x;
-->clf(); f = scf(0);
-->fplot3d1(x,y,g);
-->f.color_map = rainbowcolormap(30);
Hasil dari statemen-statemen ini adalah seperti yang diperlihatkan pada Gambar 16.47.
Gambar-gambar yang telah dibuat pada jendela grafik dapat disimpan sebagai suatu file
grafik Scilab (*.scg) atau diekspor sebagai suatu file grafik dengan format yang lain, seperti
png, eps, emf dan lain sebagainya. Gambar yang telah dibuat juga dapat disalin ke dalam
clipboard. Gambar yang ada juga dapat dicetak melalui sebuah printer. Operasi-operasi
tersebut dapat dilakukan melalui menu File yang terdapat pada jendela grafik.
Bab 17
Metode Numerik
Persamaan Nonlinier
Penyelesaian persamaan nonlinier merupakan salah satu persoalan yang sering dijumpai
dalam komputasi numerik. Sebuah persamaan nonlinier tunggal atau sebuah sistem
persamaan nonliner dapat diselesaikan dengan fungsi fsolve. Sintaks fungsi fsolve adalah
sebagai berikut:
[xsol, fsol, info] = fsolve(x0, fct, fjac, tol)
Deskripsi dari argumen input dan output yang terdapat pada fungsi fsolve adalah sebagai
berikut:
x0 adalah nilai awal yang digunakan dalam penyelesaian persamaan nonlinier atau
sistem persamaan nonlinier.
fct adalah fungsi nonlinier yang akan dicari penyelesaiannya.
fjac adalah argumen opsional yang menyatakan gradien atau Jacobian dari fungsi
nonlinier fct.
tol adalah argumen opsional untuk menyatakan toleransi konvergensi dalam
pencarian akar persamaan nonlinier, nilai defaultnya adalah 1e-10.
fsol adalah argumen opsional dimana fsol = fct(xsol).
Metode Numerik - 263
info adalah argumen opsional yang menyatakan kondisi iterasi. Berikut ini nilai-nilai
yang dapat dihasilkan oleh argumen output info.
0: argumen-argumen input tidak mencukupi.
1: akar persamaan dapat ditemukan dengan nilai kesalahan relatif yang lebih
kecil dari nilai toleransi yang digunakan.
2: jumlah pemanggilan terhadap fungsi fct telah mencapai batas maksimum.
3: nilai toleransi terlalu kecil sehingga tidak dapat diperoleh nilai penyelesaian
yang lebih baik.
4: iterasi tidak dapat menemukan nilai pendekatan berikutnya yang lebih baik.
Penyelesaian. Anggap persamaan nonlinier yang selesaikan adalah f(x) = 0, maka kita
dapat menyatakan fungsi f(x) dengan statemen sebagai berikut
-->function y = f(x)
--> y = x - exp(-x);
-->endfunction
Berikut ini perhitungan akar dari fungsi f(x) dengan menggunakan nilai awal x=0.6.
-->[xsol,fsol,info] = fsolve(x0,f)
info =
1.
fsol =
0.
xsol =
0.5671433
Penyelesaian. Anggap sistem persamaan nonlinier pada contoh ini adalah g(x) = 0, dimana
x adalah sebuah vektor kolom, x = [x1; x2]. Gambar 17.2 merupakan ilustrasi sistem
persamaan nonlinier g(x). Dari Gambar tersebut terlihat bahwa terdapat dua pasangan
akar untuk fungsi nonlinier g(x).
Metode Numerik - 265
Fungsi untuk sistem persamaan nonlinier g(x) dapat dibuat dengan statemen-statemen
sebagai berikut:
-->function y = g(x)
--> y(1) = x(1)^2 - 2*x(1) - x(2) + 0.5;
--> y(2) = x(1)^2 + 4*x(2)^2 - 4;
-->endfunction
10^(-14) *
0.1054712
- 0.7105427
xsol1 =
1.9006767
0.3112186
Penyelesaian berikutnya dengan nilai-awal yang berbeda yaitu x1=0 dan x2=1 adalah
sebagai berikut:
0.
0.
xsol2 =
- 0.2222146
0.9938084
Dari output dua statemen di atas diperoleh bahwa, akar-akar dari sistem persamaan
nonlinear g(x)=0 yaitu (1.901, 0.311) dan (-0.222, 0.994).
Statemen Scilab untuk menyatakan fungsi jacobian J(x1, x2) adalah sebagai berikut:
-->function y = dg(x)
--> y(1,1) = 2*x(1) - 2
--> y(1,2) = -1
--> y(2,1) = 2*x(1)
--> y(2,2) = 8*x(2)
-->endfunction
10^(-14) *
0.1110223
- 0.7105427
xsol1 =
1.9006767
0.3112186
10^(-15) *
- 0.1110223
0.
xsol2 =
- 0.2222146
0.9938084
Contoh 3 (Persamaan Van Der Waals). Persamaan Van Der Waals adalah persamaan
yang menyatakan hubungan antara tekanan absolut (p) [atm], suhu absolut (T) [K] dan
volume molal (v) [L/mol] untuk gas tak-ideal.
( )( )
dimana R adalah konstanta universal gas (0.082054 L atm/(mol K)), a dan b adalah
konstanta empiris gas yang nilainya berbeda-beda untuk setiap jenis gas. Tentukan volume
molal untuk gas karbondioksida untuk berbagai macam kombinasi dari kondisi tekanan 1,
10, dan 100 atm dan suhu 300, 500 dan 700 K ? Diketahui konstanta empiris untuk gas
karbon dioksida yaitu: a = 3.592 dan b = 0.04267.
Metode Numerik - 267
-->function y = VanDerWaals(v,p,T,a,b)
--> R = 0.082054 // Konstanta gas universal
--> y = (p + a./v.^2).*(v - b) - R*T
-->endfunction
Data-data yang diketahui dan nilai awal untuk perhitungan volume gas yaitu:
Volume gas untuk kondisi suhu 300 K pada tekanan gas 1, 10 dan 100 atm dapat dihitung
dengan cara sebagai berikut:
Dengan menggunakan cara yang sama, perhitungan volume gas untuk kondisi suhu 500
dan 700 K pada tekanan gas 1, 10 dan 100 atm adalah sebagai berikut:
1 24.51
300 10 2.35
100 0.08
1 40.98
500 10 4.06
100 0.37
1 57.42
700 10 5.72
100 0.56
Contoh 4 Sebuah batu dijatuhkan ke dalam sebuah sumur, kemudian terdengar suara
benturan pada dasar sumur 6.5 detik setelah batu tersebut dijatuhkan. Hitung kedalaman
sumur tersebut? Diketahui kecepatan suara adalah 343 m/detik.
Anggap h adalah kedalaman sumur dan t1 adalah waktu yang diperlukan sehingga batu
menyentuh dasar sumur adalah maka persamaan di atas dapat dinyatakan sebagai berikut:
h 12 g t12 4.905 t12
Setelah batu membentur dasar sumur maka suara yang dihasilkan oleh benturan tersebut
akan merambat ke atas dengan kecepatan konstan. Anggap t2 adalah waktu yang
diperlukan sehingga benturan tersebut dapat kita dengar. Hubungan antara kedalaman
sumur h dengan waktu t2 dapat dinyatakan dengan persamaan sebagai berikut:
h vsuara t 2 343 t 2
Metode Numerik - 269
Dari dua persamaan di atas dapat diperoleh sebuah persamaan sebagai berikut:
Selain persamaan ini, diantara t1 dan t2 juga terdapat hubungan lain sebagai berikut:
t1 t 2 6.5
-->function y = f(t)
--> y(1) = 4.905*t(1)^2 - 343*t(2)
--> y(2) = t(1) + t(2) - 6.5
-->endfunction
-->t_awal = [3;3]
t_awal =
3.
3.
-->t_sol = fsolve(t_awal, f)
t_sol =
5.9873568
0.5126432
Kedalaman sumur dapat dihitung dengan salah satu dari dua statemen di bawah ini.
175.83661
175.83661
Regresi Linier
Terhadap sekumpulan data (x1, y1), (x2, y2), ..., (xn, yn) dapat dibuat sebuah garis regresi
linier. Anggap garis regresi linearnya dapat dinyatakan dalam persamaan sebagai berikut.
y = ax + b
Metode Numerik - 270
Misalkan xdat dan ydat masing-masing adalah vektor yang merepresentasikan data x dan
y maka koefisien regresi a dan b dapat diperoleh dengan fungsi reglin sebagai berikut:
[a, b] = reglin(xdat, ydat)
dimana a dan b adalah koefisien regresi a dan b.
Contoh 5. Berikut ini adalah kadar tar dan nikotin dari pengujian 10 batang rokok.
Tentukan hubungan antara kadar nikotin dengan tar dengan metode regresi linier?
Penyelesaian. Regresi linier antara kadar nikotin dengan tar dapat diperoleh dengan
menggunakan statemen-statemen sebagai berikut:
-->nikotin = [0.32 0.46 1.1 1.34 1.26 1.44 1.42 1.96 2.23 2.2];
- 0.1638327
koef1 =
0.0629334
Jadi hubungan antara kadar nikotin dengan tar dapat dinyatakan dengan persamaan
sebagai berikut:
Gambar 17.3
Contoh 6. Berikut ini adalah data hasil pengukuran terhadap kekerasan kayu dan
kerapatan kayu.
Kerapatan 27.3 28.4 29 30.3 32.7 35.6 38.8 39.4 39.9 40.6
Kekerasan 413 549 648 587 704 979 1070 1210 989 1010
Kerapatan 40.7 45.8 46.9 48.2 51.5 53.4 56.5 57.6 59.2 59.8
Kekerasan 1130 1180 1400 1760 2010 1880 1820 1980 2310 1940
Dengan metode regresi linier tentukan hubungan antara kerapatan kayu dengan kekerasan
kayu?
Penyelesaian. Hubungan antara kerapatan kayu dengan kekerasan kayu dapat dihitung
dengan statemen-statemen sebagai berikut:
-->kerapatan = [27.3, 28.4, 29.0, 30.3, 32.7, 35.6, 38.8, 39.4, 39.9, ...
--> 40.6, 40.7, 45.8, 46.9, 48.2, 51.5, 53.4, 56.5, 57.6, 59.2, 59.8];
-->kekerasan = [413, 549, 648, 587, 704, 979, 1070, 1210, 989, 1010, ...
--> 1130, 1180, 1400, 1760, 2010, 1880, 1820, 1980, 2310, 1940];
-->[a,b] = reglin(kerapatan,kekerasan)
b =
- 945.33119
a =
51.619805
Metode Numerik - 272
Sehingga hubungan antara kekerasan kayu dengan kerapatan kayu adalah sebagai berikut:
Gambar 17.4
Interpolasi
Interpolasi adalah penentuan nilai suatu titik yang terletak diantara dua titik data atau
pengamatan.
Interpolasi Linier
Cara paling mudah untuk mencari nilai dari suatu titik yang terdapat diantara dua titik
yaitu dengan pendekatan interpolasi linier. Di dalam Scilab, interpolasi linier dapat
diselesaikan dengan fungsi interpln yang mempunyai sintaks sebagai berikut:
yi = interpln(xydat, xi)
dimana xydat adalah sebuah matrik dua baris yang menyatakan titik data-data, xi adalah
titik-titik yang akan dihitung nilainya dan yi adalah nilai-nilai dari xi.
Metode Numerik - 273
x 1 2 3 4 5 6
Hitung nilai y pada titik: 1.3, 3.4 dan 5.5 dengan menggunakan metode interpolasi linier?
Penyelesaian. Nilai pada titik 1.3, 3.4 dan 5.5 dapat dihitung dengan cara sebagai berikut:
-->x = 1:6;
1.93 5. 8.25
Berikut ini adalah hasil interpolasi linier pada titik-titik yang dicari nilainya.
Y 1.93 5 8.25
Gambar 17.5 adalah ilustrasi dari perhitungan interpolasi linier yang telah dilakukan.
Gambar 17.5
Metode Numerik - 274
Fungsi splin digunakan untuk membuat fungsi interpolator yang menghubungkan dua
titik yang berdekatan. Sintaks dari fungsi splin adalah sebagai berikut:
d = splin(x, y, tipe, der)
dimana x dan y adalah titik-titik data, tipe adalah argumen opsional yang menyatakan tipe
spline yang digunakan, kemudian der adalah suatu vektor terdiri dari dua elemen (d1, d2),
d1 dan d2 adalah turunan pada titik yang terletak di ujung kiri dan ujung kanan. Argumen
der harus digunakan jika tipe splinenya adalah clamped spline. Kemudian d adalah output
yang dihasilkan oleh fungsi splin yang berupa suatu vektor yang menyatakan turunan dari
fungsi spline kubik pada setiap titik data dalam vektor x. Pilihan untuk tipe spline adalah
salah satu string sebagai berikut: not_a_knot (default), clamped, natural, periodic,
monotone, fast dan fast_periodic. Asumsi perhitungan yang digunakan pada setiap tipe
spline diberikan pada Tabel 17.1.
Setelah fungsi splin dijalankan, fungsi interp dapat dijalankan untuk melakukan evaluasi
terhadap titik-titik yang akan dicari nilainya.
[yp, yp1, yp2, yp3] = interp(xp, x, y, d)
Argumen input xp adalah titik-titik yang akan dihitung nilainya dengan interpolasi spline
kubik, x dan y adalah kumpulan titik-titik data, serta d adalah output yang dihasilkan oleh
fungsi splin. Argumen output yp adalah nilai dari titik-titik xp, kemudian yp1, yp2, dan yp3
adalah argumen output opsional yang menyatakan nilai turuan pertama, kedua, dan ketiga
pada titik-titik xp.
Metode Numerik - 275
not_a_knot Turunan ketiga dari fungsi spline pada titik dan bersifat kontinu.
Clamped ( ) , ( )
Natural ( ) ( )
Periodic ( ) ( ) ( ) ( )
Monotone ( , )
Fast Turunan pada setiap titik dihitung dengan interpolasi polinomial dari
titik ( , ), ( , ) serta ( , ), kecuali pada titik yang terletak
diujung kiri dan kanan masing-masing dihitung dengan menggunakan 3
titik paling kiri dan 3 titik paling kanan.
fast_periodic Sama dengan spline tipe fast, namun dengan tambahan kondisi lain yaitu
( ) ( )
X 1 2 3 4 5 6
Tentukan nilai y pada titik-titik: 1.3, 3.4 dan 5.5 dengan metode interpolasi spline kubik?
Penyelesaian. Berikut ini adalah perintah-perintah untuk mencari nilai dari titik-titik yang
dicari dengan pendekatan interpolasi spline kubik.
-->x = 1:6;
-->d = splin(x,y);
-->yi = interp(xi,x,y,d)
yi =
Berikut ini adalah hasil interpolasi linier pada titik-titik yang dicari nilainya.
Gambar 17.6
Gradien
Aproksimasi numerik untuk menghitung gradien dari suatu fungsi f(x1, x2, ... , xn) dapat
dilakukan dengan fungsi numderivative yang mempunyai sintaks sebagai berikut:
G = numderivative(f, x, h)
dimana f adalah suatu fungsi yang akan dihitung gradiennya, x adalah sebuah vektor untuk
titik yang akan dihitung gradiennya, h adalah argumen opsional untuk menyatakan step
Metode Numerik - 277
Penyelesaian. Gradien dari fungsi yx 1 x , pada x =1.1 dapat dihitung dengan cara
berikut:
-->function y = f(x)
--> y = sqrt(1 + x)
-->endfunction
0.3450328
-->function z = h(x)
--> z = x(1)^2 + 2*x(1)*x(2)^2 - x(2)^3
-->endfunction
4. - 6.9999999
Integrasi Numerik
Integrasi numerik dilakukan jika ditemui salah satu dari dua kondisi sebagai berikut:
Perhitungan integral secara analitik sulit atau bahkan mustahil untuk dilakukan.
Integrasi terhadap sekumpulan data diskrit.
Metode Numerik - 278
1
4
Contoh 11. Tentukan nilai integral dari 1 x
0
2
dx
-->function y = f(x)
--> y = 4/(1 + x^2)
-->endfunction
-->v = intg(0, 1, f)
v =
3.1415927
-->integrate('4/(1 + x^2)','x',0,1)
ans =
3.1415927
1
4
Diperoleh nilai integral 1 x
0
2
dx 3.142
Contoh 12 (Terjun Payung). Anggap kecepatan v(t) seorang penerjun payung setelah t
detik dapat dinyatakan dengan persamaan sebagai berikut
gm c
vt 1 exp t
c m
dimana m adalah massa penerjun payung, g adalah percepatan gravitasi dan c adalah
koefisien tahanan udara. Apabila diketahui m = 68.1 kg, g = 9.8 m/s2 dan c = 12.5 kg/s.
Tentukan jarak yang ditempuh oleh penerjun payung setelah 10 detik ?
Penyelesaian. Jarak (d) yang ditempuh oleh penerjun payung setelah t detik dapat
ditentukan dengan persamaan sebagai berikut:
t
d vt dt
0
gm c
t
d
c 0
1 exp t dt
m
Metode Numerik - 280
Dengan menggunakan data yang diberikan, jarak yang telah ditempuh oleh penerjun
payung dapat kiat hitung dengan statemen sebagai berikut:
289.43515
Jawaban yang diperoleh yaitu jarak yang ditempuh oleh penerjun payung setelah 10 detik
adalah sebesar 289.4 m.
Perhitungan integrasi numerik dapat dilakukan dengan fungsi inttrap untuk pendekatan
interpolasi linier atau intsplin untuk pendekatan interpolasi kubik spline. Kedua fungsi
tersebut mempunyai sintaks sebagai berikut:
Q = inttrap(x,y)
Q = intsplin(x,y)
dimana x dan y adalah vektor pasangan data, serta Q adalah hasil perhitungan integral.
x 0.00 0.12 0.22 0.32 0.36 0.40 0.44 0.54 0.64 0.70 0.80
y 0.20 1.31 1.31 1.74 2.07 2.46 2.84 3.51 3.18 2.36 0.23
Penyelesaian. Nilai integral dari kurva yang dibentuk oleh titik-titik yang terdapat pada
tabel di atas dapat dihitung dengan cara sebagai berikut.
-->x = [0.00 0.12 0.22 0.32 0.36 0.40 0.44 0.54 0.64 0.70 0.80];
-->y = [0.20 1.31 1.31 1.74 2.07 2.46 2.84 3.51 3.18 2.36 0.23];
1.5946
1.6366898
Jadi luas kurva adalah 1.595 untuk integrasi numerik dengan pendekatan interpolasi linier
dan 1.637 untuk integrasi numerik dengan pendekatan interpolasi spline kubik. Gambar
17.7 bagian kiri adalah ilustrasi perhitungan integral dengan pendekatan interpolasi linier
dan Gambar 17.7 bagian kanan adalah ilustrasi perhitungan integral dengan pendekatan
interpolasi kubik spline.
Gambar 17.7
Contoh 14. Sebuah mobil bergerak dengan kecepatan awal 18.0 m/detik, selama 4 detik
berikutnya lajunya dipercepat sehingga mencapai kecepatan 30.0 m/detik. Setelah itu,
kecepatannya dipertahankan konstan selama 25 detik. Selama 15 detik berikutnya laju
mobil diperlambat sampai berhenti total. Grafik dari kecepatan terhadap waktu untuk
Metode Numerik - 282
mobil tersebut adalah seperti yang ditunjukkan pada Gambar 17.8. Tentukan jarak yang
telah ditempuh oleh mobil selama periode waktu tersebut?
Gambar 17.8
Penyelesaian. Misalkan t adalah waktu dan v adalah kecepatan mobil, dengan mengacu
pada Gambar 17.8 maka kedua variabel tersebut dapat kita nyatakan sebagai berikut:
Selanjutnya, jarak yang ditempuh oleh van dapat dihitung dengan metode integrasi
numerik dengan pendekatan interpolasi trapezoidal.
1071.
Jadi jarak yang ditempuh oleh mobil selama 44 detik adalah sejauh 1071 m.
Suatu persamaan diferensial biasa orde pertama dengan kondisi awal secara umum dapat
dinyatakan dengan notasi matematika sebagai berikut:
f t , y
dy
dt
Metode Numerik - 283
yt 0 y0
Selanjutnya, notasi matematika untuk sistem persamaan diferensial biasa orde pertama
dengan kondisi awal adalah sebagai berikut:
dy1
f1 t , y1 , , y n
dt
dy 2
f 2 t , y1 , , y n
dt
dy n
f n t , y1 , , y n
dt
y1 t 0 y1, 0
y 2 t 0 y 2, 0
y n t 0 y n , 0
Persamaan diferensial biasa tunggal maupun sistem persamaan differensial biasa dapat
diselesaikan dengan fungsi ode. Sintaks dari fungsi ode adalah sebagai berikut:
y = ode(metode, y0, t0, t, func)
dimana y0, t0 adalah kondisi awal dari persamaan diferensial. Argumen input y0 harus
berupa sebuah kolom vektor. Argumen input t adalah vektor untuk menyatakan waktu-
waktu dimana persamaan differensialnya dihitung. Argumen func adalah fungsi
persamaan diferensial dan secara eksplisit harus mempunyai argumen input t meskipun
untuk persamaan diferensial yang bersifat autonomous. Argumen metode adalah argumen
opsional untuk menyatakan metode yang digunakan dalam perhitungan.
y0 1
dy
2ty ,
dt
-->function dy = func(t,y)
--> dy = -2*t*y
-->endfunction
Metode Numerik - 284
-->y0 = 1;
-->t = linspace(0,2,200);
-->y = ode(y0,0,t,func);
-->plot2d(t,y,style=2)
-->xtitle('','t','y')
Gambar 17.9 adalah penyelesaian persamaan diferensial pada Contoh 15 dalam bentuk
grafik.
Gambar 17.9
-->t = linspace(0,1,500);
-->y = ode('adams',y0,0,t,f);
-->plot2d(y(1,:),y(2,:),style=5)
-->xtitle('','y1','y2')
Gambar 17.10 adalah penyelesaian sistem persamaan diferensial dalam bentuk grafik.
Gambar 17.10
d 2 y dy
y0 4, 0 5
dy
2 y 0,
dx 2 dx dx
persamaan diferensial di atas dapat dinyatakan dalam sistem persamaan sebagai berikut:
dy1
y2
dx
dy 2
2 y1 y 2
dx
Kondisi awal dapat dinyatakan dengan persamaan y1 0 4 dan y 2 0 5 .
Metode Numerik - 286
-->function dy = f_ode2(t,y)
--> dy = [y(2); 2*y(1) - y(2)]
-->endfunction
-->x = linspace(0,2,500)';
-->y = ode(y0,0,x,f_ode2);
-->plot2d(x,y(1,:)',style=2), xtitle('','x','y')
Gambar 17.11 adalah ilustrasi penyelesaian sistem persamaan diferensial ini dalam bentuk
grafik.
Gambar 17.11
Contoh 18 (Terjun payung). Anggap ketika meluncur ke bawah seorang penerjun payung
diasumsikan mendapatkan tahanan udara yang sebanding kuadrat dari kecepatannya
maka kecepatannya dapat dinyatakan dalam persamaan diferensial sebagai berikut:
dv b 2 mg
v
dt m b
Metode Numerik - 287
dimana v adalah kecepatan penerjun payung (m/s), m adalah massa penerjun payung (kg),
g adalah percepatan gravitasi dan b adalah koefisien tahanan udara. Apabila diketahui m =
72.7 kg, g = 9.80 m/s2 dan b = 30 kg/m. Selesaikan persaman diferensial tersebut dan
gambar laju dari penerjun payung sesaat setelah melompat sampai dua detik berikutnya ?
-->t = linspace(0,2,500)';
-->v = ode(v0,0,t,fode);
-->v($-4:$)
ans =
-->plot2d(t,v,style=5)
Dari output di atas, diperoleh bahwa kecepatan akhir dari penerjun payung adalah sekitar
4.874 m/s. Gambar 17.12 adalah grafik untuk kecepatan penerjuan payung sesaat setelah
dia melompat sampai 2 menit setelahnya.
Metode Numerik - 288
Gambar 17.12
k T Tair
dT
dt
dimana T adalah suhu dari bola tembaga dan Tair adalah suhu air. Berikut ini adalah
statemen-statemen yang merepresentasikan persamaan diferensial dan kondisi awalnya.
Nilai konstanta k dapat dicari dengan menggunakan data suhu bola tembaga pada detik
ketiga setelah dicelupkan, T(3) = 70.
- 0.1865386
Berikut ini adalah perhitungan untuk menentukan nilai t sehingga diperoleh T(t) = 31.
22.77542
Jadi waktu diperlukan sehingga suhu bola tembaga menjadi 31 oC adalah 22.8 detik.
Grafik yang menggambarkan penurunan suhu dari bola tembaga dapat dibuat dengan
perintah-perintah sebagai berikut:
-->t = linspace(0,50,1000)';
-->T = ode(T0,0,t,func);
-->plot2d(t,T,style=2)
Gambar 17.13
Waktu dimana dilakukan evaluasi terhadap variabel y1 dan y2 adalah sebagai berikut:
-->t = linspace(0,25,5000);
-->y = ode(y0,0,t,LotkaVolterra);
Gambar 17.14 dan Gambar 17.15 adalah dua grafik yang menyatakan hubungan antara
mangsa dan pemangsa.
-->legend("Mangsa","Pemangsa",5,%f);
-->xtitle('Pers. Lotka-Volterra','Waktu','Populasi')
-->xtitle('Pers. Lotka-Volterra','Pemangsa','Mangsa')
Gambar 17.14
Metode Numerik - 292
Gambar 17.15
Dari Gambar 17.14 dan 17.15 terlihat bahwa populasi mangsa dan pemangsa adalah saling
bervariasi serta terdapat suatu pola siklus populasi dengan periode waktu tertentu.
Selain dengan fungsi rand, bilangan random juga dapat dibuat dengan fungsi grand yang
mempunyai sintak sebagai berikut:
Y = grand(m, n, dist_type, p1, ... , pk)
dimana m dan n adalah ukuran dari matrik bilangan random yang akan dibuat, dist_type
adalah fungsi distribusi yang akan digunakan pada pembuatan bilangan random. Argumen
p1, ..., pk adalah argumen yang menyatakan parameter dari fungsi distribusi yang
digunakan. Notasi fungsi grand untuk berbagai macam distribusi diberikan pada Tabel 17.2
Contoh 21. (Bilangan random dengan distribusi normal). Buat histogram dari 10000
bilangan random yang dibuat dengan menggunakan distribusi normal yang mempunyai
nilai rata-rata 10 dan simpangan baku 2.
Metode Numerik - 293
Distribusi Sintak
-->X = grand(10000,1,"nor",mu,sd);
Histogram dari bilangan random X dapat dibuat dengan fungsi hisplot dengan
menggunakan statemen sebagai berikut.
-->kls = 0:20;
-->histplot(kls,X);
-->x = linspace(0,20,1000)';
-->y = exp(-(x-mu).^2/(2*sd.^2))/(sqrt(2*%pi)*sd);
-->plot2d(x,y, style=2)
Gambar 17.16
Contoh 22. (Bilangan random dengan distribusi eksponensial). Buat histogram dari
100000 bilangan random yang dibuat dengan menggunakan distribusi eksponensial
dengan konstanta = 10.
-->lambda = 2;
-->X = grand(100000,1,"exp",1/lambda);
-->clf();
-->histplot(40,X,style=2)
-->xmax = max(X);
-->x = linspace(0,xmax,1000)';
-->plot2d(x,lambda*exp(-lambda*x))
Gambar 17.17
Penyelesaian. Simulasi pelemparan sepasang dadu dilakukan sebanyak tiga kali. Simulasi
pertama, kedua dan ketiga masing-masing menggunakan 10, 100 dan 10000 percobaan.
Anggap n adalah jumlah pelemparan dadu, maka dua angka yang muncul pada setiap
simulasi dapat diperoleh dengan statemen sebagai berikut:
grand(2,n,'uin',1,6)
-->dadu = grand(2,n,'uin',1,6)
dadu =
3. 3. 5. 6. 1. 2. 1. 6. 4. 2.
1. 6. 2. 6. 2. 6. 1. 1. 5. 5.
Pada percobaan ini, jumlah angka yang muncul pada setiap pelemparan sepasang dadu
dapat dihitung dengan statemen sebagai berikut:
Metode Numerik - 296
-->s = sum(dadu,'r')
s =
4. 9. 7. 12. 3. 8. 2. 7. 9. 7.
Peluang munculnya sepasang dadu yang jumlahnya lebih kecil atau sama dengan empat ( p)
pada percobaan ini dapat dihitung dengan statemen-statemen sebagai berikut.
-->p = length(s4)/n
p =
0.3
Pada percobaan pertama ini, diperoleh bahwa peluang muncul sepasang dadu yang
jumlahnya lebih kecil atau sama dengan empat adalah sebesar 0.30.
Percobaan kedua dengan melakukan simulasi 100 kali pelemparan, sebagai berikut:
-->dadu = grand(2,n,'uin',1,6);
-->s = sum(dadu,'r');
-->p = length(s4)/n
p =
0.15
Diperoleh bahwa peluang muncul sepasang dadu yang jumlahnya lebih kecil atau sama
dengan empat adalah sebesar 0.15.
-->dadu = grand(2,n,'uin',1,6);
-->s = sum(dadu,'r');
-->p = length(s4)/n
p =
0.1632
Pada percobaan yang ketiga, peluang muncul sepasang dadu yang jumlahnya lebih kecil
atau sama dengan empat adalah sebesar 0.1665. Seperti yang kita harapkan bahwa
semakin banyak percobaan yang dilakukan maka hasil perhitungannya semakin akurat.
Nilai peluang ini adalah dekat dengan nilai peluang teoritis yaitu 6/36 = 0.1667.
Contoh 24 (Hampiran nilai ). Luas sebuah lingkaran yang mempunyai jari-jari 1 dapat
dihitung dengan persamaan integral tertentu sebagai berikut
1
I 4 1 x 2 dx
0
Dengan menggunakan metode integrasi Monte Carlo tentukan nilai integral I? (Nilai eksak
dari integral ini adalah I = .
dimana xi adalah bilangan random yang terdistribusi seragam pada selang [0,1].
-->function y = f(x)
--> y = sqrt(1 - x.^2)
-->endfunction
-->I = zeros(1,5);
-->for i = 1:5
--> x = grand(1,10^i,'unf',0,1);
--> I(i) = 4*mean(f(x));
-->end
Metode Numerik - 298
-->I
I =
Terlihat bahwa semakin banyak bilangan random yang digunakan maka nilai hampiran
untuk I adalah semakin akurat dan mendekati nilai eksak yaitu = 3.1415927.
Bab 18
Penggunaan Scilab yang Efisien
Terdapat beberapa cara yang dapat dilakukan sehingga Scilab dapat digunakan untuk
menyelesaaikan suatu operasi perhitungan secara cepat dan efisien, sebagai berikut:
Menghindari penggunaan statemen perulangan semaksimal mungkin.
Menggunakan alokasi memori awal.
Menghindari fungsi rekursif
Di dalam Scilab, sebagian besar perhitungan yang pada operasi berbasis skalar harus
dilakukan dengan menggunakan statemen perulangan dapat diselesaikan secara mudah
dengan menggunakan suatu fungsi atau operator yang telah terpasang di dalamnya.
Berikut ini beberapa contoh yang mengilustrasikan hal tersebut.
Contoh 1. Pembuatan tabel nilai sinus untuk beberapa sudut di bawah ini.
x 0
sin(x) 0.0 0.5 0.707 0.866 1.0 0.866 0.707 0.5 0.0
Berikut ini statemen untuk menyatakan sudut yang akan dihitung nilai sinusnya.
-->x = [0, 1/6, 1/4, 1/3, 1/2, 2/3, 3/4, 5/6, 1]*%pi;
Pada operasi yang berbasis skalar, perhitungan nilai sinus dari elemen vektor x akan
dilakukan dengan menggunakan statemen-statemen sebagai berikut.
Penggunaan Scilab yang Efisien - 300
-->for i = 1:9
--> y(i) = sin(x(i));
-->end
-->y
y =
Penggunaan statemen perulangan for pada perhitungan ini sama sekali tidak diperlukan
karena perhitungannya dapat diselesaikan secara mudah dengan statemen sebagai berikut:
-->y = sin(x)
y =
Contoh 2. (Hampiran nilai ). Dengan menggunakan metode integral Monte Carlo, nilai
dapat dihampiri dengan persamaan sebagai berikut
4 n
1 x 2i
n i 1
dimana xi adalah bilangan random pada selang [0,1] yang dibuat dengan distribusi
seragam dan n adalah jumlah bilangan random.
-->function pi = MonteCarlo1(n)
-->// Hampiran nilai pi dengan operasi berbasis skalar
-->
--> sigma = 0
--> for i = 1:n
--> xi = grand(1,1,'def')
--> sigma = sigma + sqrt(1 - xi^2)
--> end
--> pi = 4*sigma/n
-->
-->endfunction
-->function pi = MonteCarlo2(n)
-->// Hampiran nilai pi dengan operasi berbasis vektor
-->
--> x = grand(1,n,'def')
--> fx = sqrt(1 - x.^2)
--> pi = 4*mean(fx)
-->
-->endfunction
Terlihat bahwa operasi perhitungan yang berbasis vektor statemennya lebih ringkas
dibandingkan dengan statemen untuk operasi yang berbasis skalar. Selain itu operasi yang
berbasis vektor waktu eksekusinya juga jauh lebih cepat, seperti pada contoh di bawah ini.
3.1415695
t1 =
3.188
3.1431314
t2 =
0.078
[ ]
Pada contoh ini, pembuatan matrik Vandermonde dilakukan dengan fungsi vander1 dan
vander2 sebagai berikut.
Penggunaan Scilab yang Efisien - 302
function V = vander1(x)
// Perhitungan matrix Vandermonde menggunakan operasi pemangkatan
// berbasis skalar dengan perulangan bersarang
n = length(x)
for i = 1:n
for j = 1:n
V(i,j) = x(i)^(j-1)
end
end
endfunction
function V = vander2(x)
// Perhitungan matrix Vandermonde menggunakan operasi pemangkatan
// berbasis vektor dan perulangan tunggal
x = x(:)
n = length(x)
V = ones(x)
for j = 2:n
V(:,j) = x.^(j-1)
end
endfunction
Pada fungsi vander1, statemen for dioperasikan pada dimensi baris dan dimensi kolom
sekaligus. Namun, pada fungsi vander2, statemen for hanya dioperasikan pada dimensi
kolom dan operasi pada dimensi baris dilakukan dengan operasi yang berbasis vektor.
Berikut ini adalah ilustrasi waktu eksekusi yang dibutuhkan oleh kedua fungsi tersebut.
-->x = linspace(-1,1,1000);
5.57
4.501
Terlihat bahwa fungsi vander2 dapat menghitung matrik Vandermonde hampir dua kali
lebih cepat dibanding dengan fungsi vander1.
Penggunaan Scilab yang Efisien - 303
Contoh 4. Misalkan kita mempunyai sebuah fungsi yang didefinisikan sebagai berikut:
( ),
( ) { ,
,
Dengan menggunakan operasi berbasis skalar, nilai dari fungsi f(x) dapat diselesaikan
dengan statemen-statemen sebagai berikut
-->function y = foo1(x)
--> n = length(x)
--> for i = 1:n
--> if x(i) < 0 then
--> y(i) = sin(x(i))
--> elseif (x(i) >= 0) & (x(i) <= 1) then
--> y(i) = x(i)
--> else
--> y(i) = 1
--> end
--> end
-->endfunction
Selain perhitungan dengan cara di atas, fungsi f(x) juga dapat dihitung secara lebih cepat
dan efisien dengan menggunakan statemen-statemen yang berbasis vektor sebagai berikut.
-->function y = foo2(x)
--> y = ones(x)
--> k = (x < 0); y(k) = sin(x(k))
--> k = (x >= 0 & x <= 1); y(k) = x(k)
-->endfunction
Berikut ini adalah ilustrasi waktu eksekusi yang diperlukan oleh kedua fungsi di atas.
-->x = -2:0.0001:2;
2.295
0.004
Terlihat dengan jelas bahwa waktu eksekusi yang diperlukan oleh operasi yang berbasis
vektor jauh lebih cepat dibanding dengan operasi yang berbasis vektor.
Penggunaan Scilab yang Efisien - 304
Sebuah operasi perulangan pada suatu vektor atau matrik yang dilakukan tanpa
mempergunakan alokasi memori awal akan dieksekusi dengan cara menambahkan
elemen-elemen baru ke dalam vektor atau matrik yang dihasilkan dari langkah perulangan
sebelumnya. Namun jika sebelum proses perulangan dilakukan alokasi memori terlebih
dahulu maka pada setiap langkah perulangan tidak terjadi penambahan dimensi matrik
atau vektor sehingga waktu eksekusinya akan lebih cepat dibandingkan dengan operasi
perulangan tanpa menggunakan alokasi memori awal.
function V = vander3(x)
// Perhitungan matrix Vandermonde dengan menggunakan alokasi memori awal
x = x(:)
n = length(x)
V = ones(n,n)
for j = 2:n
V(:,j) = x.^(j-1)
end
endfunction
Berikut ini adalah waktu eksekusi dari fungsi vander3 untuk data yang sama seperti pada
Contoh 3.
0.09
Apabila dibandingkan maka waktu eksekusi yang diperlukan oleh fungsi vander3 hanya
sekitar 2% dari waktu yang diperlukan oleh fungsi vander2.
Contoh 6. (Metode Runge-Kutta). Metode Runge-Kutta adalah salah satu metode yang
sering digunakan pada penyelesaian persamaan diferensial biasa dengan nilai awal. Dalam
Contoh ini, metode ini diimplementasikan pada fungsi rk40 dan rk4. Perbedaan diantara
Penggunaan Scilab yang Efisien - 305
kedua fungsi tersebut yaitu fungsi rk40 tidak menggunakan alokasi memori awal
sedangkan pada fungsi rk4 digunakan alokasi memori awal. Berikut ini adalah statemen-
statemen untuk kedua fungsi tersebut.
h = (tn - t0)/n
t(1) = t0
y(1) = y0
for j = 1:n
tj = t(j)
yj = y(j)
k1 = h*f(tj, yj)
k2 = h*f(tj+h/2, yj+k1/2)
k3 = h*f(tj+h/2, yj+k2/2)
k4 = h*f(tj+h, yj+k3)
y(j+1) = yj + (k1 + 2*k2 + 2*k3 + k4)/6
t(j+1) = t0 + h*j
end
endfunction
h = (tn - t0)/n
t = zeros(1, n+1) // Alokasi vektor awal untuk t
y = zeros(1, n+1) // Alokasi vektor awal untuk y
t(1) = t0;
y(1) = y0;
for j=1:n,
tj = t(j)
yj = y(j)
k1 = h*f(tj, yj)
k2 = h*f(tj+h/2, yj+k1/2)
k3 = h*f(tj+h/2, yj+k2/2)
k4 = h*f(tj+h, yj+k3)
y(j+1) = yj + (k1 + 2*k2 + 2*k3 + k4)/6
t(j+1) = t0 + h*j
end
endfunction
Penggunaan Scilab yang Efisien - 306
Kemudian kita gunakan kedua fungsi tersebut untuk menyelesaikan persamaan diferensial
biasa di bawah ini.
, ( )
Penyelesaian persamaan diferensial ini dengan fungsi rk40 dan rk4 dan waktu eksekusi
yang diperlukan oleh kedua fungsi tersebut adalah sebagai berikut.
-->function dy = dfeq(t,y)
--> dy = 1 - t + 4*y
-->endfunction
0.361
0.174
Pada contoh perhitungan ini, waktu eksekusi dengan perhitungan yang menggunakan
alokasi memori awal adalah du kali lebih cepat dibanding dengan perhitungan tanpa
menggunakan alokasi memori awal.
Meskipun suatu fungsi rekursif mempunyai bentuk yang elegan dan relatif lebih mudah
untuk dibaca namun sebaiknya dihindari penggunaannya. Hal ini karena fungsi rekursif
memerlukan alokasi memori yang lebih besar jika dibandingkan dengan fungsi yang non-
rekursif. Sebagai konsekuensinya, waktu eksekusi untuk fungsi rekursif akan yang jauh
lebih lama dibandingkan dengan waktu eksekusi pada fungsi non-rekursif.
Contoh 7 (Deret Fibonnaci). Deret Fibonnaci adalah contoh dari sebuah fungsi rekursif.
Suku ke-n dari deret Fibonnaci dapat dihitung dengan cara sebagai berikut:
f n f n1 f n2
dimana f1 = 1 dan f2 = 1.
Penggunaan Scilab yang Efisien - 307
Perhitungan suku ke-n deret Fibonnaci dengan cara rekursif dapat dilakukan dengan cara
sebagai berikut.
function f = fib1(n)
// Menghitung deret Fibonnaci suku ke-n dengan cara rekursi
if n <= 2 then
f = 1
return
end
f = fib1(n-1) + fib1(n-2)
endfunction
Perhitungan suku ke-n deret Fibonnaci dalam bentuk fungsi yang non-rekursif, dalam
diselesaikan dengan cara di bawah ini.
function y = fib2(n)
// Menghitung deret Fibonnaci suku ke-n tanpa menggunakan rekursi
if n <= 2
y = 1
else
y0 = 1, y1 = 1
for k = 3:n
y = y0 + y1, y0 = y1, y1 = y
end
end
endfunction
Berikut ini adalah waktu eksekusi yang diperlukan oleh fungsi fib1 dan fib2 untuk
menghitung suku ke-20 dan ke-30 dari deret Fibonnaci.
0.052
0.
5.91
Penggunaan Scilab yang Efisien - 308
0.001
Terlihat bahwa waktu eksekusi yang diperlukan oleh fungsi rekursif adalah jauh lebih lama
dibanding dengan fungsi non-rekursif. Semakin banyak jumlah rekursi yang dilakukan
maka akan semakin lama waktu eksekusi yang diperlukan.
Daftar Pustaka