Anda di halaman 1dari 320

Pengenalan Scilab

Perangkat Lunak Gratis untuk Komputasi Numerik dan Visualisasi Data

Saifuddin Arief

ii

Untuk kedua anakku:


Izzuddin dan Hanif

iii

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
Kata Pengantar

iii

Daftar Isi

iv

1 Pendahuluan

Menjalankan Program Scilab

Jendela-Jendela Scilab

Sistem Bantuan

2 Dasar-Dasar Penggunaan Scilab

Interaksi dengan Scilab

Scilab Sebagai Kalkulator Sains

Statemen

Baris Komentar

Bilangan

Variabel

10

Matrik

11

Tipe dan Dimensi Variabel

12

Operator

14

Fungsi

15

Format Output Numerik

18

Penulisan dan Pengeditan Perintah

20

Daftar Riwayat Perintah

21

Melihat Daftar Variabel-Variabel yang Telah Dibuat

21

Menghapus Variabel

22

Membersihkan Jendela Scilab

23

Direktori Kerja
3 Matematika Dasar

23
25

Konstanta-Konstanta Matematika

25

Operator-Operator Aritmatika

26

Variabel-Variabel Khusus untuk Aritmatika Komputer

30

Pembagian dengan Nol

32

Akar Kuadrat

33

Nilai Mutlak

35

Tanda Bilangan

36

Pembulatan

36

Aproksimasi Bilangan Real dengan Bilangan Rasional

37

Trigonometri

38

Hiperbolik

42

Eksponensial dan Logaritma

44

Faktorial

46

Bilangan Kompleks

47

4 Matrik dan Vektor

51

Definisi Matrik dan Vektor

51

Pembuatan Vektor dan Matrik Secara Manual

52

Vektor Inkremental

53

Fungsi-Fungsi untuk Membuat Suatu Vektor

54

Fungsi-Fungsi untuk Membuat Suatu Matrik

55

Konkatenasi

58

Dimensi Matrik

59

Merubah Dimensi Matrik

60

Mengekstrak Elemen-Elemen Suatu Vektor

61

vi

Mengekstrak Elemen-Elemen Suatu Matrik

62

Merubah Nilai Elemen Suatu Vektor atau Matrik

64

Menghapus Elemen-Elemen Suatu Vektor atau Matrik

66

Mencari Elemen-Elemen Matrik atau Vektor Yang Memenuhi Kriteria Tertentu

67

Matrik Non-Numerik

69

5 Operasi Matematika terhadap Matrik dan Vektor

70

Penjumlahan dan Pengurangan

70

Perkalian dan Pembagian antara Matrik atau Vektor dengan Skalar

73

Perkalian Matrik

76

Pembagian Matrik

82

Pemangkatan

87

Matrik atau Vektor sebagai Argumen dari Suatu Fungsi Matematika

93

Nilai Maksimum dan Minimum

94

Fungsi-Fungsi Penjumlahan dan Perkalian

96

6 Aljabar Linier

101

Transpose

101

Norma Vektor

103

Norma Matrik

105

Rank Matrik

105

Determinan

106

Matrik Inverse

108

Penyelesaian Sistem Persamaan Linier

110

Nilai Eigen dan Vektor Eigen

117

7 Polinomial dan Rasional

120

Pembuatan Fungsi Polinomial

120

Derajat Polinomial

121

vii

Koefisien Polinomial

122

Pembuatan Fungsi Rasional

122

Evaluasi terhadap Fungsi Polinomial dan Rasional

124

Penjumlahan dan Pengurangan

125

Perkalian

126

Pembilang dan Pembagi dari Fungsi Rasional

127

Hasil Bagi dan Sisa dari Suatu Pembagian Polinomial

128

Akar-Akar Polinomial

128

Faktorisasi

131

Turunan

132

Matrik Polinomial dan Matrik Rasional

135

8 String

139

Pembuatan String

139

Penggabungan String

139

Panjang String

139

Ekstraksi Karakter String

140

Mencari Posisi Suatu String pada String yang Lain

140

Memecah String

141

Substitusi String

142

Penggabungan Elemen-Elemen Suatu Matrik String

143

Konversi ke Huruf Besar dan Huruf Kecil

143

Konversi dari Karakter ke Kode ASCII atau Sebaliknya

143

Konversi dari Numerik ke String

144

Evaluasi terhadap Suatu String Ekspresi

144

Operasi Matrik terhadap Suatu Matrik String

145

9 Tanggal dan Waktu

147

viii

Tanggal dan Waktu

147

Kalender

147

Stopwatch

148

10 Perbandingan dan Logika

150

Operasi Perbandingan

150

Operasi Logika

153

Fungsi-Fungsi Logika

156

Fungsi-Fungsi Pengujian

157

11 Perulangan dan Kondisional

161

For

161

While

164

Break

165

Continue

166

If-Else

167

Select-Case

170

12 Editor Teks SciNotes

172

13 Skrip

174

Pembuatan Skrip

174

Cara Menjalankan Suatu Skrip

175

Kelebihan dan Kelemahan Skrip

177

14 Fungsi

178

File-Fungsi

178

Penggunaan Fungsi-Fungsi yang Tersimpan pada Suatu File-Fungsi

181

Membuat Suatu Fungsi Secara Langsung pada Jendela Scilab

182

Variabel Lokal dan Variabel Global

184

Fungsi Rekursif

186

ix

Pengontrolan Eksekusi Suatu Fungsi

187

Menyela Eksekusi Program dan Melakukan Debugging

190

Jumlah Argumen Input dan Output

194

Menampilkan Baris Komentar yang Terdapat Pada Bagian Awal Suatu Fungsi

196

Kelebihan Fungsi

197

15 Input dan Output

200

Memasukkan Data dengan Fungsi Input

200

Menampilkan Nilai Suatu Variabel dengan Fungsi Disp

200

Penanda File

201

Mencetak Nilai Variabel dengan Fungsi Print

202

Membuka dan Menutup File Data

203

Informasi Mengenai File-File yang Telah Dibuka

207

Menyimpan dan Membaca Data String dalam Format Teks ASCII

208

Menyimpan dan Membaca Data dengan Format Fortran

209

Menyimpan dan Membaca Data dengan Format C

211

Mencetak Nilai Variabel dengan Fungsi Mprintf

213

Menyimpan dan Membaca Suatu Data Matrik

213

Menyimpan dan Membaca Data dengan Format Biner

215

16 Grafik Dua Dimensi dan Tiga Dimensi

218

Membuat Grafik Dua Dimensi dengan Fungsi Plot atau Plot2d

219

Judul dan Label Grafik

221

Pembuatan Beberapa Grafik Sekaligus pada Sebuah Jendela Grafik

223

Bentuk dan Warna Garis

224

Legenda Grafik

229

Skala Sumbu-Sumbu Grafik

230

Pengaturan Sumbu-Sumbu Grafik

232

Kisi-kisi (grid)

235

Beberapa Macam Variasi dari Fungsi Plot2d

236

Grafik dari Sebuah Fungsi dengan Variabel Tunggal

238

Grafik Polar

238

Pengeditan Suatu Grafik Secara Interaktif Melalui Jendela Grafik

239

Membagi Jendela Grafik ke dalam Sejumlah Jendela Subgrafik

247

Visualisasi Data Pada Beberapa Jendela Grafik Sekaligus

249

Kurva Parametrik Tiga Dimensi

251

Membuat Grafik Tiga Dimensi dengan Fungsi Plot3d dan Plot3d1

252

Mengatur Sudut Pandang

255

Mengatur Gradasi Warna

256

Membuat Grafik Tiga Dimensi dengan Fungsi Surf

257

Grafik Tiga Dimensi Dari Suatu Fungsi

259

Menyimpan, Menyalin dan Mencetak Gambar

261

17 Metode Numerik

262

Persamaan Nonlinier

262

Regresi Linier

269

Interpolasi

272

Gradien

276

Integrasi Numerik

277

Persamaan Differensial Biasa

282

Bilangan Random dan Simulasi

292

18 Penggunaan Scilab yang Efisien

299

Menghindari Penggunaan Statemen Perulangan

299

Menggunakan Alokasi Memori Awal

304

Menghindari Fungsi Rekursif

306

xi

Daftar Pustaka

309

Bab 1
Pendahuluan

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.

Menjalankan Program 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

Scilab.

yang terdapat pada ujung kanan atas dari jendela

Pendahuluan - 2

Gambar 1.1 Scilab

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

Gambar 1.2 Jendela Scilab


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.

Gambar 1.3 Jendela Bantuan Scilab


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

Gambar 1.4 Contoh penjelasan detail tentang suatu fungsi


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.
Selanjutnya, melalui menu ? Scilab Demonstrations dapat dilihat berbagai macam
demonstrasi yang memperlihatkan kemampuan Scilab dalam menyelesaikan berbagai
macam persoalan komputasi numerik, simulasi serta visualisasi data. Dengan melihat
berbagai macam demonstrasi yang telah disediakan oleh Scilab, kita dapat memperoleh
gambaran yang lebih konkret mengenai kemampuan Scilab.

Bab 2
Dasar-Dasar Penggunaan Scilab

Interaksi dengan Scilab


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.
-->

Scilab Sebagai Kalkulator Sains


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
-->2/sqrt(5^2 + (16*%pi - 1/(40*%pi))^2)
ans =
0.0395995

Dasar-Dasar Penggunaan Scilab - 7

Dua contoh di atas adalah perintah Scilab untuk menyelesaikan dua perhitungan
matematika sebagai berikut:
(

)
(

Beberapa penjelasan mengenai statemen Scilab untuk menyelesaikan dua perhitungan


tersebut adalah sebagai berikut:

Simbol +, -, *, / dan ^ masing-masing adalah operator untuk operasi penjumlahan,


pengurangan, perkalian, pembagian dan pemangkatan.

Tanda kurung-buka dan kurung-tutup adalah sepasang operator yang digunakan


untuk mengelompokkan suatu ekspresi matematika.

sqrt adalah fungsi untuk menghitung akar kuadrat dari suatu bilangan.

%pi adalah sebuah variabel khusus untuk konstanta matematika .

ans adalah sebuah variabel yang digunakan oleh Scilab untuk menyimpan hasil dari

suatu perhitungan yang nilainya tidak disimpan ke dalam sebuah variabel tertentu.

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.
-->FV = 500*(1 + 5/100)^4
FV =
607.75313
-->c = sqrt(8^2 + 6^2);
-->x = cos(%pi/4)^2 + sin(%pi/4)^2;

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 titikkoma maka nilai dari eksekusi statemennya tidak akan ditampilkan.
-->V = 120; R = 240; I = V/R, P = V*I
I =
P

0.5
=
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.
-->e5 = 1 + 1/1 + 1/(1*2) + 1/(1*2*3) + 1/(1*2*3*4) + ...
-->1/(1*2*3*4*5)
e5 =
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

Berikut ini adalah contoh-contoh penggunaan baris komentar.


-->d = 53;

// jarak (m)

-->t = 15;

// waktu tempuh (detik)

-->// kecepatan rata-rata (m/detik)


-->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.

Sebagai contoh, untuk menyimpan hasil perhitungan (

ke dalam variabel x,

statemennya adalah sebagai berikut.


-->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.

Dalam penamaan suatu variabel terdapat beberapa aturan-aturan sebagai berikut:

Nama suatu variabel harus berupa satu kata yang utuh dan di dalamnya tidak boleh
terdapat tanda spasi maupun simbol operator aritmatika (+, -, /, \, *, ^).

Karakter pertama harus berupa abjad (A-Z dan a-z) atau simbol tertentu (%, _ , #, $, ?),
kemudian karakter berikutnya dapat berupa abjad (A-Z dan a-z), angka (0-9), atau
simbol (%, _, #, $, ?).

Dasar-Dasar Penggunaan Scilab - 11

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

Berikut adalah sebuah contoh obyek matrik.


-->A = [1 2 3; 4 5 6]
A =
1.
4.

2.
5.

// numerik

3.
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.

Tipe dan Dimensi Variabel


Di dalam Scilab, suatu variabel dapat langsung dibuat tanpa harus ditentukan tipe dan
dimensinya, seperti pada contoh di bawah ini.
-->e1000 = (1 + 1/1000)^1000
e1000 =

// skalar

2.7169239
-->M = [8 1 6 3; 5 7 4 9]
M =
8.
5.

1.
7.

6.
4.

// matrik numerik ukuran 2 x 3

3.
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.
-->x = 9.867;

// x adalah suatu skalar

-->typeof(x)
ans =
constant
-->size(x)
ans =
1.

1.

-->x = [10, 20; 0, 30]


x =
10.
0.

// x berubah menjadi suatu matrik

20.
30.

-->typeof(x)
ans =
constant
-->size(x)
ans =
2.

2.

-->x = "Scilab"
x =
Scilab

// x berubah lagi menjadi suatu string

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.
-->test = 1001 < 999
test =
F
-->1 + %eps/2 > 1
ans =
F
-->x = 5;
ans =

(x >= 0) & (x <= 10)

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
Fungsi adalah sebuah nama yang merepresentasikan suatu perhitungan matematika,
(seperti perhitungan akar kuadrat, perhitungan sinus, pembulatan); atau sebuah operasi
tertentu (seperti melihat tanggal sekarang, melihat nama direktori kerja).
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

Penjelasan dari beberapa fungsi di atas adalah sebagai berikut:.

Fungsi exp adalah fungsi untuk menghitung nilai exponensial dari suatu bilangan.

Fungsi tan adalah fungsi untuk menghitung nilai tangen dari suatu sudut.

Fungsi modulo adalah fungsi untuk menghitung sisa pembagian dari suatu operasi
pembagian terhadap dua bilangan bulat.

Fungsi rand adalah fungsi untuk membuat bilangan random.

Fungsi date adalah fungsi untuk melihat tanggal sekarang.

Dasar-Dasar Penggunaan Scilab - 16

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 fungsifungsi 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

-->[m, n] = rat(%pi)
n =
m

// argumen tol dengan nilai default

113.
=
355.

-->[m, n] = rat(%pi, 1e-3)


n =

// tol = 1e-3

7.
=
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.
2
Misalkan fungsi nonlinier yang akan kita cari akarnya adalah f ( x) x sinx .

-->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:
-->x0 = fsolve(1.0, fx)
x0 =
0.8767262

// Satu argumen output

Dasar-Dasar Penggunaan Scilab - 18

-->[x0, f0, iter] = fsolve(1.0, fx)


iter =
f0

// Tiga argumen output

1.
=

- 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.

Format Output 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.
Berikut ini adalah beberapa contoh penggunaan fungsi format.
-->// Tampilan dengan format default
-->x = 1/7
x =
0.1428571
-->y = 123456789
y =
1.235D+08
-->// Tampilan dengan format desimal menggunakan 20 digit
-->format('v',20)
-->x
x =
0.14285714285714285
-->y
y =
123456789.

Dasar-Dasar Penggunaan Scilab - 20

-->NA
NA =
6.0221367000000D+23
-->// Tampilan dengan format saintifik menggunakan 15 digit
-->format('e',15)
-->x
x =
1.42857143D-01
-->y
y =
1.23456789D+08
-->NA
NA =
6.02213670D+23

Penulisan dan Pengeditan Perintah


Misalkan kita akan melakukan sebuah perhitungan sebagai berikut:
(

Anggap perhitungan tersebut kita selesaikan dengan statemen sebagai berikut


rho = (1 + sqr(5))/2

maka statement tersebut tidak dapat dieksekusi dan akan muncul sebuah pesan kesalahan,
seperti di bawah ini.
-->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 namanama 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.

Daftar Riwayat Perintah


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.

Melihat Daftar Variabel-Variabel yang Telah Dibuat


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.
Berikut ini adalah ilustrasi dari penggunaan perintah clear.
-->h = 60;
-->L = 300;
-->w = 0.118;
-->To = (w*L^2)/(8*h)
To =
22.125
-->Tmax = (w*L)/2*sqrt(1 + (L/(4*h))^2)
Tmax =
28.333825
-->clear L w

// menghapus variabel L dan w

-->L
!--error 4
Undefined variable: L
-->clear

// menghapus semua variabel

-->Tmax
!--error 4
Undefined variable: Tmax
-->S = L*(1 + (8/3)*(h/L)^2 - (32/5)*(h/L)^4)
!--error 4
Undefined variable: L

Dasar-Dasar Penggunaan Scilab - 23

Seperti pada contoh di atas, akan muncul sebuha pesan kesalahan apabila sebuah variabel
telah dihapus jika dipanggil atau digunakan kembali.

Membersihkan Jendela Scilab


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');
-->cd '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.
Tabel 3.1 Konstanta Matematika di dalam Scilab
Variabel

Deskripsi

%i

i=

%pi

= 3.1415927.....

%e

e = 2.7182818 .....

Contoh penggunaan konstanta-konstanta matematika di atas adalah sebagai berikut.


-->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.
Tabel 3.2 Operator Matematika
Operasi

Notasi Matematika

Notasi Scilab

Penjumlahan

a+b

a + b

Pengurangan

ab

a b

Perkalian

ab

a * b

Pembagian
Pemangkatan

a / b
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

Berikut ini ilustrasi berbagai macam perhitungan aritmatika.


-->1 + 2/(3*4)
ans =
1.1666667
-->(1 - 2/(3 + 2))/(1 + 2/(3 - 2))
ans =
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
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:
-->FA = 20;

// Gaya pada titik A (kN)

-->FB = 20;

// Gaya pada titik B (kN)

-->FC = 10;

// Gaya pada titik C (kN)

-->xA = 0;

// Letak gaya FA (m)

-->xB = 3;

// Letak gaya FB (m)

-->xC = 5;

// Letak gaya FC (m)

-->R = FA + FB + FC
R =

// Resultan gaya R (kN)

50.
-->d = (FA*xA + FB*xB + FC*xC)/R
d =

// Letak gaya R (m)

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:

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.
-->epsilon = 12;

// gaya gerak listrik

-->r = 0.05;

// tahanan internal baterei (Ohm)

-->R = 3;

// tahanan luar (Ohm)

-->I = epsilon/(R + r)
I =

// arus yang mengalir pada rangkaian (Ampere)

3.9344262
-->V = epsilon - I*r
V =

// beda tegangan pada terminal baterei (Volt)

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.
Perhitungan massa radioaktif yang tertinggal adalah sebagai berikut.
-->massa_awal = 10;
-->waktu_paruh = 150;

Matematika Dasar - 30

-->waktu = 300;
-->massa_tersisa = massa_awal * (1/2)^(waktu/waktu_paruh)
massa_tersisa =
2.5

Sehingga setelah 300 hari, bahan radioaktif yang tertinggal yaitu sejumlah 2.5 gram.

Variabel-Variabel Khusus untuk Aritmatika Komputer


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.
Tabel 3.3 Daftar Beberapa Konstanta Aritmatika Komputer
Variabel

Deskripsi

%eps

Presisi komputer

%nan

Bukan sebuah bilangan (not a number)

%inf

Takhingga (, infinity)

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.


Berikut ini beberapa contoh ilustrasi mengenai variabel %eps.
-->%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

Pembagian dengan Nol


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?
Penyelesaian. Kecepatan mobil dapat dihitung dengan rumus sebagai berikut:

Matematika Dasar - 34

dimana v0 adalah kecepatan awal, a adalah percepatan dan d jarak yang ditempuh.
Berikut ini statemen-statemen Scilab untuk menentukan kecepatan mobil.
-->v0 = 0;

// kecepatan awal [m/s];

-->a = 5;

// percepatan mobil [m/det^2]

-->d = 40;

// jarak tempuh [m]

-->v = sqrt(v0 + 2*a*d)


v =

// kecepatan mobil [m/s]

20.

Jadi kecepatan mobil adalah 20 m/det.


Contoh 5. Tentukan akar-akar dari persamaan kuadrat x2 + x + 1 = 0.
Penyelesaian. Akar-akar dari sebuah persamaan kuadrat ax2 + bx + c = 0 dapat dihitung
dengan menggunakan formula sebagai berikut :

Perhitungan akar-akar dari persamaan

adalah sebagai berikut:

-->a = 1; b = 1; c = 1;

// koefisien persamaan kuadrat

-->D = b^2 - 4*a*c;

// diskriminan

-->r1 = (-b + sqrt(D))/(2*a)


r1 =

// akar pertama

- 0.5 + 0.8660254i
-->r2 = (-b - sqrt(D))/(2*a)
r2 =

// akar kedua

- 0.5 - 0.8660254i

Jawaban yang diperoleh yaitu akar-akar dari persamaan kuadrat x2 + x + 1 = 0 adalah


-0.5 + 0.866i dan -0.5 - 0.866i.

Matematika Dasar - 35

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:
-->a = 2; b = -3; c = 6; d = 1;

// normal bidang

-->x0 = 1; y0 = -4; z0 = -3;

// Titik P0

-->D = abs(a*x0 + b*y0 + c*z0 + d)/sqrt(a^2 + b^2 + c^2)


D =
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.
Tabel 3.4 Fungsi-Fungsi Pembulatan
Fungsi

Deskripsi

round

Pembulatan

ceil

Pembulatan ke atas

floor

Pembulatan ke bawah

fix atau int

Pembulatan ke arah nol

clean

Pembulatan nilai yang sangat kecil menjadi nol

Matematika Dasar - 37

Contoh-contoh penggunaan fungsi pembulatan adalah sebagai berikut:


-->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.

Aproksimasi Bilangan Real dengan Bilangan Rasional


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

Ilustrasi penggunaan fungsi rat adalah sebagai berikut:


-->[n,d] = rat(1.25)
d =

4.
=
5.

-->[m,n] = rat(%pi,0.001)
n =

7.
=
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

Tabel 3.5 Fungsi-Fungsi Trigonometri


Fungsi

Deskripsi

sin

Sinus (radian)

sind

Sinus (derajat)

cos

Cosinus (radian)

cosd

Cosinus (derajat)

tan

Tangen (radian)

tand

Tangen (derajat)

cotg

Cotangen (radian)

asin

Inverse sinus (radian)

asind

Inverse sinus (derajat)

acos

Inverse cosinus (radian)

acosd

Inverse cosinus (derajat)

atan

Inverse tangen (radian)

atand

Inverse tangen (derajat)

Contoh-contoh penggunaan fungsi-fungsi trigonometri adalah sebagai berikut:


-->sin(%pi/3)
ans =
0.8660254
-->cosd(45)
ans =
0.7071068
-->tan(%pi/4)
ans =
1.

Berikut ini adalah beberapa contoh pengunaan fungsi-fungsi inverse trigonometri.


-->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.
Statemen-statemen untuk menghitung jarak jangkauan peluru adalah sebagai berikut:
-->v0 = 72;

// kecepatan awal (m/detik)

-->theta = 60;

// sudut tembakan (derajat)

-->g = 9.81;

// percepatan gravitasi (m/detik^2)

-->r = v0^2*sind(2*theta)/g
r =

// jangkauan peluru (m)

457.64278

Jadi jangkauan peluru adalah sejauh 457.6 m.


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
cos a b sin b sin cos

Berikut ini adalah statemen-statemen Scilab untuk menghitung gaya F.


-->M = 15;

// Nm

-->phi = 60;

// derajat

-->theta = 30;

// derajat

-->a = 0.05;

// m

-->b = 0.30;

// m

-->F = M/(cosd(theta)*(a + b*sind(phi)) - b*sind(theta)*cosd(phi))


F =
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.
Tabel 3.6 Fungsi-Fungsi Hiperbolik dan Inverse Hiperbolik
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
2
FH
asinh tan
w

Tmax

FH
cos

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

-->g = 9.81;

// percepatan gravitasi (m/s^2)

-->rho = 0.9;

// density kabel (kg/m)

-->w = rho*g;

// berat satuan kabel;

-->theta = 22/180*%pi;

// sudut kemiringan pd ujung kabel (rad)

-->a = 30;

// jarak antar tiang (m)

-->FH = w*(a/2)/asinh(tan(theta))
FH =

// Gaya horisontal (N)

336.32494
-->Tmax = FH/cos(theta)
Tmax =

// Tegangan tarik maksimum pd kabel (N)

362.73813
-->h = FH/w*(cosh(w*(a/2)/FH) - 1)
h =

// Tinggi lendutan maksimum

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.

Eksponensial dan Logaritma


Daftar dari fungsi-fungsi exponensial dan logaritma yang terdapat terpasang di dalam
Scilab diberikan pada Tabel 3.7.

Tabel 3.7 Fungsi-Fungsi Exponensial dan Logaritma


Fungsi

Deskripsi

exp

Exponensial

nextpow2

Pangkat dua terbesar selanjutnya

log

Logaritma alami

log2

Logaritma base 2

log10

Logaritma base 10

Matematika Dasar - 45

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|.
Contoh penggunaan fungsi-fungsi exponensial dan logaritma adalah sebagai berikut:
-->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.210-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:
-->kopi = 1.2E-6;

// kandungan ion hidrogen dalam kopi

-->pH_kopi = -log10(kopi)
pH_kopi =
5.9208188

Jadi nilai pH kopi adalah sekitar 5.9.

Matematika Dasar - 46

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:
-->y0 = 5.3;

// jumlah penduduk pada awal th 1990 (milyar)

-->k = 0.02;

// laju pertumbuhan pertahun

-->t = 20151990;

// selang waktu sejak awal th 1990 (tahun)

-->y = y0*exp(k*t)
y =

// jumlah penduduk pada awal th 2015 (milyar)

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

Operasi Aritmatika terhadap Bilangan Kompleks


Operasi aritmatika terhadap suatu bilangan kompleks dapat dilakukan dengan
menggunakan notasi yang sama seperti notasi pada bilangan real. Berikut ini beberapa
contoh operasi aritmatika terhadap bilangan kompleks.
-->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

Komponen Real dan Imajiner.


Komponen real dan imajiner dari suatu bilangan kompleks dapat diekstrak dengan
menggunakan fungsi real dan imag, seperti pada contoh di bawah ini.
-->x = 3 + 4*%i;
-->real(x)
ans =
3.
-->imag(x)
ans =
4.

Conjugate Bilangan Kompleks.


Jika z = x + iy maka conjugate untuk bilangan compleks tersebut didefiniskan sebagai

Conjugate suatu bilangan kompleks dapat dihitung dengan fungsi conj, seperti pada contoh
di bawah ini.
-->w = 8 + 10*%i;
-->conj(w)
ans =
8. - 10.i

Matematika Dasar - 49

Modulus Bilangan Kompleks


Modulus atau nilai mutlak dari bilangan z = x + iy didefinisikan sebagai berikut
| |

Modulus bilangan kompleks dapat kita hitung dengan fungsi abs.


-->v = 12 - 5*%i;
-->abs(v)
ans =
13.

Bentuk Polar dari Bilangan Kompleks


Selain dalam notasi kartesian (x, y) sebuah bilangan komplek z = x + iy juga dapat
dinyatakan dengan notasi koordinat polar (r, ) sebagai berikut:
( )

(
dimana:

( ))

( )

Seperti yang diilustrasikan pada gambar di bawah ini.

Gambar 3.4 Ilustrasi Bentuk Polar dari Bilangan Kompleks


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

-->theta = atand(imag(z),real(z))
theta =

// derajat

126.8699

Jadi bentuk polar untuk bilangan kompleks z = -3 + 4i adalah


z = 5 (cos(126.9o) + i sin(126.9o))
Notasi Eksponensial untuk Bentuk Polar
Dengan menggunakan identitas Euler:
( )

( )

( ). Bilangan komplek

( )) juga dapat dinyatakan dalam notasi ekponensial

notasi ini sudut harus dinyatakan dalam satuan radian.


Berikut ini adalah ilustrasi penulisan bilangan kompleks dalam notasi eksponensial.
-->z = -3 + 4*%i;
-->r = abs(z)
r =
5.
-->theta = atan(imag(z),real(z))
theta =

// radian

2.2142974
-->r*exp(theta*%i)
ans =
- 3. + 4.i

Terlihat bahwa statemen 5*exp(2.21*%i) ekuivalen dengan statemen -3 + 4*%i.

. Dalam

Bab 4
Matrik dan Vektor

Definisi Matrik dan Vektor


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.
-->a = 123
a

// skalar

=
123.

-->v = [1 2 3 4 5]
v =
1.

2.

3.

-->w = [4; 4; 2]
w =

// vektor baris (1 x 5)
4.

5.
// vektor kolom (3 x 1)

4.
4.
2.
-->M = [1 3 5; 2 4 6]
M =
1.
2.

3.
4.

5.
6.

// matrik (2 x 3)

Matrik dan Vektor - 52

Pembuatan Vektor dan Matrik Secara Manual


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.

-->v3 = [10; 11; 12]


v3 =
10.
11.
12.

Dalam pembuatan suatu matrik, elemen-elemennya harus dimasukkan secara perbaris.


Elemen-elemen yang terdapat dalam satu baris yang sama dapat dipisahkan dengan tanda
spasi atau tanda koma. Kemudian diantara suatu baris dengan baris lainnya dapat
dipisahkan dengan tanda titik-koma atau dengan tombol ENTER.
-->A = [9 7 5; 1 4 3]
A =
9.
1.

7.
4.

-->B = [1 2 4
--> 2 4 8
--> 3 6 12]
B =
1.
2.
3.

2.
4.
6.

5.
3.
[Enter]
[Enter]

4.
8.
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:
-->D = [(1+2) 3*4; exp(1) log(10)]
D =
3.
2.7182818

12.
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 =
2011.

2012.

2013.

2014.

2015.

2016.

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 =
0.

0.25

0.5

0.75

1.

1.25

1.5

1.75

2.

-->y = 10:-2:1
y =
10.

8.

6.

4.

2.

Fungsi-Fungsi untuk Membuat Suatu Vektor


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.
Berikut ini contoh penggunaan fungsi linspace.
-->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.
Ilustrasi penggunaan fungsi logspace adalah sebagai berikut:
-->x = logspace(1,2,4)
x =
10.

21.544347

46.415888

100.

Fungsi-Fungsi untuk Membuat Suatu Matrik


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.
1.

0.
0.

0.
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

mempunyai dimensi yang sama dengan dimensi matrik X.


Terdapat dua pilihan untuk argumen dist yaitu:
'uniform' untuk membuat bilangan random yang mempunyai distribusi seragam

dalam range [0,1]


'normal' untuk membuat bilangan random yang mempunyai distribusi normal

dengan nilai rata-rata 0 dan deviasi standar 1.


Argumen dist bersifat opsional apabila tidak dipergunakan maka bilangan random akan
dibuat dengan menggunakan distribusi seragam.
Berikut ilustrasi dari fungsi rand.
-->x = rand(2,4)
x =
0.8782165
0.0683740

0.5608486
0.6623569

0.7263507
0.1985144

0.5442573
0.2320748

-->Y = rand(3,3,'normal')
Y =
- 0.1884803
0.4241610
- 1.0327357

- 1.3874078
2.7266682
- 0.7123134

0.0698768
- 2.8759126
- 1.3772844

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

-->A = [9 8 7;6 5 4;3 2 1]


A =
9.
6.
3.

8.
5.
2.

7.
4.
1.

-->diag(A)
ans =
9.
5.
1.

Konkatenasi
Konkatenasi merupakan operasi penggabungan beberapa vektor atau matrik sehingga
menjadi sebuah vektor atau matrik baru yang lebih besar. Seperti pada operasi pembuatan
suatu vektor atau matrik secara manual, operasi konkatenasi juga dilakukan dengan
menggunakan operator kurung-siku kanan dan operator kurung-siku kiri ([ ]).
Beberapa contoh operasi konkatenasi adalah sebagai berikut:
-->V1 = [1 2 3 4];
-->V2 = [5 6 7 8];
-->V3 = [11 12 13 14];
-->V4 = [15 16 17 18];
-->P = [V1 V2]
P =
1.

2.

3.

4.

5.

6.

7.

8.

6.
16.

7.
17.

-->Q = [V1 V2;


-->
V3 V4]
Q =
1.
11.

2.
12.

3.
13.

4.
14.

-->N1 = [1 2 3 4 5];
-->N2 = [10 20 30; 11 21 31];
-->N3 = eye(2,2);

5.
15.

8.
18.

Matrik dan Vektor - 59

-->N = [N1; N2 N3]


N =
1.
10.
11.

2.
20.
21.

3.
30.
31.

4.
1.
0.

5.
0.
1.

Operasi konkatenasi hanya dapat dilakukan terhadap vektor-vektor atau matrik-matrik


yang mempunyai dimensi yang konsisten. Apabila persyaratan tersebut tidak dipenuhi
maka akan muncul sebuah pesan kesalahan seperti pada contoh di bawah ini.
-->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.
Berikut ini contoh penggunaan fungsi size.
-->A = [1 1 0 1; 1 0 2 0; 0 -2 2 -4];
-->[nr,nc] = size(A)
nc =

nr

4.
=
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.

Merubah Dimensi Matrik


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.
Berikut ini ilustrasi penggunaan fungsi matrix.
-->V = 1:12;
-->M = matrix(V,3,4)
M =
1.
2.
3.

4.
5.
6.

7.
8.
9.

10.
11.
12.

-->A = [1:4 ; 5:8 ; 9:12]


A =
1.
5.
9.

2.
6.
10.

3.
7.
11.

4.
8.
12.

-->B = matrix(A, 2, 6)
B =
1.
5.

9.
2.

6.
10.

3.
7.

11.
4.

8.
12.

Matrik dan Vektor - 61

-->C = matrix(A, -1, 4)


C =
1.
5.
9.

2.
6.
10.

3.
7.
11.

4.
8.
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

Mengekstrak Elemen-Elemen Suatu Vektor


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

Berikut ilustrasi proses ekstraksi beberapa elemen vektor sekaligus.


-->a = [1 3 5 7 9];
-->b = a(2:4)
b =
3.

5.

7.

-->c = a([5 1 3])


c =
9.

1.

5.

Mengekstrak Elemen-Elemen Suatu Matrik


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.
Berikut ini beberapa contoh proses ekstraksi elemen-elemen suatu matrik.
-->A = [1 2 3; 4 5 6; 7 8 9]
A =
1.
4.
7.

2.
5.
8.

-->a12 = A(1,2)
a12 =
2.
-->b = A(2,$)
b =
6.
-->A($,$)
ans =
9.

3.
6.
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.
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A =
1.
5.
9.
13.

2.
6.
10.
14.

3.
7.
11.
15.

4.
8.
12.
16.

-->A(3,:)
ans =
9.

10.

11.

12.

-->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 elemenelemen yang terletak pada semua baris atau semua kolom yang dimaksud.
-->A(2:3, 2:4)
ans =
6.
10.

7.
11.

8.
12.

Matrik dan Vektor - 64

-->A(3:4, :)
ans =
9.
13.

10.
14.

11.
15.

12.
16.

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.
-->A([1 2], [2 4])
ans =
2.
6.

4.
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

Merubah Nilai Elemen Suatu Vektor atau Matrik


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.

4.

12.

-->x($) = 12
x =
1.

3.

Matrik dan Vektor - 65

-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]


A =
1.
5.
9.
13.

2.
6.
10.
14.

3.
7.
11.
15.

4.
8.
12.
16.

3.
7.
11.
15.

4.
8.
12.
0.

-->A(4,4) = 0
A =
1.
5.
9.
13.

2.
6.
10.
14.

-->A(2,:) = [0 1 0 0]
A =
1.
0.
9.
13.

2.
1.
10.
14.

3.
0.
11.
15.

4.
0.
12.
0.

-->A(3:4, 1:3) = zero(2,3)


A =
1.
0.
0.
0.

2.
1.
0.
0.

3.
0.
0.
0.

4.
0.
12.
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.

1.
1.
1.

1.
1.
1.

0.
0.
0.

0.
0.
2.

Menghapus Elemen-Elemen Suatu Vektor atau Matrik


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.

-->xyz = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]


xyz =
16.
5.
9.
4.

3.
10.
6.
15.

2.
11.
7.
14.

13.
8.
12.
1.

2.
7.
14.

13.
12.
1.

-->xyz(2,:) = []
xyz =
16.
9.
4.

3.
6.
15.

-->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.
4.

2.
5.

3.
6.

-->Z(2,3) = []
!--error 15
submatrix incorrectly defined

Mencari Elemen-Elemen Matrik atau Vektor Yang Memenuhi Kriteria Tertentu


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 elemenelemen yang memenuhi kriteria yang diberikan dan jika tidak ada elemen yang memenuhi
kriteria maka outputnya adalah sebuah matrik kosong [ ].
Berikut ini adalah beberapa contoh penggunaan perintah find.
-->x = [0.8 1.2 5.8 8.9 0.3 7.2 1.5 5.6 0.2];
-->i = find(x > 2)
i =
3.

4.

-->y = x(i)
y =

6.

8.

Matrik dan Vektor - 68

5.8

8.9

7.2

5.6

-->k = find((x > 2) & (x <= 6))


k =
3.

8.

-->w = x(k)
w =
5.8

5.6

-->j = find(x > 10)


j =
[]
-->R = rand(4,4)
R =
0.923
0.100
0.468
0.395

0.037
0.518
0.833
0.610

0.187
0.019
0.843
0.075

0.853
0.012
0.187
0.492

-->i = find(R >= 0.5)


i =
1.

6.

7.

8.

11.

13.

-->X = R(i)
X =
0.923
0.518
0.833
0.610
0.843
0.853
-->j = find(R >= 0.95)
j =
[]

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

=
0.8

1.2

5.8

8.9

7.2

5.6

0.3

7.2

1.5

5.6

0.2

-->z = x(x > 2)


z =
5.8

8.9

-->v = x((x > 2) & (x <= 6))


v =
5.8

5.6

-->R
R =
0.923
0.100
0.468
0.395

0.037
0.518
0.833
0.61

0.187
0.019
0.843
0.075

0.853
0.012
0.187
0.492

-->R((R > 0.25) & (R < 0.75))


ans =
0.468
0.395
0.518
0.61
0.492

Dari contoh-contoh yang diberikan, terlihat bahwa proses pencarian elemen-elemen


matrik atau vektor yang memenuhi suatu kriteria tertentu lebih mudah untuk dilakukan
melalui subskripsi logika daripada dengan menggunakan fungsi find.

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.

Penjumlahan dan Pengurangan


Operasi penjumlahan atau pengurangan hanya dapat dilakukan terhadap vektor-vektor
atau matrik-matrik yang berdimensi sama. Sintaks untuk operasi penjumlahan dan
pengurangan matrik atau vektor masing-masing adalah sebagai berikut.
Z = X + Y
Z = X Y

Beberapa contoh operasi penjumlahan dan pengurangan terhadap matrik dan vektor
adalah sebagai berikut.
-->F1 = [2 3 0];
-->F2 = [0 -10 0];
-->F3 = [3 1 -5];
-->FResultan = F1 + F2 + F3
FResultan =
5.

- 6.

- 5.

-->A = [-4 6 3; 0 1 2]
A =
- 4.
0.

6.
1.

3.
2.

Operasi Matematika terhadap Matrik dan Vektor - 71

-->B = [5 -1 7; 3 1 8]
B =
5.
3.

- 1.
1.

7.
8.

-->C = A + B
C =
1.
3.

5.
2.

10.
10.

-->D = B - A
D =
9.
3.

- 7.
0.

4.
6.

Apabila operasi penjumlahan atau pengurangan dilakukan terhadap matrik-matrik atau


vektor-vektor yang tidak mempunyai dimensi yang sama maka akan muncul sebuah pesan
kesalahan, seperti yang terlihat pada contoh-contoh di bawah ini.
-->d = [1 3 7];
-->p = [3; 4; 3];
-->t = d - p
!--error 9
inconsistent subtraction
-->A = [-4 6 3; 0 1 2]
A =
- 4.
0.

6.
1.

3.
2.

-->Z = [7 -2; 3 8]
Z =
7.
3.

- 2.
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 =
0.

20.

40.

60.

80.

100.

-->T_Kelvin = 273.15 + T_Celcius


T_Kelvin =
273.15

293.15

313.15

333.15

353.15

373.15

-->P = [2001:2005; 2006:2010]


P =
2001.
2006.

2002.
2007.

2003.
2008.

2004.
2009.

2005.
2010.

-->Q = P - 2000
Q =
1.
6.

2.
7.

3.
8.

4.
9.

5.
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:
-->vpa = [400*cosd(60) 400*sind(60)];

Operasi Matematika terhadap Matrik dan Vektor - 73

-->vag = [0 -110];

Kecepatan relatif pesawat terhadap tanah (vpg) dapat dihitung sebagai berikut:
-->vpg = vpa + vag
vpg =
200.

236.41016

Gambar 5.1
Kemudian, laju pesawat (v) serta arah kecepatannya () dapat dihitung sebagai berikut:
-->v = sqrt(vpg(1)^2 + vpg(2)^2)
v =
309.66072
-->theta = atand(vpg(2),vpg(1))
theta =
49.769202

Diperoleh bahwa pesawat melaju dengan kecepatan 309.7 km/jam dengan arah N40oE.

Perkalian dan Pembagian antara Matrik atau Vektor dengan Skalar


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 =
0.

25.

50.

75.

100.

-->panjang_inch = panjang_cm/2.54
panjang_inch =
0.

9.8425197

19.685039

29.527559

39.370079

-->Temperature = 0:20:100
Temperature =
0.

20.

40.

60.

80.

100.

-->Tahanan = 0.288*Temperature + 28.123


Tahanan =
28.123

33.883

39.643

45.403

51.163

56.923

-->E = 210e6; A = 0.003; L = 1.5;


-->k = E*A/L*[1 -1; -1 1]
k =
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:
-->F = 100*[3 4 5]/sqrt(3^2 + 4^2 + 5^2)
F =
42.426407

56.568542

70.710678

Operasi Matematika terhadap Matrik dan Vektor - 75

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:
-->v1 = [30*cosd(60) 30*sind(60)]
v1 =
15.

25.980762

-->v2 = [25 0];

Maka kecepatan relatif (dv) antara v2 dengan v1.


-->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

Jadi percepatan mobil selama berbelok adalah 11 m/detik2.

Perkalian Matrik
Terdapat dua macam operasi dalam operasi perkalian matrik, yaitu:

Operasi perkalian matrik yang mengikuti kaidah aljabar linier.

Operasi perkalian matrik secara elemen-dengan-elemen.

Pada operasi perkalian matrik, pengertian matrik dipergunakan dalam arti yang luas
termasuk untuk vektor.
Perkalian Matrik yang Mengikuti Aturan Aljabar Linier
Dalam komputasi aljabar linier, operasi perkalian matrik hanya dapat dilakukan terhadap
matrik-matrik yang mempunyai dimensi cocok. Simbol bintang (*) adalah operator
perkalian matrik. Berikut ini adalah sintaks untuk operasi perkalian matrik
Z = X*Y

Operasi perkalian matrik ini hanya dapat dilakukan jika jumlah kolom dari matrik X sama
dengan jumlah baris dari matrik Y.
Berikut ini contoh-contoh operasi perkalian matrik yang mengikuti aturan aljabar linier.
-->p = [8 1 6; 3 5 7; 4 9 2]
p =
8.
3.
4.

1.
5.
9.

-->q = [0; 1; 0]
q =
0.
1.
0.

6.
7.
2

Operasi Matematika terhadap Matrik dan Vektor - 77

-->p*q
ans =
1.
5.
9.
-->A = [4 3; 7 2; 9 0]
A =
4.
7.
9.

3.
2.
0.

-->B = [2 5; 1 6]
B =
2.
1.

5.
6.

-->C = A*B
C =
11.
16.
18.

38.
47.
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
dihitung dengan persamaan sebagai berikut
*

+* +

berlawanan arah jarum jam yang dapat

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:
-->R = [cosd(30) -sind(30); sind(30) cosd(30)]
R =
0.8660254
0.5

// matrik rotasi

- 0.5
0.8660254

-->A = [2; 5];

// Komponen vektor A sebelum dirotasi

-->Arot = R*A
xrot =

// Komponen vektor A setelah dirotasi

- 0.7679492
5.330127

Jadi komponen vektor A setelah dirotasi adalah (-0.768, 5.330).


Contoh 5. Perusahaan SuperKomp memproduksi dua model komputer yaitu PC-A dan PCB. 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

-->Ongkos = 100000*[12 16; 3 4; 5 6]


Ongkos =
1200000.
300000.
500000.

1600000.
400000.
600000.

-->Produksi = 1000*[3 8 6 9; 6 2 4 3]
Produksi =
3000.
6000.

8000.
2000.

6000.
4000.

9000.
3000.

Kemudian total komponen ongkos produksi untuk setiap kuartal dapat dihitung dengan
cara sebagai berikut:
-->Total_Ongkos_perkuartal = Ongkos*Produksi
Total_Ongkos_perkuartal =
10^9 *
13.2
3.3
5.1

12.8
3.2
5.2

13.6
3.4
5.4

15.6
3.9
6.3

Jadi total komponen ongkos produksi pada setiap kuartal pada tahun 2010 adalah sebagai
berikut:

Perkalian Matrik Secara Elemen-dengan-Elemen


Operator untuk operasi perkalian matrik secara elemen-dengan-elemen adalah simbol
titik-bintang (.*). Sintaks operasi ini adalah sebagai berikut
Z = X.*Y

Operasi perkalian matrik secara elemen-dengan-elemen hanya dapat dilakukan terhadap


matrik-matrik yang mempunyai dimensi sama. Karena terdapat simbol titik di dalam
operatornya maka operasi ini kadang juga dinamakan operasi perkalian-titik.

Operasi Matematika terhadap Matrik dan Vektor - 80

Berikut ini contoh-contoh operasi perkalian matrik secara elemen dengan elemen.
-->n = 1:6
n =
1.

2.

3.

4.

9.

16.

5.

6.

-->nn = n.*n
nn =
1.

4.

25.

36.

-->X = [8 1 6; 3 5 7; 4 9 2]
X =
8.
3.
4.

1.
5.
9.

6.
7.
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.

Jika operasi perkalian elemen-dengan-elemen dilakukan terhadap matrik-matrik yang


dimensinya berbeda maka akan muncul sebuah pesan kesalahan seperti pada contoh di
bawah ini:
-->A = [4 3; 7 2; 9 0]
A =
4.
7.
9.

3.
2.
0.

-->B = [2 5; 1 6]
B =
2.
1.

5.
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:
-->a = 3; b = 3; c = 1.5;

// panjang segmen [m]

-->l = [a, b, c];


-->w1 = 1.5; w2 = 1; w3 = 2.5;

// intensitas beban [kN/m]

-->w = [w1, w2, w3];

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:
-->F = w.*l
F =
4.5

// gaya yang bekerja pada setiap segmen [kN]

3.

3.75

-->x = [a/2, a+b/2, a+b+c/2]


x =
1.5

4.5

6.75

// letak setiap gaya [m]

Operasi Matematika terhadap Matrik dan Vektor - 82

-->R = sum(F)
R =

// resultan gaya [kN]

11.25
-->M = sum(F.*x)
M =

// resultan momen pada titik A [kN.m]

45.5625
-->d = M/R
d =

// letak resultan gaya [m]

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
Terdapat dua macam operasi dalam operasi pembagian matrik, yaitu:

Operasi pembagian matrik yang melambangkan penyelesaian sebuah sistem


persamaan linier. Untuk operasi ini terdapat dua macam operator yaitu operator
pembagian kiri dan operator pembagian kanan.

Operasi pembagian matrik secara elemen-dengan-elemen.

Seperti pada operasi perkalian matrik, pengertian matrik pada operasi pembagian matrik
juga dipergunakan dalam arti yang luas termasuk untuk vektor.
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.
a11
a
A 21

a m1

a12
a 22

am2

a1n
a 2 n

a mn

x1
x
x 2


xn

b1
b
b 2


bm

Operasi Matematika terhadap Matrik dan Vektor - 83

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.
Contoh 7. Selesaikan sistem persamaan linier sebagai berikut:

][ ]

Penyelesaian. Koefisien matrik A dan vektor b dapat dinyatakan dengan statemenstatemen sebagai berikut.
-->A = [1 2 1 4; 2 0 4 3; 4 2 2 1; -3 1 3 2]
A =
1.
2.
4.
- 3.

2.
0.
2.
1.

1.
4.
2.
3.

4.
3.
1.
2.

-->b = [13; 28; 20; 6]


b =
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.
Contoh 8. Selesaikan sistem persamaan linier sebagai berikut:
[

]*

Penyelesaian. Misalkan matrik B dan A masing-masing adalah koefisien dari sistem


persamaan di atas maka B dan A dapat kita nyatakan dengan statemen-statemen sebagai
berikut:
-->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

Contoh 9. Selesaikan sistem persamaan linier sebagai berikut:


[

][

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.
1.

1.
- 1.
1.

0.
1.
1.

-->Z = [0 0 2; 4 2 3; 1 1 1]
Z =
0.
4.
1.

0.
2.
1.

2.
3.
1.

-->T = Z/Y
T =
0.
- 1.
0.

1.
0.
0.

1.
3.
1.

Pembagian Matrik Secara Elemen-dengan-Elemen


Operasi pembagian matrik secara elemen-dengan-elemen antara matrik A dengan matrik B
dapat diselesaikan dengan salah satu statemen sebagai berikut.
X = A ./ B
X = B .\ A

Operasi pembagian ini sering juga disebut sebagai operasi pembagian titik.

Operasi Matematika terhadap Matrik dan Vektor - 86

Berikut ini beberapa contoh pembagian matrik secara elemen-dengan-elemen.


-->A = [1 2; 3 4]
A =
1.
3.

2.
4.

-->B = [2 3; 9 7]
B =
2.
9.

3.
7.

-->A ./ B
ans =
0.5
0.3333333

0.6666667
0.5714286

-->B .\ A
ans =
0.5
0.3333333

0.6666667
0.5714286

Operasi pembagian matrik secara elemen-dengan-elemen juga dapat dilakukan antara


matrik dengan skalar, dimana operasi pembagiannya akan dilakukan antara skalar dengan
setiap elemen matrik.
-->x = [1 2 3 4 5];
-->y = 1.0./x
y =
1.

0.5

0.3333333

0.25

0.2

0.3333333

0.25

0.2

-->y = x.\1
y =
1.

0.5

-->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

-->H = G.\1
H =

0.3333333
0.25
0.2
// Cara lain yang lebih ringkas

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 =
0.1

0.001

0.00001

1.000D-07

1.000D-09

-->df = (sin(%pi/4 + h) - sin(%pi/4 - h))./(2*h)


df =
0.7059289

0.7071067

0.7071068

0.7071068

0.7071068

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

Operasi Pemangkatan yang Mengikuti Aturan Aljabar Linier


Misalkan A adalah suatu matrik bujur sangkar dan n adalah suatu skalar maka operasi
matematika

dapat dilakukan dengan menggunakan notasi sebagai berikut:

Y = A^n atau Y = A**n

Berikut ini adalah contoh sebuah operasi pemangkatan matrik.


-->P = [1 1 1; 1 2 3; 1 3 6]
P =
1.
1.
1.

1.
2.
3.

1.
3.
6.

-->Q = P^3
Q =
19.
45.
81.

// ekuivalen Q = P*P*P

45.
109.
198.

81.
198.
361.

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.
9.

2.
0.

3.
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

Penyelesaian. Misalkan A adalah matrik yang menyatakan probabilitas perubahan alokasi


lahan dalam inteval 5 tahun serta y2000 adalah vektor kolom yang menyatakan persentase
penggunaan lahan pada tahun 2000. Variabel A dan y2000 dapat kita nyatakan dengan
statemen sebagai berikut:
-->A = [0.7 0.1 0; 0.2 0.9 0.2; 0.1 0 0.8]
A =
0.7
0.2
0.1

0.1
0.9
0.

0.
0.2
0.8

-->y2000 = [25; 20; 55];

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.

Operasi Pemangkatan secara Elemen-dengan-Elemen


Berikut ini adalah notasi untuk operasi pemangkatan matrik secara elemen per elemen.
Y = A .^ B

Operasi pemangkatan ini hanya dapat dilakukan apabila A dan B memenuhi salah satu
kondisi sebagai berikut:

A adalah suatu matrik atau vektor dan B adalah suatu skalar. Pada kasus ini operasi

yang dilakukan adalah pemangkatan dari setiap elemen A dengan skalar B.

A adalah suatu skalar dan B adalah suatu matrik segiempat. Pada kasus ini operasi

yang dilakukan adalah pemangkatan skalar A dengan setiap elemen matrik B. Untuk
kasus ini, tanda titik di depan simbol ^ tidak perlu digunakan sehingga operasi
pemangkatannya juga dapat dinyatakan dengan notasi A^B.

A dan B adalah matrik-matrik yang mempunyai dimensi sama. Pada kasus ini operasi

yang dilakukan adalah pemangkatan dari setiap elemen A dengan setiap elemen B
yang sesuai.

Operasi Matematika terhadap Matrik dan Vektor - 91

Berikut ini beberapa contoh operasi pemangkatan secara elemen-dengan-elemen.


-->Z = [1 2; 3 4]
Z =
1.
3.

2.
4.

-->Z.^2
ans =
1.
9.

// Cara lain yang ekuivalen Z.*Z

4.
16.

-->n = 1:4
n =
1.

2.

3.

4.

-->10^n
ans =
10.

100.

1000.

10000.

-->x = [1 2; 4 8]
x =
1.
4.

2.
8.

-->y = [2 0.5; 0.5 2]


y =
2.
0.5

0.5
2.

-->x.^y
ans =
1.
2.

1.4142136
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

Penyelesaian. Berikut ini adalah statemen-statemen untuk menentuka nilai aproksimasi


konstanta matematika e.
-->n = logspace(0,8,5)
n =
1.

100.

10000.

1000000.

1.000D+08

-->e = (1.0 + 1.0./n).^n


e =
2.

2.7048138

-->%e
%e =

// Aproksimasi nilai e

2.7181459

2.7182805

2.7182818

// Konstanta e yang telah tersimpan di dalam Scilab

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:
-->massa_awal = 10;

// gram

-->waktu_paruh = 150;

// hari

-->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 radioaktif yg tersisa pada minggu 1-5
-->massa_tersisa(1:5)
ans =
9.9538968

9.6370712

9.3303299

9.033352

8.7458267

-->// massa radioaktif yang tersisa pada minggu 48-52


-->massa_tersisa($-4:$)
ans =
2.1763764

2.1071039

2.0400362

1.9751033

1.9122371

Matrik atau Vektor sebagai Argumen dari Suatu Fungsi Matematika


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 =
0.

0.7853982

1.5707963

2.3561945

6.123D-17

- 0.7071068

3.1415927

-->y = cos(x)
y =
1.

0.7071068

-->p = logspace(0,4,5)
p =
1.

10.

100.

1000.

-->q = log10(p)
q =
0.

1.

2.

3.

4.

10000.

- 1.

Operasi Matematika terhadap Matrik dan Vektor - 94

-->A = [1:4; 5:8; 9:12]


A =
1.
5.
9.

2.
6.
10.

3.
7.
11.

4.
8.
12.

-->B = exp(A)
B =
2.7182818
148.41316
8103.0839

7.3890561
403.42879
22026.466

20.085537
1096.6332
59874.142

54.59815
2980.958
162754.79

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.
Contoh 14. (Distribusi Poisson). Distribusi Poisson didefinisikan sebagai berikut :
( )

, ,

Diberikan = 2, hitung distribusi Poisson untuk nilai x = 0,1,2,3,4,5 ?


Penyelesaian. Dengan menggunakan rumus di atas, nilai distribusi Poisson (fpoisson)
untuk nilai x = 0,1,2,3,4,5 dengan = 2 dapat kita hitung dengan statemen-statemen
sebagai berikut :
-->mu = 2;
-->x = 0:5;
-->fpoisson = mu^x./factorial(x).*exp(-mu)
fpoisson =
0.13534

0.27067

0.27067

0.18045

0.09022

0.03609

Nilai Maksimum dan Minimum


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

Tabel 5.1 Fungsi Nilai Maksimum dan Minimum


Fungsi

Deskripsi

max(x)

Nilai maksimum dari semua elemen matrik atau vektor

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)

Nilai minimum dari semua elemen

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:
-->volume = [0.97, 1, 0.94, 1.03, 1.11, 1.06, 1.01];
-->min(volume)
ans =
0.94
-->M3 = [8 1 6; 3 5 7; 4 9 2]
M3 =
8.
3.
4.

1.
5.
9.

6.
7.
2.

-->max(M3)
ans =
9.
-->max(M3,'r')
ans =
8.

9.

7.

Operasi Matematika terhadap Matrik dan Vektor - 96

Fungsi-Fungsi Penjumlahan dan Perkalian


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.
Tabel 5.2 Fungsi-Fungsi Penjumlahan dan Perkalian
Fungsi

Deskripsi

sum(x)

Jumlah dari semua elemen

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

prod(x)

Perkalian terhadap semua elemen

prod(x,"r")

Perkalian terhadap elemen-elemen pada semua baris untuk setiap


vektor kolom yang menyusun matrik

prod(x,"c")

Perkalian terhadap elemen-elemen pada semua kolom untuk setiap


vektor baris yang menyusun matrik

Contoh penggunaan fungsi sum adalah sebagai berikut:


-->volume
volume =
0.97

1.

-->sum(volume)
ans =
7.12

0.94

1.03

1.11

1.06

1.01

Operasi Matematika terhadap Matrik dan Vektor - 97

-->M3
M3 =
8.
3.
4.

1.
5.
9.

6.
7.
2.

-->sum(M3,'r')
ans =
15.

15.

15.

Ilustrasi penggunaan fungsi prod adalah sebagai berikut:


-->i = 1:5;
-->prod(i)
ans =
120.
-->X = [1:3; 4:6; 7:9]
X =
1.
4.
7.

2.
5.
8.

3.
6.
9.

-->prod(X,'r')
ans =
28.

80.

162.

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.
Berikut ini adalah contoh-contoh penggunaan fungsi cumsum:
-->i = 1:5;
-->cumsum(i)
ans =
1.

3.

6.

10.

15.

Operasi Matematika terhadap Matrik dan Vektor - 98

Tabel 5.3 Fungsi-Fungsi Penjumlahan dan Perkalian


Fungsi

Deskripsi

cumsum(x)

Jumlah kumulatif dari semua elemen

cumsum(x,"r")

Jumlah kumulatif dari elemen-elemen pada semua baris untuk setiap


vektor kolom yang menyusun matrik
Jumlah kumulatif dari elemen-elemen pada semua kolom untuk

cumsum(x,"c")

setiap vektor baris yang menyusun matrik


cumprod(x)

Perkalian kumulatif terhadap semua elemen

cumprod(x,"r")

Perkalian kumulatif terhadap elemen-elemen pada semua baris


untuk setiap vektor kolom yang menyusun matrik
Perkalian kumulatif terhadap elemen-elemen pada semua kolom

cumprod(x,"r")

untuk setiap vektor baris yang menyusun matrik

-->mat = [8 1 6; 3 5 7; 4 9 2]
mat =
8.
3.
4.

1.
5.
9.

6.
7.
2.

-->cumsum(mat)
ans =
8.
11.
15.

16.
21.
30.

36.
43.
45.

Contoh-contoh penggunaan fungsi cumprod adalah sebagai berikut:


-->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.
4.

2.
5.

3.
6.

-->cumprod(A)
ans =
1.
4.

8.
40.

120.
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:
(

[ (

( )

)]

dimana n adalah jumlah segmen.


Statemen-statemen Scilab untuk menghitung nilai integral I adalah sebagai berikut:
-->function y = fx(x)
--> y = 0.2 + 25*x - 200*x^2 + 675*x^3 - 900*x^4 + 400*x^5
-->endfunction
-->a = 0; b = 0.8;

// batas bawah dan batas atas

-->n = 1000;

// jumlah segmen

-->n1 = n+1;
-->x = linspace(a,b,n1);
-->yxi = fx(x);
-->I = (b - a)/(2*n)*(yxi(1) + yxi(n1) + 2*sum(yxi(2:n)))
I =
1.6405308

Jadi nilai aproksimasi untuk integral I adalah 1.6405.

Operasi Matematika terhadap Matrik dan Vektor - 100

Contoh 16. (Aproksimasi konstanta e). Representasi nilai dari konstanta e dalam dalam
bentuk deret takhingga adalah sebagai berikut:

Dengan menggunakan deret di atas, hitung pendekatan nilai e?


Penyelesaian. Berikut ini adalah statemen-statemen untuk menghitung nilai aproksimasi
dari konstanta e, dengan menggunakan 10 suku awal dari deret di atas.
-->k = 0:10;
-->fk = factorial(k);
-->i = 1.0./fk;
->e = cumsum(i)
e =
column 1 to 7
1.

2.
column

2.718254

2.5

2.6666667

2.7083333

2.7166667

2.7180556

8 to 11
2.7182788

2.7182815

2.7182818

-->%e
// Nilai konstanta e yang tersimpan di dalam Scilab
ans =
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.

-->AT = A'
AT =
2.
4.
8.
16.
-->B1 = [13; 15]
B1 =
13.
15.

16.

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.
-->A = [1:3; 4:6; 7:9]
A =
1.
4.
7.

2.
5.
8.

3.
6.
9.

4.
5.
6.

7.
8.
9.

-->B = A'
B =
1.
2.
3.

Jika operasi transpose diaplikasikan terhadap sebuah matrik atau vektor yang elemenelemennya ada yang berupa suatu bilangan kompleks maka yang akan dihasilkan adalah
sebuah matrik transpose konjugat, seperti yang diperlihatkan pada contoh di bawah ini.
-->P = [1 3-4*%i; 5*%i
P =
1.
5.i

2+8*%i]

3. - 4.i
2. + 8.i

-->Q = P'
Q =
1.
3. + 4.i

- 5.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.
3. - 4.i

5.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:

Norma Euclidian atau (Norma L2): x

Norma-p: x

Norma-maksimum (Norma L): x

xip
i 1

x x x
2
1

2
2

2 1/ 2
n

xi2
i 1

1/ 2

1/ p

max x1 , x2 ,, xn

Sintak untuk menghitung norma vektor x adalah sebagai berikut


norm(x, p) untuk menghitung norma-p, biasanya digunakan nilai p = 1.
norm(x, 2), atau norm(x) untuk menghitung norma-Eucilidean.
norm(x, "inf") untuk norma-maksimum.

Berikut ini ilustrasi perhitungan norma vektor:


-->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];

Komponen dari vektor gaya FB dan FC dapat dihitung sebagai berikut:


-->FB = 840*b/norm(b)
FB =
360.

- 240.

- 720.

-->FC = 420*c/norm(c)
FC =
120.

180.

- 360.

Selanjutnya, komponen resultan gaya dan besarnya adalah sebagai berikut:


-->FR = FB + FC
FR =
480.

- 60.

-->R = norm(FR)
R =

// komponen resultan gaya

- 1080.
// besar resultan gaya

1183.385

Jadi besarnya resultan gaya adalah 1.18 kN.

Aljabar Linier - 105

Norma Matrik
Terdapat beberapa definisi dari norma matrik yaitu sebagai berikut:

A F ai , j
2

Norma matrik Frobenius:

i, j

Norma-matrik 2: A 2 max Ax

Norma-matrix 1: A 1 max aij

x s 1

Norma-matrik : A max
i

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 .

Contoh perhitungan norma matrik adalah sebagai berikut:


-->A = 1/sqrt(3)*[3 -1; 0 sqrt(8)]
A =
1.7320508
0.

- 0.5773503
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

Berikut ini contoh penggunaan fungsi rank.


-->L = [7 0; 0 5]
L =
7.
0.

0.
5.

-->rank(L)
ans =
2.
-->K = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]
K =
16.
5.
9.
4.

2.
11.
7.
14.

3.
10.
6.
15.

13.
8.
12.
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.
Berikut ini adalah contoh-contoh perhitungan determinan suatu matrik.
-->X = [2 6 4; 1 3 0; -1 0 2]
X =
2.
1.
- 1.
-->det(X)
ans =
12.

6.
3.
0.

4.
0.
2.

Aljabar Linier - 107

-->Z = [3 6 -4; 1 -1 3; 6 12 -8]


Z =
3.
1.
6.

6.
- 1.
12.

- 4.
3.
- 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
Penyelesaian. Anggap S adalah sebuah parallelipiped yang dihasilkan oleh kombinasi
linier dari vektor-vektor u1, u2 dan u3, maka volume S nilainya adalah sama dengan nilai
mutlak dari determinan matrik yang dihasilkan oleh konkatenasi dari vektor u1, u2 dan u3.
Volume parallelipiped S dapat dihitung dengan statemen-statemen sebagai berikut:
-->u1 = [1 1 0]; u2 = [1 1 1]; u3 = [0 2 3];
-->solid = [u1; u2; u3];
-->volumeSolid = abs(det(solid))
volumeSolid =
2.

Diperoleh bahwa volume dari parallelipiped S adalah 2.

Aljabar Linier - 108

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).
Berikut ini contoh perhitungan matrik inverse.
-->X
X =
2.
1.
- 1.

6.
3.
0.

4.
0.
2.

-->Y = inv(X)
Y =
0.5
- 0.1666667
0.25

- 1.
0.6666667
- 0.5

- 1.
0.3333333
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.
-->Z = [3 6 -4; 1 -1 3; 6 12 -8]
Z =
3.
1.
6.

6.
- 1.
12.

- 4.
3.
- 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.

Anggap vektor-vektor kolom Y, X dan , masing-masing didefinisikan sebagai berikut:


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];
-->Y = [439; 439.12; 439.21; 439.31; 439.40; 439.50];
-->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

Penyelesaian Sistem Persamaan Linier


Suatu sistem persamaan linier yang terdiri dari m persamaan serta n variabel takdiketahui
dapat dinyatakan dengan notasi matematika sebagai berikut:

a11 x1 a12 x 2 a1n x n b1


a 21 x1 a 22 x 2 a 2 n x n b2

a m1 x1 a m 2 x 2 a mn x n bm
dimana aij adalah koefisien dari variabel yang takdiketahui, xj adalah nama variabelvariabel yang takdiketahui dan bi adalah koefisien pada sisi kanan persamaan.
Anggap A adalah matrik yang menyatakan koefisien dari variabel-variabel yang
takdiketahui, x adalah vektor kolom yang menyatakan variabel yang takdiketahui serta b
adalah vektor kolom yang menyatakan koefisien pada sisi kanan persamaan.
a11
a
A 21

a m1

a12
a 22

am2

a1n
a 2 n

a mn

x1
x
x 2


xn

b1
b
b 2


bm

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.

Contoh 4. Tentukan penyelesaian dari sistem persamaan linier sebagai berikut.


2x y z 1
6 x 2 y z 1
2x 2 y z 7

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];
-->b = [1; -1; 7];

Variabel-variabel yang takdiketahui dapat dihitung dengan statemen sebagai berikut.


-->sol = A\b
sol =
- 1.
2.
1.
-->A*sol
ans =

// Pengecekan hasil perhitungan

1.
- 1.
7.

Penyelesaian untuk sistem persamaan ini adalah x = -1, y = 2, z = 1.

Aljabar Linier - 112

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];
-->B = [0; 0; 0; 0; 10; 10; 0];

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?
Penyelesaian. Berikut ini adalah statemen-statemen untuk menghitung koefisien dari
garis regresi linier.
-->X
X =
1.
1.
1.
1.
1.
1.

0.
2.
4.
6.
8.
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.
Metode Eliminasi Gauss-Jordan
Metode eliminasi adalah suatu prosedur perhitungan sistematis untuk merubah sebuah
sistem persamaan linier menjadi sistem persamaan linier lain yang ekuivalen namun lebih
sederhana bentuknya. Penyelesaian sistem persamaan linier Ax = b dengan metode
eliminasi Gauss-Jordan dapat dilakukan dengan perintah sebagai berikut:
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];
-->b = [1; -1; 7];
-->MOrig = [A b]
MOrig =
2.
6.
- 2.

1.
2.
2.

1.
1.
1.

1.
- 1.
7.

Operasi eliminasi Gauss-Jordan terhadap matrik MOrig dapat dilakukan dengan statemen
sebagai berikut:
-->MGJ = rref(MOrig)
MGJ =
1.
0.
0.

0.
1.
0.

0.
0.
1.

- 1.
2.
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
6 x 2 y z 1
2x 2 y z 7

x
y

2
z 1

Sehingga jawaban yang diperoleh yaitu x = -1, y = 2, z = 1.

Aljabar Linier - 116

Contoh 8. Selesaikan sistem persamaan di bawah ini dengan menggunakan metode


eliminasi Gauss-Jordan.

2 x1 4 x 2 6 x3 2
x1 2 x 2 3 x3 1
x3 3

x1
2 x1 4 x 2

Penyelesaian. Berikut ini adalah statemen-statemen untuk menyelesaikan sistem


persamaan linier tersebut dengan metode eliminasi Gauss-Jordan.
-->A2 = [2 4 6; 1 2 3; 1 0 1; 2 4 0];
-->b2 = [2; 1; -3; 8];
-->Sol2 = rref([A2 b2])
Sol2 =
1.
0.
0.
0.

0.
1.
0.
0.

0.
0.
1.
0.

- 2.
3.
- 1.
0.

Sistem persamaan linier sebelum dan sesudah dilakukan proses eliminasi dapat
dinyatakan sebagai berikut.

2 x1 4 x 2 6 x3 2
x1 2 x 2 3 x3 1
x1

x3 3

2 x1 4 x 2

x1

x2

3
x3 1
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.
Metode Matrik Inverse
Penyelesaian sistem persamaan linier Ax b dengan metode matrik inverse diperoleh
dengan menggunakan persamaan x A1b . Perhitungan ini dapat diselesaikan dengan
statemen Scilab sebagai berikut:
x = inv(A)*b.

Aljabar Linier - 117

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.
6.
- 2.

1.
2.
2.

1.
1.
1.

-->b
b =
1.
- 1.
7.

Variabel yang takdiketahui (sol) dihitung dengan statemen sebagai berikut:


-->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 dan Vektor Eigen


Nilai eigen dari suatu matrik A yang berukuran n x n adalah suatu bilangan (real atau
kompleks) sehingga persamaan sebagai berikut:
mempunyai penyelesaian nontrivial, yaitu penyelesaian dimana x 0. Vektor x adalah

Aljabar Linier - 118

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 =
7.3
- 11.5
17.7

0.2
1.
1.8

- 3.7
5.5
- 9.3

-->[x,l] = spec(Z)
l =
- 4.
0
0
x =

0
0
0

0
0
3.

0.3015113
- 0.3015113
0.9045340

0.4364358
0.2182179
0.8728716

0.3015113
- 0.9045340
0.3015113

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

Tentukan tegangan-tegangan utama dari sistem tegangan tersebut?


Penyelesaian. Anggap sigma adalah matrik yang menyatakan sistem tegangan.
-->sigma = [40 20 30; 20 60 10; 30 10 50]
sigma =
40.
20.
30.

20.
60.
10.

30.
10.
50.

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 koefisienkoefisien polinomial dan n adalah derajat polinomial.
Rasional adalah suatu fungsi matematika yang mempunyai bentuk sebagai berikut:
( )

Pembuatan Fungsi Polinomial


Suatu fungsi polinomial dapat dibuat dengan tiga macam cara. Cara pertama yaitu dengan
menggunakan variabel khusus %s seperti pada contoh berikut ini.
-->p = 2 - 3*%s + %s^2
p =
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.
2
3
Sebagai contoh, fungsi polinomial Rx 6 x 5x dapat dibuat cara sebagai berikut:

-->R = poly([6 0
R =

-1 5],'x','coeff')

2
3
6 - x + 5x

Kemudian fungsi polinomial As s 1s 2 dapat dibuat dengan cara sebagai berikut:


-->A = poly([1 2],'s')
A =
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')
2
Sebagai contoh, polinomial Bx x 14 x 49 dapat dibuat dengan cara sebagai berikut.

-->x = poly(0,'x');
-->B = x^2 - 14*x + 49
B =
2
49 - 14x + x

Derajat Polinomial
Derajat suatu fungsi polinomial dapat diketahui dengan fungsi degree, seperti yang
ditunjukkan pada contoh di bawah ini.
-->C = poly([1 1 1 3 4 4],'x','roots')
C =
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.
Contoh penggunaan fungsi coeff adalah sebagai berikut.
-->C
C =
2
3
4
5
6
48 - 184x + 275x - 202x + 76x - 14x + x
-->v = coeff(C)
v =
48.

- 184.

275.

- 202.

76.

- 14.

1.

-->coeff(C,[0 1 3])
ans =
48.

- 184.

- 202.

Pembuatan Fungsi Rasional


Suatu fungsi rasional dapat dibuat dengan melakukan operasi pembagian terhadap dua
fungsi polinomial, seperti yang diilustrasikan pada contoh-contoh di bawah ini.
-->P = poly([3 2 1],'x','coeff')
P =
2
3 + 2x + x

Polinomial dan Rasional - 123

-->Q = poly([6 7 8 9],'x','coeff')


Q =
2
3
6 + 7x + 8x + 9x
-->R = P/Q
R =
2
3 + 2x + x
---------------2
3
6 + 7x + 8x + 9x
-->a = poly([-4 3 1],'x','coeff')
a =
2
- 4 + 3x + x
-->b = poly([4 1],'x','coeff')
b =
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.
-->R = (3 + 2*%s + %s^2)/(6 + 7*%s + 8*%s^2 + 9*%s^3)
R =
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 Fungsi Polinomial dan Rasional


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.
Berikut ini beberapa ilustrasi penggunaan fungsi horner.
-->s = poly(0,'s');
-->P = 5*s^3 - s^2 + 6
P =
2
3
6 - s + 5s
-->horner(P, 4)
ans =
310.
-->R = (5*s^3 - s^2 + 6)/(4*s^4 - 10*s^2 + 1)
R =
2
3
6 - s + 5s
-----------2
4
1 - 10s + 4s
-->horner(R,[0 10])
ans =
6.

0.1257916

Polinomial dan Rasional - 125

Penjumlahan dan Pengurangan


Operasi penjumlahan dan pengurangan terhadap suatu fungsi-fungsi polinomial atau
rasional dapat dengan menggunakan operator tambah (+) dan operator kurang (-), seperti
yang ditunjukkan pada contoh-contoh di bawah ini.
-->P = poly([3 2 1],'x','coeff')
P =
2
3 + 2x + x
-->Q = poly([6 7 8 9],'x','coeff')
Q =
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;
-->f2 = x/(x + 2);
-->f1 - f2
ans =
2
4 + 2x - x
---------2
2x + x
-->r1 = 2/(x^2 + x);
-->r2 = 3/(x^2 + 1);

-->R = r1 + r2

Polinomial dan Rasional - 126

=
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
-->v = x^2 - 4*x + 4
v =
2
4 - 4x + x
-->w = t*v
w =
2
3
- 6 - x + 4x - x
-------------1

Pembilang dan Pembagi dari Fungsi Rasional


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');
-->p = (6 - x^2 + 5*x^3)/(-4 + x)
p =
2
3
6 - x + 5x
---------- 4 + x
-->numer(p)
ans =
2
3
6 - x + 5x
-->denom(p)
ans =
- 4 + x

Polinomial dan Rasional - 128

Hasil Bagi dan Sisa dari Suatu Pembagian Polinomial


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.
-->p1 = poly([6 0
p1 =

-1 5],'x','c')

2
3
6 - x + 5x
-->p2 = poly([-4 1],'x','c')
p2 =
- 4 + x
-->[r,q] = pdiv(p1,p2)
q =
2
76 + 19x + 5x
r

=
310.

Penyelesaian yang diperoleh adalah sebagai berikut:

5x 3 x 2 6
310
5 x 2 19 x 76
x 4
x 4

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 akarakar dari polinomial P(x) dimana jika terdapat akar-akar majemuk maka akan terdapat
beberapa elemen vektor yang mempunyai nilai sama.
Berikut ini contoh-contoh penggunaan fungsi roots.
-->p = poly([-1 -1 1],'x','c')
p =
2
- 1 - x + x
-->roots(p)
ans =
- 0.6180340
1.618034
-->Q = poly([-6 6 -2 2],'x','c')
Q =
2
3
- 6 + 6x - 2x + 2x
-->q = roots(Q)
q =
1.
1.7320508i
- 1.7320508i
-->Z = -18 + 21*%s + %s^2 - 5*%s^3 + %s^4
Z =
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
Penyelesaian. Berikut ini adalah statemen-statemen yang menyatakan percepatan
gravitasi, kecepatan awal peluru dan posisi awal peluru.
-->g = 9.81;

// percepatan gravitasi [m/det^2]

-->v0x = 40;

// kecepatan awal pada sumbu horisontal [m/det]

-->v0y = 20;

// kecepatan awal pada sumbu vertikal [m/det]

-->x0 = 0;

// posisi awal pada sumbu horisontal [m]

-->y0 = 100;

// posisi awal pada sumbu vertikal [m]

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');
-->// posisi pada sumbu horisontal [m] saat detik ke-t
-->x = x0 + v0x*t
x =
40t

Polinomial dan Rasional - 131

-->// posisi pada sumbu vertikal [m] saat detik ke-t


-->y = y0 + v0y*t - 0.5*g*t^2
y =
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
-->r = horner(x,tr(2))
r =

// jangkauan peluru [m]

279.71625

Jadi jangkauan peluru adalah 279.7 m.

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.
Ilustrasi penggunaan fungsi polfact adalah sebagai berikut:
-->R = 2*%s^3 + 3*%s^2 - 5*%s - 6
R =
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');
-->y = 6 + 5*x^3 - x^2
y =
2
3
6 - x + 5x
-->dy = derivat(y)
dy =
2
- 2x + 15x
-->r = poly(0,'r');
-->A = 2*%pi*r^2 + 4*%pi/r
A =
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

-->g = 9.81;

// percepatan gravitasi [m/det^2]

-->v0y = 20;

// kecepatan awal pada sumbu vertikal [m/det]

-->y0 = 100;

// posisi awal pada sumbu vertikal [m]

-->t = poly(0,'t');
-->// posisi pada sumbu vertikal [m] saat detik ke-t
-->y = y0 + v0y*t - 0.5*g*t^2
y =
2
100 + 20t - 4.905t

Kecepatan peluru pada sumbu vertikal dapat diperoleh dengan statemen sebagai berikut:
-->vy = derivat(y)
vy =

// kecepatan peluru pada sumbu vertikal [m/s]

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.
-->ymaks = horner(y,t_ymaks)
ymaks =

// posisi maksimum peluru [m]

120.38736

Jadi posisi maksimum peluru pada sumbu vertikal adalah 120.4 m.


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
Penyelesaian. Dengan menggunakan data-data yang diberikan volume kotak dapat
dinyatakan dengan statemen-statemen Scilab sebagai berikut:
-->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 dan Matrik Rasional


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');
-->E = [s, s^2; 1, 1+s]
E =

// contoh matrik polinomial

2
s

1 + s

-->E(3,3) = 1 + s + s^2
E =
2
s

1 + s

0
2

1 + s + s

-->cs = [1/(%s^2 + 1), 1/%s]


cs =
1
----2
1 + s

// contoh matrik rasional

1
s

-->cs(1,2) = 1/(1 - s^2)


cs =
1
----2
1 + s

1
----2
1 - s

Beberapa operasi-operasi aljabar linier, seperti matrik transpose, determinan, matrik


inverse, perkalian matrik, juga dapat dilakukan terhadap suatu matrik polinomial atau
matrik rasional, seperti yang ditunjukkan pada contoh-contoh berikut ini.

Polinomial dan Rasional - 136

-->I = [1 0; 0 1];
-->A = [2 -1; -2 1];
-->v = [1; 1];
-->cs = [1/(%s^2 + 1); 1/%s];
-->K = %s*I - A
K =
- 2 + s
2

1
- 1 + s

-->K'
ans =
- 2 + s
1

2
- 1 + s

-->det(K)
ans =
2
- 3s + s
-->Z = inv(K)*(v + cs)
Z =
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

Contoh 4 (Polinomial karakteristik). Tentukan polinomial karakteristik dari matrik


sebagai berikut:
[

Penyelesaian. Polinomial karakteristrik PA() dari matrik A yang berukuran n x n adalah


sebuah polinomial derajat n yang diperoleh dari perhitungan determinan matrik (

),

dimana I adalah matrik satuan.


( )

|
|

( )

|
|

Akar-akar dari polinomial karakteristik PA() adalah nilai-nilai eigen dari matrik A.
Polinomial karakteristik dari matrik di atas dapat diperoleh dengan statemen-statemen
sebagai berikut:
-->A = [2 1 -1; 3 2 -3; 3 1 -2]
A =
2.
3.
3.

1.
2.
1.

- 1.
- 3.
- 2.

-->x = poly(0,'x');
-->M = A - eye(3,3)*x
M =
2 - x

- 1

2 - x

- 3

- 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:
( )
Akar dari polinomial karakteristik PA adalah nilai-nilai eigen dari matrik A.
-->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.
-->xstr = "Komputasi Teknik dengan Scilab"
xstr =
Komputasi Teknik dengan Scilab
-->FreeMathSoft = ['Scilab', 'R', 'Maxima']
FreeMathSoft =
!Scilab

Maxima

Penggabungan String
Beberapa string dapat digabung menjadi sebuah string baru dengan menggunakan
operator tambah (+), seperti yang terlihat pada contoh di bawah ini:
-->s1 = 'Komputasi Teknik';
-->s2 = 'Visualisasi Data';
-->ss = s1 + ' dan ' + s2
ss =
Komputasi Teknik dan Visualisasi Data

Panjang String
Fungsi length juga dapat kita gunakan untuk mengentahui panjang dari suatu string
seperti pada contoh berikut ini.

String - 140

-->SciNum = "Komputasi Numerik dengan Scilab";


-->length(SciNum)
ans =
31.

Ekstraksi Karakter String


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.


Berikut ini contoh penggunaan fungsi part.
-->ss
ss =
Komputasi Teknik dan Visualisasi Data
-->part(ss, 1:9)
ans =
Komputasi
-->part(ss, [11:16,34:37])
ans =
TeknikData

Mencari Posisi Suatu String pada String yang Lain


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

Contoh penggunaan fungsi strindex adalah sebagai berikut:


-->SciNum = "Komputasi Numerik dengan Scilab";
-->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
-->id = strsplit(SciNum, [10 18])
id =
!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

Berikut ini contoh-contoh penggunaan fungsi tokens.


-->ss = "Komputasi Teknik dan Visualisasi Data";
-->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:
-->fem = "Metode Elemen Hingga";
-->bem = strsubst(fem,"Hingga","Batas")
bem =
Metode Elemen Batas

String - 143

Penggabungan Elemen-Elemen Suatu Matrik String


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.
Berikut ini contoh penggunaan fungsi strcat.
-->sci = ["Scilab" "Scicos"];
-->strcat(sci)
ans =
ScilabScicos

Konversi ke Huruf Besar dan Huruf Kecil


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:
-->convstr("Metode Numerik", "U")
ans =
METODE NUMERIK

Konversi dari Karakter ke Kode ASCII atau Sebaliknya


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.
-->x = "Sci Comp";

String - 144

-->k = ascii(x)
k =
83.

99.

105.

32.

67.

111.

109.

112.

-->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

Konversi dari Numerik ke String


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

Evaluasi terhadap Suatu String Ekspresi


Sebuah string yang melambangkan suatu ekpresi matematika dapat dievaluasi nilainya
dengan menggunakan fungsi eval atau evstr, seperti pada contoh-contoh di bawah ini.
-->c = eval("sqrt(6^2 + 8^2)")
c =
10.
-->w = "cosd(45)";
-->evstr(w)
ans =
0.7071068

String - 145

-->D = ['2' '0'; '0' '4']


D =
!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

Operasi Matrik terhadap Suatu Matrik String


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.
-->sci = ["Scilab" "SciNotes"]
sci =
!Scilab

SciNotes

-->sci($+1) = "Xcos"
sci =
!Scilab

SciNotes

Xcos

-->sci(2)
ans =
SciNotes
-->u = ["u1" "u2" "u3"];
-->v = ["v1" "v2" "v3"];

// penambahan elemen matrik

!
// ekstraksi elemen matrik

String - 146

-->uv = [u; v]
uv =
!u1
!
!v1

u2

u3

v2

v3

-->uv'
ans =
!u1
!
!u2
!
!u3

v1
v2
v3

// konkatenasi matrik

!
!
!
// transpose

!
!
!
!
!

Bab 9
Tanggal dan Waktu

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 =
2011.

2.

22.

22.

35.

9.0000037

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

Ilustrasi dari penggunaan fungsi calendar adalah sebagai berikut:


-->kal = calendar()
kal =

kal(1)
Feb 2015
kal(2)
M

Tu

Th

0.
4.
11.
18.
25.
0.

0.
5.
12.
19.
26.
0.

0.
6.
13.
20.
27.
0.

Sat

Sun

kal(3)
0.
2.
9.
16.
23.
0.

0.
3.
10.
17.
24.
0.

0.
7.
14.
21.
28.
0.

1.
8.
15.
22.
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.
Berikut ini contoh penggunaan fungsi tic toc.
-->clear; tic(); d=1:500; A=diag(d); b=d(:); x=A\b; toc()
ans =
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.
Berikut ini ilustrasi penggunaan perintah timer.
-->clear; timer(); d=1:500; A=diag(d); b=d(:); x=A\b; timer()
ans =
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.
Tabel 10.1 Operator-Operator Perbandingan
Operator

Deskripsi

==

Sama dengan

<

Lebih kecil dari

<=

Lebih kecil atau sama dengan

>

Lebih besar dari

>=

Lebih besar atau sama dengan

<> atau ~=

Tidak sama dengan

Operasi perbandingan adalah operasi yang dioperasikan secara elemen-dengan-elemen


sehingga operasi ini hanya dapat dilakukan terhadap antara skalar dengan skalar atau
vektor/matrik, atau antara dua buah matrik/vektor yang berdimensi sama. Output dari

Perbandingan dan Logika - 151

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).
Berikut ini beberapa contoh operasi perbandingan.
-->x = 10; y = 10; z = 20;
-->x ~= y
ans =
F
-->z > y
ans =
T
-->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.
-->I >= O
ans =
T F F
F T F
F F T

1.
1.
1.

1.
1.
1.

Perbandingan dan Logika - 152

-->R = rand(2,2)
R =
0.7592942
0.1945969

0.9996990
0.5191445

-->l = R > 0.5


l =
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.
-->function sgn = signum(a)
--> if a > 0
-->
sgn = 1;
--> elseif a < 0
-->
sgn = -1;
--> else
-->
sgn = 0
--> end
-->endfunction
-->signum(-3.45)
ans =
- 1.

Penggunaan operasi perbandingan pada suatu blok perulangan while dapat dilihat pada
contoh di bawah ini.
-->eps = 1;
-->while (1 + eps) > 1
--> eps = eps/2;
-->end
-->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.1945969

0.999699
0.5191445

-->Q = R(R >= 0.5)


Q =
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. Konstantakonstanta boolean yang telah terpasang di dalam Scilab dapat dilihat pada Tabel 10.3.
Tabel 10.2 Operator-Operator Logika
Operator

Deskripsi

&

dan (and)

atau (or)

negasi/bukan (not)

Perbandingan dan Logika - 154

Tabel 10.3 Konstanta-Konstanta Boolean


Variabel

Deskripsi

%t

Konstanta boolean untuk benar (true)

%f

Konstanta boolean untuk salah (false)

Berikut ini beberapa contoh operasi logika.


-->p = %t; q = %f;
-->r = p | q
r =
T
-->x = 1; y = 2; z = 3;
-->(y > x) & (y <= z)
ans =
T
-->R
R =
0.7592942
0.1945969

0.999699
0.5191445

-->idk = (R >= 0.2) & (R < 0.6)


idk =
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 =
2.

3.

5.

7.

11.

13.

17.

19.

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;
-->while ~((1 + eps) == 1)
--> eps = eps/2;
-->end
-->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.
-->P = [0 0.5 2];
-->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.


Berikut ini contoh penggunaan fungsi and.
-->D = [%t %t %f; %t %f %f]
D =
T T F
T F F
-->and(D)
ans =
F
-->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.


Contoh penggunaan fungsi or adalah sebagai berikut.
-->D
D =
T T F
T F F
-->or(D)
ans =
T

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

Tabel 10.4 Fungsi-Fungsi Pengujian


Fungsi

Deskripsi

isdef("x")

Untuk mendapatkan informasi mengenai eksistensi variabel x

isreal(x)

Untuk memeriksa apakah semua elemen dari matrik x merupakan


bilangan real

isinf(x)

Untuk memeriksa apakah elemen-elemen matrik x merupakan


konstanta takhingga

isnan(x)

Untuk memeriksa apakah elemen-elemen matrik x merupakan


konstanta takhingga

isempty(x)

Untuk memeriksa apakah x merupakan matrik kosong

isequal(x,y)

Untuk memeriksa apakah x dan y adalah matrik yang sama

isvector(x)

Untuk memeriksa apakah x adalah sebuah vektor

Berikut ini ilustrasi penggunaan dari fungsi-fungsi pengujian.


-->clear
-->x = 1.23;
-->P = [1, 3-4*%i];
-->A = [1 2 3; 0 4 5]
A =
1.
0.

2.
4.

3.
5.

-->ieee(2)
-->B = A.\1
B =
1.
Inf

0.5
0.25

0.3333333
0.2

-->C = B.\1
C =
1.
0.

2.
4.

3.
5.

Perbandingan dan Logika - 159

-->isdef("x")
ans =
T
-->isdef("z")
ans =
F
-->isreal(P)
ans =
F
-->isvector(P)
ans =
T
-->isvector(A)
ans =
F
-->isequal(A,C)
ans =
T
-->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
-->X = [-1.23, 6 - 8*%i];

Perbandingan dan Logika - 160

-->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 selectcase, 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:
for var = exp
blok-statemen
end

Dimana var adalah variabel perulangan dan exp adalah ekspresi yang digunakan untuk
mengontrol suatu perulangan for. Ekspesi perulangan biasanya berupa sebuah vektor
inkremental, j:k atau j:d:k.
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.
-->C = [86 87 86 81 77 85 87 86 85 87];
-->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.
-->N = [458, 367, 1082, 619; 913, 1075, 843, 1249]
N =
458.
913.

367.
1075.

1082.
843.

619.
1249.

-->jumlah = zeros(1,4);
-->i = 0;
-->for j = N
--> i = i + 1;
--> jumlah(i) = sum(j);
-->end
-->jumlah
jumlah =
1371.

1442.

1925.

1868.

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 =
1.
0.5
0.3333333
0.25

0.5
0.3333333
0.25
0.2

0.3333333
0.25
0.2
0.1666667

0.25
0.2
0.1666667
0.1428571

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:
while ekspresi then
blok-statemen
end

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 (;).

Berikut ini sebuah contoh operasi perulangan dengan statemen while.


-->eps = 1;
-->while (eps + 1) > 1
--> eps = eps/2;
-->end
-->eps = 2*eps
eps =
2.220D-16

Perulangan dan Kondisional - 165

Contoh berikutnya yang menggambarkan penggunaan statemen perulangan while adalah


sebagai berikut:
-->// Penentuan akar kuadrat suatu bilangan dengan metode Newton
-->a = 12.34;

// bilangan yang akan dicari akar kuadratnya

-->x = a/2;

// nilai awal

-->tol = 1e-6;
-->while abs(a - x^2) > tol
--> x = (x + a/x)/2;
-->end
-->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.
Berikut ini contoh penggunaan statemen break:
-->function y =
-->// Penentuan
-->
--> y = x/2;
--> while %t
-->
y = (y +
-->
if abs(x
--> end
-->endfunction

my_sqrt(x)
akar kuadrat suatu bilangan x
// nilai awal
x/y)/2;
- y^2) < 1e-6 then break end

-->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
Di dalam suatu blok perulangan, penggunaan statemen continue akan menyebabkan
statemen-statemen yang terletak di bawahnya tidak akan dieksekusi dan prosesnya
dilanjutkan ke langkah perulangan berikutnya. Statemen continue yang terletak di dalam
suatu perulangan yang bertingkat hanya akan berpengaruh terhadap blok perulangan yang
melingkupinya saja.
Contoh penggunaan statemen continue adalah sebagai berikut.
-->n = 5;
-->x_even = [];
-->while (length(x_even) < n)
--> x = round(rand()*100);
--> if (modulo (x, 2) ~= 0)
-->
continue
--> end
--> x_even($+1) = x;
-->end
-->x_even'
ans =
26.

// 5 bilangan acak genap

12.

68.

52.

24.

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 statemenstatemen sebagai berikut.
-->while length(x_even) < n
--> x = round(rand()*100);
--> if (modulo (x, 2) == 0)
-->
x_even($+1) = x;
--> end
-->end

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 ifelse 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 (;).

Berikut ini adalah contoh penggunaan statemen if:


-->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
-->x = [9.99

-1.d-12];

-->my_clean(x, 1.d-6)
ans =
9.99

0.

Contoh lain penggunaan statemen if adalah sebagai berikut:


-->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

-->x = [10 2 3 0 5];


-->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 blokstatemen pertama yang akan dieksekusi namun jika ekspresi yang diuji bernilai salah maka
blok-statemen kedua yang akan dieksekusi.
Contoh penggunaan statemen if - else adalah sebagai berikut:
-->function [k,e] = simulasi_koin(n)
--> // Simulasi pelemparan koin sejumlah n percobaan
--> for i = 1:n
-->
if rand() > 0.5
-->
y(i) = "K";
// kepala
-->
else
-->
y(i) = "E";
// ekor
-->
end
--> end
--> k = size(y(y == "K"),'*');
--> e = n - k;
-->endfunction
-->[kepala, ekor] = simulasi_koin(10000)
ekor =
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.
Berikut ini adalah contoh penggunaan statemen if-elseif-else:
-->function sgn = signnum(a)
--> if a > 0
-->
sgn = 1;
--> elseif a < 0
-->
sgn = -1;
--> else
-->
sgn = 0
--> end
-->endfunction
-->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)
3.1415927 lebih besar daripada 2.7182818

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.
Berikut ini contoh penggunaan statemen selectcase.
-->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)
-20.8 adalah bilangan negatif

Contoh lain penggunaan statemen selectcase adalah sebagai berikut.


-->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 ifelseif-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.

Gambar 12.1 Editor Teks SciNotes

Editor Teks SciNotes - 173

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.

Gambar 12.2 Contoh Pembuatan Fungsi dengan 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

Cara Menjalankan Suatu Skrip


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)
10 suku pertama deret Fibonacci :
1.

1.

2.

3.

5.

8.

13.

21.

34.

55.

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.
N = 1000;
p = 20/N;

// jumlah orang yang ditemui dalam satu hari


// kemungkinan jumlah pembeli

Skrip - 176

j = 365;
// hari dalam satu tahun
koran = 10:25;
// jumlah koran yang akan dibeli
laba = zeros(koran);
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.
-->exec('Simulasi Penjualan Koran.sce');
Pembelian koran yang menghasilkan tiga keuntungan terbesar
Jumlah koran :
17.

18.

16.

Keuntungan :
15027.397

14958.904

14775.342

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
mprintf("\n Bilangan-bilangan prima tersebut yaitu:\n")
disp(prima)

Skrip - 177

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");
Deret bilangan prima yang lebih kecil
dari suatu bilangan bulat n
Bilangan bulat n ? 20
Bilangan-bilangan prima tersebut yaitu:
2.

3.

5.

7.

11.

13.

17.

19.

Kelebihan dan Kelemahan Skrip


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 statemenstatemen 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

Suatu fungsi adalah sekumpulan statemen yang merepresentasikan sebuah komputasi


tertentu. Suatu fungsi dapat dibuat dalam bentuk sebuah file teks (file-fungsi) atau dibuat
secara langsung pada jendela Scilab.

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.
function [out1, out2, ...] = func_name(in1, in2, ...)
statemen-statemen
endfunction

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 fungsifungsi yang mempunyai argumen output tunggal penggunaan kurung-siku kiri dan kurungsiku 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

Menggunakan baris kosong untuk memisahkan suatu blok-statemen dengan blokstatemen lainnya.

Menggunakan indentasi pada blok-statemen perulangan dan kondisional.

Menggunakan spasi dan tanda kurung dalam penulisan suatu ekspresi matematika
sehingga ekspresinya mudah dibaca dan dipahami.

Sebuah fungsi yang ditulis dengan gaya penulisan yang baik akan mudah untuk dibaca dan
dimengerti. Manfaat lainnya yaitu proses pengecekan atau perbaikan jika ada kesalahan
dalam fungsi yang telah dibuat dapat dilakukan dengan mudah.
Sebuah file-fungsi yang telah selesai dibuat dengan teks editor SciNotes dapat disimpan ke
dalam sebuah file tertentu melalui menu File Save. Meskipun dapat digunakan
sembarang ekstensi namun sebaiknya suatu file fungsi disimpan dengan ekstensi sci. Pada
sebuah file-fungsi di dalamnya dapat terdiri dari sebuah fungsi saja maupun beberapa
fungsi seperti yang ditunjukkan pada contoh-contoh di bawah ini.
Contoh 1. (Deret Fibonacci). N Suku-suku awal dari deret Fibonacci [Fibonacci.sci]
function f = fibonacci(n)
// Fungsi untuk menghasilkan n-suku deret Fibonacci
f = ones(1,n);
for k = 3:n
f(k) = f(k-1) + f(k-2);
end
endfunction

Contoh 2. Beberapa fungsi trigonometri dengan argumen sudut dalam satuan derajat
[trig_derajat.sci].
// Beberapa fungsi trigonometri dengan argumen dalam satuan derajat
function y = cos_d(x)
y = clean(cos(x/180*%pi))
endfunction
function y = sin_d(x)
y = clean(sin(x/180*%pi))
endfunction

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].
function [x,fx,n] = secant(f,x1,x2)
// Penyelesaian persamaan nonlinear f(x)=0 dengan metode secant.
//
// Input : f
= fungsi nonlinier f(x)
//
x1, x2 = nilai awal
// Output : x
= akar fungsi f(x)
//
fx
= nilai fungsi f(x)
//
n
= jumlah iterasi
nmax = 100
epsilon = 1e-10
n = 0

// jumlah iterasi maksimum


// toleransi konvergensi

if abs(f(x1)) < abs(f(x2))


x = x1
fx = f(x1)
else
x = x2
fx = f(x2)
end
while (n < nmax & abs(fx) > epsilon)
n = n+1
x = x2-f(x2)*(x2-x1)/(f(x2)-f(x1))
fx = f(x)
x1 = x2
x2 = x
end
if (n >= nmax)
disp('Perhitungan belum konvergen setelah ' +
string(nmax) + ' iterasi.')
abort
end
endfunction

...

Fungsi - 181

Penggunaan Fungsi-Fungsi yang Tersimpan pada Suatu File-Fungsi


Suatu fungsi yang terdapat dalam sebuah file-fungsi harus dieksekusi terlebih sebelum
dapat digunakan. Untuk file fungsi yang terbuka pada jendela SciNotes, hal ini dapat
dilakukan melalui menu Execute.
File-fungsi yang tersimpan pada suatu direktori tertentu dapat dieksekusi dengan
statemen exec(nama_file), dimana nama_file adalah nama dari file-fungsi. Jika file-fungsi
tersimpan pada direktori kerja maka argumen nama_file cukup dengan nama filenya saja,
seperti pada contoh di bawah ini:
-->exec('trig_derajat.sci');

Namun jika file-fungsi tidak tersimpan pada direktori kerja maka argumen nama_file
harus ditulis dengan nama file-fungsi beserta nama direktorinya.
-->exec('D:\Skrip dan Fungsi\trig_derajat.sci);

Jika di belakang statemen exec(nama_file) tidak ditambahkan tanda titik-koma maka


semua statemen yang terdapat di dalam file-fungsi akan ditampilkan pada jendela Scilab.
Sebuah file-fungsi juga dapat dieksekusi melalui menu File Execute yang terdapat
pada jendela Scilab.
Setelah dilakukan eksekusi terhadap file-fungsi, fungsi-fungsi yang terdapat di dalamnya
dapat dijalankan seperti halnya fungsi-fungsi yang telah terpasang di dalam Scilab.
-->fibonacci(5)
ans =
1.

1.

2.

3.

5.

-->x = [0 30 45 60 90];
-->cos_d(x)
ans =
1.

0.8660254

0.7071068

0.5

0.

-->tan_d(x)
ans =
0.

0.5773503

1.

1.7320508

Inf

Fungsi - 182

Membuat Suatu Fungsi Secara Langsung pada Jendela Scilab


Selain dalam bentuk file-fungsi, sebuah fungsi juga dapat dibuat secara langsung pada
jendela Scilab dengan menggunakan blok statemen function-endfunction atau dengan
menggunakan fungsi deff. Fungsi-fungsi yang dibuat dengan cara ini akan tersimpan
secara otomatis di dalam ruang kerja sehingga dapat langsung digunakan tanpa perlu
dipanggil terlebih dahulu seperti pada sebuah file-fungsi. Fungsi-fungsi yang dibuat secara
langsung pada jendela Scilab hanya bersifat sementara dan akan hilang ketika program
Scilab ditutup.
Pembuatan Fungsi dengan Blok Statemen Function-Endfunction
Sintaks pembuatan suatu fungsi baru secara langsung pada jendela Scilab dengan
menggunakan blok statemen function-endfunction adalah sama seperti sintaks
penulisan suatu fungsi dalam sebuah file-fungsi.
Berikut ini ilustrasi pembuatan fungsi secara langsung pada jendela Scilab.
-->function y = func(x)
-->
y = x - exp(-x)
-->endfunction
-->function [p,m] = foo(a,b)
--> p = a + b
--> m = a - b
-->endfunction
-->x = 1.0
-->y = func(x)
y =
0.6321206
-->[u,v] = foo(345,123)
v =

222.
=
468.

Fungsi - 183

Contoh 4. Penentukan akar dari fungsi nonlinear f x x exp( x) dengan menggunakan


fungsi secant [secant.sci] yang telah diberikan pada Contoh 3.
Fungsi f(x) yang akan dicari akarnya dapat dibuat dengan statemen Scilab sebagai berikut.
-->function y = func(x)
--> y = x - exp(-x)
-->endfunction

Kemudian dipanggil fungsi secant ke dalam ruang kerja.


-->exec('secant.sci');

Selanjutnya akar dari fungsi f(x) dapat dihitung dengan statemen sebagai berikut:
-->[x0, fx0] = secant(func, 0, 1)
fx0 =
- 1.242D-13
x0 =
0.5671433

Diperoleh x = 0.567 adalah akar dari fungsi nonlinier f(x).


Pembuatan Fungsi dengan Fungsi Deff
Pembuatan sebuah fungsi baru secara langsung pada jendela Scilab dengan fungsi deff
dapat dilakukan dengan menggunakan sintaks sebagai berikut:
deff("[out1,out2,...] = fname(in1,in2,...)", [blok_statemen])

dimana out1,out2 adalah argumen-argumen output, in1,in2 adalah argumen-argumen


input dan blok_statemen adalah statemen-statemen untuk fungsi fname.
Semua statemen yang terdapat di dalam blok_statemen harus ditulis diantara tanda kutiptunggal (') atau tanda kutip-ganda (") dan untuk memisahkan statemen yang berbeda
dapat digunakan tanda koma (,) atau titik-koma (;).
Berikut ini contoh-contoh pembuatan suatu fungsi dengan menggunakan perintah deff.
-->deff('z=tambah(x,y)','z=x+y')
-->deff("x=mutlak(y)","if y>0, x=y; else, x=-y; end")

Fungsi - 184

-->deff('[x]=akar_pers_kuadrat(a,b,c)', ...
--> ['d=b^2-4*a*c','x1=(-b+sqrt(d))/(2*a)', ...
-->
'x2=(-b-sqrt(d))/(2*a)','x=[x1 x2]'])

Berikut ini ilustrasi penggunaan fungsi-fungsi yang telah dibuat dengan fungsi deff.
-->tambah(2,4)
ans =
6.
-->c = mutlak(-12.34)
c =
12.34
-->x = akar_pers_kuadrat(1,-10,21)
x =
7.

3.

Variabel Lokal dan Variabel Global


Variabel-variabel yang terdapat di dalam suatu fungsi adalah variabel lokal. Variabelvariabel tersebut hanya akan ada selama proses eksekusi terhadap fungsi berlangsung dan
tidak mempunyai pengaruh terhadap variabel-variabel yang telah tersimpan dalam ruangkerja 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.
Berikut ini ilustrasi mengenai variabel global.
-->global k
-->k = 10;
-->function f = plus_k(x)
--> f = x + k;
-->endfunction
-->function rubah_k(a)
--> global k
--> k = a
-->endfunction
-->plus_k(5)
ans =
15.

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)
Berikut ini adalah implementasi statemen-statemen untuk fungsi faktorial.
function f = faktorial(n)
if n > 1 then
f = n*faktorial(n-1)
else
f = 1
end
endfunction
-->faktorial(5)
ans =
120.

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.
Berikut ini adalah statemen-statemen untuk membuat fungsi Fibonacci.
function f = fib(n)
// Menghitung deret Fibonnaci suku ke-n dengan cara rekursi
if n <= 2 then
f = 1
return
end
f = fib(n-1) + fib(n-2)
endfunction
-->fib(15)
ans =
610.

Pengontrolan Eksekusi Suatu Fungsi


Perintah resume, resume dan abort dapat digunakan untuk mengontrol eksekusi sebuah
fungsi. Penjelasan mengenai perintah-perintah tersebut adalah sebagai berikut.

Perintah resume dan return adalah perintah yang ekuivalen. Perintah resume atau
return digunakan untuk keluar dari suatu fungsi namun fungsi tetap menghasilkan

suatu nilai keluaran. Namun jika sebuah fungsi dijalankan dalam mode pause maka
penggunaan perintah resume atau return akan menghentikan mode pause dan proses
eksekusi fungsi dilanjutkan kembali.

Perintah abort dapat digunakan untuk menghentikan proses eksekusi yang sedang
berlangsung pada suatu file atau skrip. Perintah error dan warning dapat digunakan
untuk menampilkan pesan kesalahan yang terjadi.

Ilustrasi dari penggunaan perintah-perintah di atas diberikan pada contoh bawah ini.
Contoh 7. Pada contoh ini fungsi [secant.sci] yang terdapat pada Contoh 3 dimodifikasi
dengan menyisipkan perintah return, error, warning dan abort ke dalamnya dan file
hasil modifikasinya dinamakan [fsecant.sci].

Fungsi - 188

function [x,fx,n] = fsecant(f,x1,x2)


// Penyelesaian persamaan nonlinear f(x)=0 dengan metode secant.
//
// Input : f
= fungsi nonlinier f(x)
//
x1, x2 = nilai awal
// Output : x
= akar fungsi f(x)
//
fx
= nilai fungsi f(x)
//
n
= jumlah iterasi
nmax = 100
epsilon = 1e-10
n = 0

// jumlah iterasi maksimum


// toleransi konvergensi

if abs(f(x1)) < abs(f(x2))


x = x1
fx = f(x1)
else
x = x2
fx = f(x2)
end
if abs(fx) < epsilon
return
end
while (n < nmax & abs(fx) > epsilon)
n = n+1
if (abs(f(x2)-f(x1)) < %eps)
error('Terjadi pembagian dengan nol')
end
x = x2 - f(x2)*(x2-x1)/(f(x2)-f(x1))
fx = f(x)
x1 = x2
x2 = x
end
if (n >= nmax)
warning('Perhitungan belum konvergen setelah ' +
string(nmax) + ' iterasi.')
abort
end

...

endfunction
2
Anggap fungsi nonlinear yang akan dicari akarnya adalah f x x 1 .

-->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 =
x0

0.
=
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
2
lain yaitu g x x 25 .

-->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:
-->[x0, g0] = fsecant(g, 3, 4)
WARNING: Perhitungan belum konvergen setelah 100 iterasi.

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:
-->x0 = fsecant(g, 3*%i, 4*%i)
x0 =
5.i

Terlihat bahwa fungsi fsecant dapat menemukan salah satu dari akar fungsi

g x x 2 25 dimana akar-akar adalah bilangan kompleks 5i dan 5i .

Menyela Eksekusi Program dan Melakukan Debugging


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.
Contoh 8. File-fungsi [psecant.sci] yang terdapat pada contoh merupakan modifikasi
dari file-fungsi [fsecant.sci] dengan menambahkan statemen pause di dalamnya.
function [x,fx,n] = psecant(f,x1,x2)
// Penyelesaian persamaan nonlinear f(x)=0 dengan metode secant.
//
// Input : f
= fungsi nonlinier f(x)
//
x1, x2 = nilai awal
// Output : x
= akar fungsi f(x)
//
fx
= nilai fungsi f(x)
//
n
= jumlah iterasi
nmax = 100
epsilon = 1e-10

// jumlah iterasi maksimum


// toleransi konvergensi

Fungsi - 191

n = 0
if abs(f(x1)) < abs(f(x2))
x = x1
fx = f(x1)
else
x = x2
fx = f(x2)
end
if abs(fx) < epsilon then
return
end
while (n < nmax & abs(fx) > epsilon)
n = n+1
if (abs(f(x2)-f(x1)) < %eps)
error('Terjadi pembagian dengan nol')
end
x = x2 - f(x2)*(x2-x1)/(f(x2)-f(x1))
fx = f(x)
x1 = x2
x2 = x
end
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)
Type 'resume' or 'abort' to return to standard level prompt.
-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
=
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.


-->setbpt('fsecant',[27 38])

// Titik sela

Fungsi - 193

Selanjutnya jika kita jalankan fungsi fsecant maka tampilan pada jendela Scilab adalah
seperti berikut ini.
-->[x, fx] = fsecant(func, 0,0.5)
Stop after row
27 in function fsecant.
-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 =
x2

0.
=
0.5

-1->resume
Stop after row

38 in function fsecant.

-1->x, n
x =
n

0.5671433
=
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.
Berikut ilustrasi penggunaan perintah delbpt.
-->delbpt('fsecant', 27)
-->delbpt('fsecant', [27 38])
-->delbpt()

Jumlah Argumen Input dan Output


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.
-->function [x,y] = fabc(a,b,c)
--> [n_out, n_in] = argn()
--> x = a+b+c
--> y = a*b*c
-->endfunction
Karena fungsi argn terletak di dalam suatu fungsi maka kita harus menambahkan titik-titik

Fungsi - 195

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.
function [n,d] = rasional(x,tol)
// Fungsi untuk mencari hampiran bilangan rasional dari
// suatu bilangan real.
//
// dimana:
x : bilangan real,
//
tol : toleransi dalam aproksimasi bilangan rasional
if argn(2) < 1

Fungsi - 196

error('Masukkan bilangan real')


end
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

Berikut ini beberapa contoh penggunaan fungsi rasional.


-->exec('C:\Skrip dan Fungsi\rasional.sci');

-->[p,q] = rasional(0.333)
q =
p

1000.
=
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.

Berikut ini adalah contoh-contoh penggunaan perintah head_comments.

Fungsi - 197

-->head_comments("rasional")
function [n,d] = rasional(x,tol)
Fungsi untuk mencari hampiran bilangan rasional dari
suatu bilangan real.
dimana:

x : bilangan real,
tol : toleransi dalam aproksimasi bilangan rasional

Kelebihan Fungsi
Dibandingkan dengan skrip, fungsi mempunyai kelebihan sebagai berikut.

Fungsi mempunyai argumen input sehingga suatu fungsi dapat digunakan untuk
melakukan perhitungan dengan berbagai macam data yang berbeda tanpa harus
melakukan perubahan terhadap statemen-statemen yang terdapat di dalamnya. Jika
skrip digunakan untuk melakukan perhitungan terhadap beberapa data yang berbeda
maka harus dilakukan pengeditan terhadap file skripnya untuk merubah nilai inputnya

Semua variabel yang terdapat di dalam suatu fungsi bersifat lokal dan tidak akan
tersimpan pada ruang kerja, kecuali untuk variabel-variabel yang dinyatakan sebagai
variabel global. Di dalam skrip, semua variabel yang terdapat di dalamnya akan
tersimpan pada ruang kerja sehingga secara tidak sengaja dapat merubah nilai dari
variabel yang telah tersimpan sebelumnya apabila mempunyai nama yang sama.

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.
function [xmin,fmin] = golden_section(f,a,b,delta,tol)
// Metode optimasi satu dimensi GOLDEN SECTION
//
// Input:
//
f
= fungsi obyektif
//
a, b = batas interval untuk nilai minimum
//
delta = toleransi konvergensi untuk absis
//
tol
= toleransi konvergensi untuk fungsi obyektif
//
// Output:
//
xmin = nilai x yang menghasilkan fungsi obyektif minimum
//
fmin = nilai minimum dari fungsi obyektif f(xmin)
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);
while (abs(f2-f1)> tol) | (abs(b-a) > delta)
if f1 > f2 then
a = x1;
x1 = x2;
f1 = f2;
x2 = C*a + R*b;
f2 = f(x2);
else
b = x2;
x2 = x1;
f2 = f1;
x1 = R*a + C*b;
f1 = f(x1);
end
end
if f1 < f2;
fmin = f1;
xmin = x1;
else
fmin = f2;
xmin = x2;
end
endfunction

Anggap file-fungsi tersebut mempunyai nama [golden_section.sci].


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

Memasukkan Data dengan Fungsi Input


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".
Berikut ini contoh penggunaan fungsi input.
n = input("Jumlah iterasi ?")
s = input("Metode ?","s")

Apabila kedua perintah tersebut dijalankan maka akan muncul tampilan sebagai berikut:
Jumlah iterasi ?
Metode ?

Fungsi input dapat digunakan di dalam sebuah skrip untuk proses pemasukan data secara
interaktif.

Menampilkan Nilai Suatu Variabel dengan Fungsi Disp


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];
-->str = "Scilab software untuk komputasi numerik";
-->disp(n)
100.
-->disp(x)
3.

5.

2.

-->disp(str)
Scilab software untuk komputasi numerik

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.
-->disp(factorial(10),'Nilai dari faktorial(10) adalah')
Nilai dari faktorial(10) adalah
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.

Mencetak Nilai Variabel dengan Fungsi Print


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)

Contoh penggunaan fungsi print adalah sebagai berikut.


-->x = 123; y = 999;
-->//menampilkan nilai variabel x dan y pada jendela Scilab
-->print(%io(2),x,y)
y =

Input dan Output - 203

999.
=
123.

-->// menampilkan nilai variabel x dan y pada file xy.txt


-->print('xy.txt',x,y)

Isi dari file xy.txt adalah seperti yang diperlihatkan pada gambar berikut ini.

Gambar 15.1

Membuka dan Menutup File Data


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

'unknown ' untuk file yang statusnya tidak diketahui,

'scratch ' untuk file yang digunakan secara sementara dan akan dihapus pada akhir

sesi Scilab.
Misalkan data-data yang akan disimpan ke dalam file adalah sebagai berikut:
-->FreeMathSoftware = ["Scilab" "Maxima" "R"]
FreeMathSoftware =
!Scilab

Maxima

-->R = rand(3,5)
R =
0.2113249
0.7560439
0.0002211

0.3303271
0.6653811
0.6283918

0.8497452
0.6857310
0.8782165

0.0683740
0.5608486
0.6623569

0.7263507
0.1985144
0.5442573

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, 'bilangan random distribusi seragam')
-->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.


Ilustrasi penggunaan fungsi mopen dapat dilihat pada statemen-statemen berikut.
-->fid = mopen('C:\Temp\data3.txt','w');
-->mfprintf(fid, 'Konstanta-konstanta Matematika: \n')
-->mfprintf(fid, 'pi = %15.12f\n', %pi)
-->mfprintf(fid, 'e

= %15.12f\n', %e)

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 File-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

Menyimpan dan Membaca Data String dalam Format Teks ASCII


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.
Contoh penggunaan fungsi mputl dan mgetl adalah sebagai berikut:
-->FreeMathSoftware = ["Scilab"; "Maxima"; "R"];
-->mputl(FreeMathSoftware, 'C:\Temp\Teks1.txt');
-->clear
-->S = mgetl('C:\Temp\Teks1.txt')
S =
!Scilab
!
!Maxima
!
!R

!
!
!
!
!

-->SciMax = mgetl('C:\Temp\Teks1.txt',2) // 2 baris pertama


SciMax =
!Scilab
!
!Maxima

!
!
!

Isi dari file teks1.txt adalah seperti yang telah diperlihatkan pada gambar 15.2

Input dan Output - 209

Menyimpan dan Membaca Data dengan Format Fortran


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.
Berikut ini beberapa contoh format penulisan data.
'(5x,f5.2,5x,i2,f10.3)', '(5x,2f10.2,5i5)', '(/10x,5(f10.3,2x))'

Contoh penggunaan fungsi write untuk menuliskan data pada sebuah file adalah sebagai
berikut:

Input dan Output - 210

-->x = [-0.82 0.40 -0.41;


-0.18 -0.86 -0.47;
-0.55 -0.31 0.78];
-->write('x.dat',x,'(3(f6.2,2x))')

Isi dari file x.dat adalah seperti pada Gambar 15.5.

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 =
- 0.82
- 0.18
- 0.55

0.4
- 0.86
- 0.31

- 0.41
- 0.47
0.78

Input dan Output - 211

-->x = read('x.dat',-1,3)
x =
- 0.82
- 0.18
- 0.55

0.4
- 0.86
- 0.31

- 0.41
- 0.47
0.78

Berikut ini contoh penggunaan fungi read untuk membaca data dari papan ketik.
-->mat = read(5,2,2);
-->3.4 7.1
-->9.2 8.5

// atau mat = read(%io(1), 2,2)

-->mat
mat =
3.4
9.2

7.1
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.

Menyimpan dan Membaca Data dengan Format C


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.
Berikut ini adalah contoh penggunaan perintah mfscanf dan mfprintf.
-->x=[-0.82 0.40 -0.41;
-0.18 -0.86 -0.47;
-0.55 -0.31 0.78];
-->mfprintf(%io(2),'%8.3f %8.3f %8.3f\n',x)
-0.820
0.400
-0.410
-0.180
-0.860
-0.470
-0.550
-0.310
0.780
-->fd = mopen('Xc.dat','w');
-->mfprintf(fd,'%8.3f %8.3f %8.3f\n',x)
-->mclose(fd);
-->fd = mopen('Xc.dat','r');

Input dan Output - 213

-->xbaru = mfscanf(3,fd,'%f %f %f\n')


xbaru =
- 0.8200000
- 0.1800000
- 0.5500000

0.4000000
- 0.8600000
- 0.31

- 0.41
- 0.47
0.7800000

Mencetak Nilai Variabel dengan Fungsi Mprintf


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.

Berikut ini contoh penggunaan fungsi mprintf.


-->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

Menyimpan dan Membaca Suatu Data Matrik


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

Berikut ini adalah contoh penggunaan perintah fprintfmat.


-->R33 = rand(3,3)
R33 =
0.5015342
0.4368588
0.2693125

0.6325745
0.4051954
0.9184708

0.0437334
0.4818509
0.2639556

-->fprintfMat('C:\Temp\dataR33a.txt', R33)
--> fprintfMat('C:\Temp\dataR33b.txt', R33,'%8.3f','Bilangan acak')

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

Contoh-contoh penggunaan fungsi fscanfMat adalah sebagai berikut.


-->X = fscanfMat('C:\Temp\dataR33a.txt')
X =
0.501534
0.436859
0.269312

0.632574
0.405195
0.918471

0.043733
0.481851
0.263956

-->[y,t] = fscanfMat('C:\Temp\dataR33b.txt')
t =
Bilangan acak
y =
0.502
0.437
0.269

0.633
0.405
0.918

0.044
0.482
0.264

Menyimpan dan Membaca Data dengan Format Biner


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").

Berikut ini contoh penggunaan perintah save dan load.


-->X = rand(3,3)
X =
0.5253563
0.5376230
0.1199926

0.2256303
0.6274093
0.7608433

0.0485566
0.6723950
0.2017173

Input dan Output - 216

-->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.

-->save('C:\Temp\XYZ.dat', "X", "Y", "Z")


-->clear

// menghapus semua variabel

-->load('C:\Temp\XYZ.dat');
-->X
X =
0.5253563
0.5376230
0.1199926

0.2256303
0.6274093
0.7608433

0.0485566
0.6723950
0.2017173

-->Y
Y =
1.
1.
1.

1.
1.
1.

1.
1.
1.

-->clear // menghapus semua data yang telah dipanggil


-->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.

Gambar 16.1 Ilustrasi visualisasi grafik dengan Scilab

Jendela Grafik - 219

Membuat Grafik Dua Dimensi dengan Fungsi Plot atau Plot2d


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.
Berikut ini contoh pembuatan sebuah grafik dengan fungsi plot2d.
-->x = linspace(-5,5,2000);
-->y = (x-1).*(x-2).*(x+3).*(x-4);
-->plot2d(x,y)

// atau plo(x,y)

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.
-->y = [1.9 2.7 4.8 5.3 7.1 9.4];
-->clf()
-->plot2d(y)

// atau plot(y)

Gambar 16.3 adalah grafik yang dihasilkan oleh perintah-perintah ini.

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

Judul dan Label Grafik


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)
-->xtitle("exp(-x^2/2", "x", "y")

// Lihat Gambar 16.4

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

vertikal. Sintaks untuk ketiga fungsi tersebut adalah sebagai berikut:


title(jdl)
xlabel(lbl_x)
ylabel(lbl_y)

dimana jdl, lbl_x dan lbl_y adalah string yang menyatakan judul grafik, label pada
sumbu horisontal dan label pada sumbu vertikal.
Berikut ini adalah contoh penggunaan dari fungsi title, xlabel dan ylabel.
-->x = -5:0.01:5;
-->gx = 4.0./(exp(x) + 1);
-->clf();
-->plot2d(x,gx)
-->title(["Kurva"; "g(x) = 4/(exp(x) + 1)"])
-->xlabel('x')
-->ylabel("g(x)")

Gambar 16.5

Jendela Grafik - 223

Pembuatan Beberapa Grafik Sekaligus pada Sebuah Jendela Grafik


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)';
-->y1 = x.^2; y2 = 1 - y1; y3 = 2*y1;
-->clf(), plot2d(x, [y1 y2 y3])
-->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 ... ]).

Gambar 16.7 dibuat dengan menggunakan statemen-statemen sebagai berikut.


-->t = linspace(0,2*%pi,100)';
-->x1 = 2*cos(t); y1 = sin(t);
-->x2 = cos(t); y2 = y1;
-->x3 = linspace(-2,2,100)'; y3 = erf(x3);
-->clf(); plot2d([x1 x2 x3], [y1 y2 y3])

// Gambar 16.7

Gambar 16.7

Bentuk dan Warna Garis


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.

Gambar 16.8 Kode untuk warna kurva

Gambar 16.9 Kode untuk penanda titik-titik kurva

Berikut ini contoh pengaturan warna garis dengan fungsi plot2d.


-->x = linspace(-1,1,500)';
-->y1 = x.^2; y2 = 1 - y1; y3 = 2*y1;
-->clf(), plot2d(x, [y1 y2 y3], style=[2 5 13])
-->xtitle('','x','y')

//Gambar 16.10

Jendela Grafik - 226

Gambar 16.10
Berikut ini contoh pengaturan simbol untuk titik-titik kurva dengan fungsi plot2d.
-->x = [-1 0 1 2 3 4 5 6]; y = [10 9 7 5 4 3 0 -1];
-->[koef1, koef2] = reglin(x,y);
-->yr = koef1*x + koef2;
-->clf(), plot2d(x',[y' yr'], style=[-9 5])
-->xtitle('Contoh Regresi Linier','x','y')

Gambar 16.11

//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.

String

Warna garis

Merah

Hijau

Biru

Cyan

Magenta

Kuning

Hitam

Putih

Berikut ini kode string untuk mendefinisikan corak garis dengan fungsi plot.
String

Corak garis

Garis penuh (solid line)

--

Garis putus-putus strip (dashed line)

Garis putus-putus titik-titik (dotted line)

-.

Garis putus-putus strip-titik (dash-dotted line)

Jendela Grafik - 228

Berikut in kode string yang dapat digunakan sebagai penanda titik-titik kurva dengan
fungsi plot.

String

Penanda garis

Tambah

Bulat

Asterisk (*)

Titik

Silang

s atau square

Kotak

d atau diamond

Diamond

Segitiga

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)';
-->yobs = -3*xdat + 5 + rand(xdat,"normal");
-->yfit = -3*xdat + 5;
-->clf();
-->plot(xdat,yobs,"sr",xdat,yfit,"--b")
-->xtitle("", "x", "y")

//Gambar 16.12

Jendela Grafik - 229

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.
Contoh penggunaan fungsi legend adalah sebagai berikut.
-->xdata = (0:10)';
-->yobs = -3*xdata + 5 + rand(xdata,'normal');
-->yfit = -3*xdata + 5;
-->clf(); plot2d(xdata, [yobs yfit], [-3 5])
-->legend(["data"; "garis regresi"],%f);

//Lihat Gambar 16.13

-->xtitle('','x','y');

Gambar 16.13

Skala Sumbu-Sumbu Grafik


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".

Berikut ini contoh pengaturan skala pada sumbu-sumbu grafik.


-->x = 0:10; y = (1/2)^x;
-->clf, plot2d(x,y, logflag="nl")
-->xtitle("logflag = ""nl""")

// Gambar 16.14

Gambar 16.14

-->x = logspace(0,4,200)'; y = 1.0./x;


-->clf()
-->plot2d(x,y,style=5,logflag="ln")
-->title("logflag = ln")

// Lihat Gambar 16.15

Jendela Grafik - 232

Gambar 16.15

Pengaturan Sumbu-Sumbu Grafik


Sumbu-sumbu grafik dapat diatur tampilan dan posisinya dengan menggunakan argumenargumen 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.
Berikut ini nilai-nilai pilihan untuk argumen opsional frameflag:

0: tidak ada perhitungan untuk pengaturan nilai range aktual pada sumbu horisontal
dan sumbu vertikal, grafik dibuat dengan menggunakan nilai default atau skala yang
sudah ada sebelumnya.

1: nilai range aktual menggunakan nilai yang diberikan oleh argumen rect.

2: nilai range aktual dihitung dari nilai minimum dan maksimum dari data-data yang diberikan.

3: nilai range aktual ditentukan oleh nilai argumen rect dan nilainya dibesarkan untuk
mendapatkan skala isometrik.

Jendela Grafik - 233

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.

Berikut ini nilai-nilai pilihan untuk argumen opsional axesflag:

0: sumbu-sumbu grafik tidak ditampilkan.

1: sumbu vertikal terletak di sebelah kiri (default).

2: kurva dikelilingi oleh kotak kosong.

3: sumbu vertikal berada di sebelah kanan.

4: sumbu-sumbu grafik diletakkan pada titik pusat sumbu (0,0).

5: seperti pada nomer 4 ditambah dengan bingkai di sekitarnya.

Berikut ini contoh penggunaan argumen rect, frameflag dan axesflag:


-->t = linspace(0,2*%pi,100)';
-->x = -cos(3*t).*cos(t);
-->y= -cos(3*t).*sin(t);
-->// Sumbu-sumbu grafik tidak ditampilkan
-->clf() ; plot2d(x,y,axesflag=0)
-->xtitle("Trifolium")

//Gambar 16.16

Jendela Grafik - 234

Gambar 16.16

-->t = linspace(0,2*%pi,100);
-->x = 3*cos(t);
-->y = 2*sin(t);
-->// Lihat Gambar 16.17
-->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.
Berikut ini contoh penggunaan fungsi xgrid.
-->t = linspace(-4*%pi,4*%pi,400)';
-->x = exp(t/10).*cos(t); y = exp(t/10).*sin(t);
-->clf();
-->plot2d(x,y,style=5,rect=[-3,-4,4,3],frameflag=4)
-->xgrid(17);
-->xtitle('Spiral Archimedes')

Gambar 16.18

Jendela Grafik - 236

Beberapa Macam Variasi dari Fungsi Plot2d


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.
Ilustrasi penggunaan fungsi plot2d2 adalah sebagai berikut.
-->x = linspace(0,%pi,5);
-->clf(); plot2d2(x,cos(x),style=2);

//Gambar 16.19

-->title("plot2d2")

Gambar 16.19 Ilustrasi Penggunaan Fungsi Plot2d2


Selanjutnya, berikut ini contoh penggunaan fungsi plot2d3.
-->n = 20; x = (0:n)'; y = binomial(0.5,n)';
-->clf(), plot2d3(x,y,style=2,frameflag=6)
-->title('Prob Binomial(20,1/2)')

//Gambar 16.20

Jendela Grafik - 237

Gambar 16.20 Ilustrasi Penggunaan Fungsi Plot2d3


Berikut ini ilustrasi penggunaan fungsi plot2d4.
-->t = 0:0.1:3; y = 0.5*exp(-1.5*t);
-->clf(), plot2d4(t,y,style=2)

//Gambar 16.21

-->title("plot2d4")

Gambar 16.21 Ilustrasi Penggunaan Fungsi Plot2d4

Jendela Grafik - 238

Grafik dari Sebuah Fungsi dengan Variabel Tunggal


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.

Berikut ini contoh penggunaan fungsi fplot2d.


-->function y = g(x)
--> y = (0.5 - 1.5*x).*exp(-0.5*x)
-->endfunction
-->x = linspace(0,10,1000);
-->clf(); fplot2d(x,g,style=5);

//Lihat Gambar 16.22

-->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

argumen opsional untuk mengatur legenda grafik.


Berikut ini contoh penggunaan fungsi polarplot.
-->t = linspace(0,8*%pi,10000);
-->r = exp(cos(t)) - 2*cos(4*t) + sin(t/4).^3;
-->clf()
-->polarplot(t,r,style=5)

//Lihat Gambar 16.23

Gambar 16.23

Pengeditan Suatu Grafik Secara Interaktif Melalui Jendela Grafik


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

Gambar 16.24 Axes Editor


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.
-->t = 0:0.005:3; y = 0.5*exp(-1.5*t);
-->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 kisikisi 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.30 Contoh Penambahan Kisi-Kisi dengan Graphic Editor

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.

Gambar 16.32 Contoh Perubahan Skala Grafik dengan Graphic Editor


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

Membagi Jendela Grafik ke dalam Sejumlah Jendela Subgrafik


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 12.
-->//Lihat Gambar 16.36
-->x = logspace(0,4,200); y = 1.0 ./x;
-->clf()
-->subplot(1,2,1)

// Jendela pertama

-->plot2d(x,y,style=5,logflag="ln"), xtitle("logflag=""ln""")
-->subplot(1,2,2)

// Jendela kedua

-->plot2d(x,y,style=2,logflag="ll"), xtitle("logflag=""ll""")

Jendela Grafik - 248

Gambar 16.36 Ilustrasi penggunaan fungsi subplot


Berikut ini contoh penggunaan fungsi subplot untuk membagi jendela grafik menjadi
jendela subgrafik sebanyak 22.
-->//Lihat Gambar 16.37
-->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);
-->subplot(2,2,1)

// Jendela pertama

-->plot2d(x1,y1,style=2,frameflag=4), xtitle('Circle')
-->subplot(2,2,2)

// Jendela kedua

-->plot2d(x2,y2,style=3), xtitle('Heart')
-->subplot(2,2,3)

// Jendela ketiga

Jendela Grafik - 249

-->plot2d(x3,y3,style=5), xtitle('Lissajous')
-->subplot(2,2,4)

// Jendela keempat

-->plot2d(x4,y4,style=6), xtitle('Trifolium')

Gambar 16.37 Ilustrasi penggunaan fungsi subplot

Visualisasi Data Pada Beberapa Jendela Grafik Sekaligus


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

-->// Grafik pada jendela Graphic window number 0


-->x = linspace(-8,8,50); y = x;
-->[X,Y] = ndgrid(x,y);
-->R = sqrt(X.^2 + Y.^2) + %eps;
-->Z = sin(R)./R;
-->f = scf(0); clf();
-->plot3d1(x,y,Z)
-->f.color_map = jetcolormap(50);
-->colorbar(min(Z),max(Z))
-->// Grafik pada jendela Graphic window number 1
-->scf(1); t = linspace(0,2*%pi,400);
-->polarplot(sin(3*t),cos(5*t), style=2)

Gambar 16.38 Ilustrasi Visualisasi Data Pada Beberapa Jendela Grafik

Jendela Grafik - 251

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.
Selanjutnya fungsi jetcolormap dan colorbar adalah fungsi-fungsi untuk pengaturan
gradasi warna. Penjelasan mengenai kedua fungsi tersebut akan diberikan pada subbab
mengenai Pengaturan Gradasi Warna.

Kurva Parametrik Tiga Dimensi


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;
-->param3d(x,y,z)

//Gambar 16.39

Gambar 16.39 Ilustrasi pembuatan grafik dengan fungsi param3d

Jendela Grafik - 252

Membuat Grafik Tiga Dimensi dengan Fungsi Plot3d dan Plot3d1


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)

Matrik XN diperoleh melalui operasi konkatenasi kolom sebanyak n2 kali terhadap


transpose dari vektor x. Kemudian matrik YN diperoleh melalui operasi konkatenasi baris
sebanyak n1 kali terhadap vektor y.
Ilustrasi penggunaan fungsi ndgrid adalah sebagai berikut:
-->x = -1:0.5:1
x =
- 1.

- 0.5

0.

0.5

1.

-->y = -1:0.4:1
y =
- 1.

- 0.6

- 0.2

-->[U,V] = ndgrid(x,y);

0.2

0.6

1.

Jendela Grafik - 253

-->U
U =
- 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.

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.

-->V
V =
-

1.
1.
1.
1.
1.

0.6
0.6
0.6
0.6
0.6

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();
-->plot3d(x,y,Z);

//Gambar 16.40

Gambar 16.40 Ilustrasi pembuatan grafik dengan fungsi plot3d

Jendela Grafik - 254

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);
-->R = sqrt(X.^2 + Y.^2) + %eps;
-->Z = sin(R)./R;
-->f = scf();
-->plot3d1(x,y,Z)

// Gambar 16.41

-->f.color_map = jetcolormap(50);
-->colorbar(min(Z),max(Z))

Gambar 16.41 Ilustrasi pembuatan grafik dengan fungsi plot3d1

Jendela Grafik - 255

Mengatur Sudut Pandang


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.

Gambar 16.42 Tampilan default dari Gambar 16.41


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.

Gambar 16.43 Pengaturan sudut pandang melalui jendela Axes Editor


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

Mengatur Gradasi Warna


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

Gambar 16.45 Ilustrasi Colormap dalam Demonstrasi Scilab

Membuat Grafik Tiga Dimensi dengan Fungsi Surf


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:
[XM, YM] = meshgrid(x, y)

Jendela Grafik - 258

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.
Ilustrasi penggunaan fungsi meshgrid adalah sebagai berikut:
-->x = -1:0.5:1;
-->y = -1:0.4:1;
-->[X,Y] = meshgrid(x,y)
Y =
- 1.
- 0.6
- 0.2
0.2
0.6
1.
X =
-

1.
1.
1.
1.
1.
1.

- 1.
- 0.6
- 0.2
0.2
0.6
1.

0.5
0.5
0.5
0.5
0.5
0.5

- 1.
- 0.6
- 0.2
0.2
0.6
1.

0.
0.
0.
0.
0.
0.

- 1.
- 0.6
- 0.2
0.2
0.6
1.

- 1.
- 0.6
- 0.2
0.2
0.6
1.

0.5
0.5
0.5
0.5
0.5
0.5

1.
1.
1.
1.
1.
1.

Berikut ini adalah contoh penggunaan fungsi surf.


-->x = linspace(0,5,10); y = x;
-->[X,Y] = meshgrid(x,y);
-->Z = X.^2 - Y.^2;
-->clf() ;f = scf(0);
-->surf(X,Y,Z)
-->f.color_map = hsvcolormap(32);

//Gambar 16.46

Jendela Grafik - 259

Gambar 16.46 Ilustrasi pembuatan grafik dengan fungsi surf

Grafik Tiga Dimensi Dari Suatu Fungsi


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

Berikut ini contoh visualisasi tiga dimensi dengan fungsi fplot3d1.


-->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);
-->xtitle('z = (x^2 - y^2)*exp(-x^2 - y^2)')
-->f.color_map = rainbowcolormap(30);

Hasil dari statemen-statemen ini adalah seperti yang diperlihatkan pada Gambar 16.47.

Gambar 16.47 Ilustrasi pembuatan grafik dengan fungsi fplot3d1

Jendela Grafik - 261

Menyimpan, Menyalin dan Mencetak Gambar


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

Di dalam Scilab telah terpasang fungsi-fungsi yang merupakan implementasi dari


algoritma-algoritma dalam metode numerik seperti fsolve untuk menyelesaikan
persamaan nonlinier, intg untuk integrasi numerik, ode untuk menyelesaikan persamaan
differensial biasa, dan lain sebagainya.

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.

Contoh 1. Tentukan akar dari persamaan nonlinier:

Gambar 17.1 Contoh 1


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

Gambar 17.1 adalah visualisasi dari fungsi f(x).

Metode Numerik - 264

Berikut ini perhitungan akar dari fungsi f(x) dengan menggunakan nilai awal x=0.6.
-->x0 = 0.6;

// nilai awal

-->[xsol,fsol,info] = fsolve(x0,f)
info =
1.
fsol =
0.
xsol =
0.5671433

Diperoleh bahwa x = 0.567 adalah akar dari persamaan nonlinier

Contoh 2. Tentukan penyelesaian dari sistem persamaan nonlinier sebagai berikut:

Gambar 17.2 Contoh 2


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

Penyelesaian pertama sistem persamaan nonlinier g(x) dengan menggunakan nilai-awal


x1=1 dan x2=0 adalah sebagai berikut:
-->[xsol1, gsol1] = fsolve([1; 0], g)
gsol1 =
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:
-->[xsol2, gsol2] = fsolve([0; 1], g)
gsol2 =
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).
Untuk penyelesaian sistem persamaan nonlinier g(x)=0 dengan menggunakan fungsi
Jacobian maka harus dibuat terlebih dahulu fungsi Jacobian-nya. Fungsi Jacobian untuk
fungsi g(x) adalah sebagai berikut:
2 x 2 1
J x1 , x 2 1
8 x2
2 x1

Metode Numerik - 266

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

Berikut ini adalah statemen-statemen untuk penyelesaian sistem persamaan nonlinier


g(x)=0 yang menggunakan fungsi Jacobian sebagai argumen inputnya.
-->[xsol1, gsol1] = fsolve([1; 0], g, dg)
gsol1 =
10^(-14) *
0.1110223
- 0.7105427
xsol1 =
1.9006767
0.3112186
-->[xsol2, gsol2] = fsolve([0; 1], g, dg)
gsol2 =
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

Penyelesaian. Persamaan Van Der Waals dapat dinyatakan dengan statemen-statemen


sebagai berikut:
-->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:
-->a = 3.592; b = 0.04267;

// Konstanta gas karbondioksida

-->p = [1 10 100];

// Tekanan gas (atm)

-->v0 = ones(p);

// nilai awal untuk perhitungan v

Volume gas untuk kondisi suhu 300 K pada tekanan gas 1, 10 dan 100 atm dapat dihitung
dengan cara sebagai berikut:
-->T = 300;

// Suhu gas (Kelvin)

-->v = fsolve(v0, VanDerWaals)


v =

// Volume gas v untuk T = 300

24.512588

2.3544956

0.0795108

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:
-->T = 500;

// Suhu gas (Kelvin)

-->v = fsolve(v0,VanDerWaals)
v =

// Volume gas v untuk T = 500

40.982113

4.0577795

0.3663018

-->T = 700;

// Suhu gas (Kelvin)

-->v = fsolve(v0,VanDerWaals)
v =

// Volume gas v untuk T = 700

57.417958

5.7241663

0.5575542

Metode Numerik - 268

Berikut ini adalah rangkuman hasil perhitungannya.

Suhu (K)

300

500

700

Tekanan (atm)

Volume molal (L/mol)

24.51

10

2.35

100

0.08

40.98

10

4.06

100

0.37

57.42

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.
Penyelesaian. Posisi batu setelah dijatuhkan pada waktu t yaitu :

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
Sistem persamaan ini dapat diselesaikan dengan statemen-statemen sebagai berikut:
-->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.
-->h_sumur = 4.905*t_sol(1)^2
h_sumur =

// Kedalaman sumur dengan t1

175.83661
-->h_sumur = 343*t_sol(2)
h_sumur =

// Kedalaman sumur dengan t2

175.83661

Penyelesaian yang diperoleh yaitu kedalaman sumur adalah 175.8 m.

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:
-->tar = [8.3 12.3 18.8 22.9 23.1 24 27.3 30 35.9 41.6]
-->nikotin = [0.32 0.46 1.1 1.34 1.26 1.44 1.42 1.96 2.23 2.2];
-->[koef1, koef2] = reglin(tar, nikotin)
koef2 =
- 0.1638327
koef1 =
0.0629334

Jadi hubungan antara kadar nikotin dengan tar dapat dinyatakan dengan persamaan
sebagai berikut:
Garis regresi linier dapat dilihat pada Gambar 17.3.

Metode Numerik - 271

Gambar 17.3
Contoh 6. Berikut ini adalah data hasil pengukuran terhadap kekerasan kayu dan
kerapatan kayu.
Kerapatan
Kekerasan

27.3 28.4
413 549

29 30.3 32.7 35.6 38.8 39.4 39.9 40.6


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

Contoh 7. Misalkan kita mempunyai sekumpulan data sebagai berikut:


x

1.6

2.7

4.8

5.3

7.1

9.4

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;
-->y = [1.6 2.7 4.8 5.3 7.1 9.4];
-->yi = interpln([x;y], [1.3 3.4 5.5])
yi =
1.93

5.

8.25

Berikut ini adalah hasil interpolasi linier pada titik-titik yang dicari nilainya.
X

1.3

3.4

5.5

1.93

8.25

Gambar 17.5 adalah ilustrasi dari perhitungan interpolasi linier yang telah dilakukan.

Gambar 17.5

Metode Numerik - 274

Interpolasi Spline Kubik


Metode interpolasi linier mempunyai sebuah kelemahan yaitu tidak dapat menghasilkan
interpolasi yang halus. Untuk mendapatkan interpolasi yang halus dapat dilakukan dengan
metode interpolasi spline kubik yang dapat diselesaikan dengan menggunakan fungsi
splin dan interp secara berurutan.

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

Tabel 17.1 Tipe-Tipe Interpolasi Spline Kubik

Tipe spline

Asumsi

not_a_knot

Turunan ketiga dari fungsi spline pada titik

Clamped

( )

Natural

( )

,
(

Periodic

( )

( )

( ,
Turunan pada setiap titik
titik (

bersifat kontinu.

Monotone
Fast

dan

), ( ,

dihitung dengan interpolasi polinomial dari

) 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
( )

Catatan: ( ) adalah fungsi interpolator spline kubik.

Contoh 8. Misalkan kita mempunyai sekumpulan data sebagai berikut:


X

1.6

2.7

4.8

5.3

7.1

9.4

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;
-->y = [1.9 2.7 4.8 5.3 7.1 9.4];

Metode Numerik - 276

-->d = splin(x,y);
-->xi = [1.3 3.4 5.5];
-->yi = interp(xi,x,y,d)
yi =
1.7242467

5.0674667

8.3233333

Berikut ini adalah hasil interpolasi linier pada titik-titik yang dicari nilainya.
x

1.3

3.4

5.5

1.72

5.07

8.32

Gambar 17.6 adalah ilustrasi dari perhitungan interpolasi cubik spline.

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

yang digunakan dalam perhitungan gradien.


Contoh 9. Tentukan gradien dari fungsi yx 1 x , pada x =1.1.
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
-->dy = numderivative(f, 1.1)
dy =
0.3450328

Jadi y'(1.1) = 0.345


2
2
3
Contoh 10. Tentukan gradien dari fungsi z ( x1 , x2 ) x1 2 x1 x2 x2 , pada titik (1,-1).

Penyelesaian. Perhitungan gradien dari fungsi z ( x1 , x2 ) adalah sebagai berikut:


-->function z = h(x)
--> z = x(1)^2 + 2*x(1)*x(2)^2 - x(2)^3
-->endfunction
-->dz = numderivative(h, [1 -1])
dz =
4.

- 6.9999999

Jadi z (1, 1) = (4, -7).

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

Integrasi Numerik dari Suatu Fungsi


Integrasi numerik dari suatu fungsi real f(x) dengan batas bawah a dan batas atas b dapat
dihitung secara numerik dengan fungsi intg atau integrate.
Sintak dari fungsi intg adalah sebagai berikut
[Q, err] = intg(a, b, f, ea, er)

Deskripsi argumen input dan output yang terdapat pada fungsi intg adalah sebagai
berikut:

a dan b adalah batas bawah dan batas atas.

f adalah fungsi real f(x)

ea adalah nilai galat absolut untuk hasil perhitungan integral, ea bersifat opsional dan

mempunyai nilai default 10-14.

er adalah nilai galat relatif untuk hasil perhitungan integral, er bersifat opsional dan

mempunyai nilai default 10-8.

Q adalah hasil integrasi numerik

err adalah estimasi galat yang dihasilkan pada perhitungan integrasi.

Sintak dari fungsi integrate adalah sebagai berikut


Q = integrate(expr, v, a, b, ea, er)

Deskripsi dari argumen-argumen input dan output yang terdapat pada fungsi integrate
adalah sebagai berikut:

expr adalah sebuah obyek string yang menyatakan ekspresi fungsi real f(x)

v adalah variabel yang diintegrasikan

a dan b adalah batas bawah dan batas atas.

ea adalah nilai galat absolut untuk hasil perhitungan integral, ea bersifat opsional dan

mempunyai nilai default 10-14.

er adalah nilai galat relatif untuk hasil perhitungan integral, er bersifat opsional dan

mempunyai nilai default 10-8.

Q adalah hasil integrasi numerik

Metode Numerik - 279

Contoh 11. Tentukan nilai integral dari

1 x

dx

Penyelesaian. Berikut ini statemen-statemen untuk menghitung nilai integral di atas.


-->// Integrasi numerik dengan fungsi intg
-->function y = f(x)
--> y = 4/(1 + x^2)
-->endfunction
-->v = intg(0, 1, f)
v =
3.1415927
-->// Integrasi numerik dengan fungsi integrate
-->integrate('4/(1 + x^2)','x',0,1)
ans =
3.1415927

Diperoleh nilai integral

1 x

dx 3.142

Contoh 12 (Terjun Payung). Anggap kecepatan v(t) seorang penerjun payung setelah t
detik dapat dinyatakan dengan persamaan sebagai berikut

vt

gm
c
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
d
1 exp t dt

c 0
m
t

Metode Numerik - 280

Dengan menggunakan data yang diberikan, jarak yang telah ditempuh oleh penerjun
payung dapat kiat hitung dengan statemen sebagai berikut:
-->d = 9.8*68.1/12.5*integrate('1 - exp(-12.5/68.1*t)','t',0,10)
d =
289.43515

Jawaban yang diperoleh yaitu jarak yang ditempuh oleh penerjun payung setelah 10 detik
adalah sebesar 289.4 m.
Integrasi Numerik dari Suatu Data Diskrit
Kadangkala terdapat situasi dimana fungsi yang akan diintergralkan tidak diketahui
formulanya dan yang diketahui hanyalah nilai fungsinya pada sejumlah titik tertentu yaitu
(x1, y1), (x2, y2), ..., (xn, yn), dimana nilai xi adalah berurutan dimulai dari yang terkecil
sampai yang terbesar. Luas area dari bidang yang dibentuk oleh titik-titik tersebut
terhadap sumbu horisontal dapat dihitung dengan menggunakan pendekatan interpolasi
linear atau interpolasi kubik spline.
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.

Contoh 13. Misalkan sebuah kurva mempunyai data-data 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

0.20

1.31

1.31

1.74

2.07

2.46

2.84

3.51

3.18

2.36

0.23

Tentukan luas area dari kurva tersebut terhadap sumbu horisontal?

Metode Numerik - 281

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];
-->inttrap(x,y)
ans =

//Integrasi numerik dg interpolasi linier

1.5946
-->intsplin(x,y)
ans =

//Integrasi numerik dg interpolasi kubik spline

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:
-->t = [0 4 29 44]; v = [18 30 30 0];

Selanjutnya, jarak yang ditempuh oleh van dapat dihitung dengan metode integrasi
numerik dengan pendekatan interpolasi trapezoidal.
-->d = inttrap(t,v) //jarak yg ditempuh oleh mobil selama 44 detik
d =
1071.

Jadi jarak yang ditempuh oleh mobil selama 44 detik adalah sejauh 1071 m.

Persamaan Differensial Biasa


Suatu persamaan diferensial biasa orde pertama dengan kondisi awal secara umum dapat
dinyatakan dengan notasi matematika sebagai berikut:

dy
f t , y
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 waktuwaktu 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.
Contoh 15. Selesaikan persamaan diferensial orde pertama sebagai berikut.

dy
2ty ,
dt

y0 1

Penyelesaian. Perintah-perintah untuk menyelesaikan persamaan diferensial tersebut


adalah sebagai berikut:
-->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
Contoh 16. Selesaikan sebuah sistem persamaan diferensial orde pertama.
dy1
2 y1 4 y 2
dt
dy 2
y1 3 y 2
dt

y1 0 3
y 2 0 0

Penyelesaian. Sistem persamaan diferensial ini dapat diselesaikan dengan statemenstatemen sebagai berikut:
-->function ydot = f(t,y)
--> ydot(1) = 2*y(1) - 4*y(2)
--> ydot(2) = y(1) - 3*y(2)
-->endfunction
-->y0 = [3; 0];

// Nilai awal

Metode Numerik - 285

-->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
Contoh 17. Selesaikan persamaan diferensial orde kedua sebagai berikut.

d 2 y dy
2 y 0,
dx 2 dx

y0 4,

dy
0 5
dx

Penyelesaian. Agar sebuah persamaan diferensial orde-n dapat diselesaikan dengan


fungsi ode maka persamaan diferensial tersebut harus dinyatakan ke dalam sistem
persamaan diferensial orde pertama yang ekuivalen. Misalkan

dan

maka

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

Berikut ini statemen-statemen untuk menyelesaikan sistem persamaan diferensial.


-->function dy = f_ode2(t,y)
--> dy = [y(2); 2*y(1) - y(2)]
-->endfunction
-->y0 = [4; -5];
-->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

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 ?
Penyelesaian. Persamaan diferensial penerjun payung dapat kita nyatakan dengan
statemen sebagai berikut.
-->g = 9.80;

// percepatan gravitas (m/s^2)

-->m = 72.7;

// massa penerjun payung

-->b = 30;

// konstanta tahanan udara

-->v0 = 10;

// kecepatan awal

-->function vdot = fode(t,v,m,g,b)


--> k = m*g/b
--> vdot = -b/m*(v^2 - k)
-->endfunction

Selanjutnya, persamaan diferensialnya dapat diselesaikan dengan statemen-statemen


sebagai berikut:
-->t = linspace(0,2,500)';
-->v = ode(v0,0,t,fode);
-->v($-4:$)
ans =
4.874411

4.8743926

4.8743745

4.8743567

4.8743391

-->plot2d(t,v,style=5)
-->xtitle('Model kecepatan penerjun payung','Waktu (s)','Kecepatan (m/s)')

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
Contoh 19 (Hukum pendinginan Newton). Sebuah bola tembaga dipanaskan sampai
suhu 100 oC. Kemudian tembaga tersebut dicelupkan ke dalam air yang mempunyai suhu
30 oC. Tiga menit kemudian suhu dari bola tembaga turun menjadi 70 oC. Hitung waktu
yang diperlukan sehingga suhu dari bola tembaga turun menjadi 31 oC? Serta buat grafik
penurunan suhu dari bola tembaga?
Penyelesaian. Menurut hukum pendinginan Newton, proses pendinginan bola tembaga
dapat dinyatakan dalam persamaan diferensial sebagai berikut:

dT
k T Tair
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.
-->function Tdot = func(t,T,Tair,k)
--> Tdot = k*(T - Tair) // Tdot = dT/dt
-->endfunction
-->Tair = 30;

// Suhu air

-->T0 = 100;

// Suhu bola tembaga pada t = 0; T(0) = 100

Metode Numerik - 289

Nilai konstanta k dapat dicari dengan menggunakan data suhu bola tembaga pada detik
ketiga setelah dicelupkan, T(3) = 70.
-->function delta = fk(k)
--> t = 3; T3 = 70;
--> delta = ode(T0,0,t,func) - T3
-->endfunction
-->k = fsolve(0, fk)
k =

// mencari nilai k

- 0.1865386

Diperoleh bahwa nilai k = -0.1865386.


Berikut ini adalah perhitungan untuk menentukan nilai t sehingga diperoleh T(t) = 31.
-->function delta = T31(t)
--> delta = ode(T0,0,t,func) - 31
-->endfunction
-->t31 = fsolve(10, T31)
t31 =

// Waktu yang diperlukan sehingga 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)
-->xtitle('Suhu bola tembaga','Waktu (detik)','Suhu (Celcius)')

Metode Numerik - 290

Gambar 17.13
Contoh 20 (Pemangsa dan Mangsa). Persamaan diferensial Lotka-Volterra adalah
persamaan diferensial yang memodelkan interaksi antara pemangsa dengan mangsa.
Misalkan variabel y1 dan y2 adalah variabel yang menyatakan populasi mangsa dan
pemangsa maka persamaan diferensial Lotka-Volterra adalah sebagai berikut:
dy1
y1 1 1 y 2
dt
dy 2
y 2 2 2 y1
dt

dimana parameter 1 dan 2 adalah laju pertumbuhan alami dari populasi pemangsa dan
mangsa, parameter 1 dan 2 adalah interaksi antara pemangsa dengan mangsa. Misalkan
nilai dari parameter-parameter 1 = 1.0, 2 = 0.5, 1 = 0.1 dan 2 = 0.02. Selesaikan sistem
persamaan diferensial ini jika diketahui nilai awalnya adalah y1(0) = 100 dan y2(0) = 10.
Penyelesaian. Persamaan diferensial Lotka-Volterra sebagai berikut:
-->function ydot = LotkaVolterra(t,y)
--> ydot(1) = y(1)*(1.0 - 0.1*y(2))
--> ydot(2) = y(2)*(-0.5 + 0.02*y(1))
-->endfunction

Metode Numerik - 291

Kondisi awal dapat dinyatakan dalam bentuk vektor sebagai berikut:


-->y0 = [100; 10];

// Kondisi awal

Waktu dimana dilakukan evaluasi terhadap variabel y1 dan y2 adalah sebagai berikut:
-->t = linspace(0,25,5000);

Persamaan Lotka-Voltera dapat diselesaikan dengan perintah sebagai berikut:


-->y = ode(y0,0,t,LotkaVolterra);

Gambar 17.14 dan Gambar 17.15 adalah dua grafik yang menyatakan hubungan antara
mangsa dan pemangsa.
-->plot2d(t',y', style=[2 5])

// Gambar 17.14

-->legend("Mangsa","Pemangsa",5,%f);
-->xtitle('Pers. Lotka-Volterra','Waktu','Populasi')
-->clf(), plot2d(y(1,:),y(2,:), style=2) // Gambar 17.15
-->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.

Bilangan Random dan Simulasi


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

Tabel 17.2 Fungsi untuk membuat bilangan random


Distribusi

Sintak

Seragam [0,1]

grand(m,n,def)

Seragam [a,b]

grand(m,n,unf,a,b)

Seragam diskrit (min=n1, max=n2)

grand(m,n,uin,n1,n2)

Normal (rata-rata=av,simpangan-baku=sd)

grand(m,n,nor,av,sd)

Binomial (percobaan=N,peluang=p)

grand(m,n,bin,n,p)

Eksponensial (laju=k)

grand(m,n,exp,k)

Poisson (rata-rata=k)

grand(m,n,poi,k)

Penyelesaian. Berikut ini statemen-statemen untuk membuat bilangan random.


-->mu = 10; sd = 2;

// rata-rata = 10; simpangan baku = 2;

-->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 adalah histogram dari bilangan random X.

Metode Numerik - 294

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.
Penyelesaian. Pembuatan bilangan random dengan distribusi eksponensial dan
histogrammnya dapat dilakukan dengan cara sebagai berikut.
-->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))
-->legend(["Histogram bilangan random eksponensial" ...
--> "kurva distribusi eksponensial eksak"]);

Metode Numerik - 295

Gambar 17.17
Contoh 23 (Pelemparan sepasang dadu). Apabila sepasang dadu dilemparkan, dengan
metode Monte Carlo tentukan kemungkinan munculnya hasil dari penjumlahan dua angka
yang muncul dari setiap dadu yang nilainya lebih kecil atau sama dengan empat?
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)

Percobaan pertama, yaitu simulasi untuk 10 kali pelemparan sepasang dadu.


-->n = 10;

// jumlah pelemparan dadu

-->dadu = grand(2,n,'uin',1,6)
dadu =
3.
1.

3.
6.

5.
2.

6.
6.

1.
2.

2.
6.

1.
1.

6.
1.

4.
5.

2.
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.
-->s4 = s(s <= 4);
-->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:
-->n = 100;

// jumlah pelemparan dadu

-->dadu = grand(2,n,'uin',1,6);
-->s = sum(dadu,'r');
-->s4 = s(s <= 4);
-->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.
Percobaan ketiga yaitu simulasi pelemparan dadu sebanyak 10000 kali:
-->n = 10000;

// jumlah pelemparan dadu

-->dadu = grand(2,n,'uin',1,6);
-->s = sum(dadu,'r');
-->s4 = s(s <= 4);

Metode Numerik - 297

-->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 = .
Penyelesaian. Hampiran integral I dengan menggunakan Monte Carlo dapat diperoleh
dengan persamaan sebagai berikut

1 0
I 4
n

i 1

1 x 2i

dimana xi adalah bilangan random yang terdistribusi seragam pada selang [0,1].
Berikut ini adalah statemen-statemen untuk menghitung integral I dengan menggunakan
bilangan random sebanyak 10, 100, 1000, 10000, dan 100000.
-->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 =
2.7569855

3.0039322

3.1579516

3.1363224

3.1449644

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

Menghindari Penggunaan Statemen Perulangan


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.

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 =
0.

0.5

0.707

0.866

1.

0.866

0.707

0.5

0.000

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 =
0.

0.5

0.707

0.866

1.

0.866

0.707

0.5

0.000

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.
Perhitungan hampiran nilai dengan menggunakan operasi perhitungan yang berbasis
skalar dan statemen perulangan adalah sebagai berikut:
-->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

Selanjutnya, pada perhitungan hampiran nilai dengan menggunakan operasi perhitungan


yang berbasis vektor, statemen-statemennya adalah sebagai berikut:

Penggunaan Scilab yang Efisien - 301

-->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.
-->// Perhitungan dengan operasi berbasis skalar
-->tic(); pi = MonteCarlo1(1000000), t1 = toc()
pi =
t1

3.1415695
=
3.188

-->// Perhitungan dengan operasi berbasis vektor


-->tic(); pi = MonteCarlo2(1000000), t2 = toc()
pi =
t2

3.1431314
=
0.078

Contoh 3. (Matrik Vandermonde). Definisi dari matrik Vandermonde adalah sebagai


berikut.

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);
-->tic(); vander1(x); t = toc()
t =
5.57
-->tic(); vander2(x); t = toc()
t =
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);
--> k = (x >= 0 & x <= 1);
-->endfunction

y(k) = sin(x(k))
y(k) = x(k)

Berikut ini adalah ilustrasi waktu eksekusi yang diperlukan oleh kedua fungsi di atas.
-->x = -2:0.0001:2;
-->tic(); foo1(x); t1 = toc()
t1 =
2.295
-->tic(); foo2(x); t2 = toc()
t2 =
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

Menggunakan Alokasi Memori Awal


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.
Contoh 5. (Matrik Vandermonde). Perhitungan matrik Vandermonde pada Contoh 3
dapat diselesaikan dengan jauh lebih cepat apabila dilakukan alokasi memory terlebih
dahulu terhadap matrik V sebelum proses perulangan dilakukan. Fungsi vander3 di bawah
ini adalah perhitungan matrik Vandermonde dengan 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.
-->tic(); vander3(x); t3 = toc()
t3 =
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 statemenstatemen untuk kedua fungsi tersebut.
function [t, y] = rk40(f, t0, tn, y0, n)
// Metode Runge-Kutta orde-4
// untuk penyelesaian y' = f(t,y), y(t0) = y0.
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
function [t, y] = rk4(f, t0, tn, y0, n)
// Metode Runge-Kutta orde-4
// untuk penyelesaian y' = f(t,y), y(t0) = y0.
h = (tn - t0)/n
t = zeros(1, n+1)
y = zeros(1, n+1)
t(1) = t0;
y(1) = y0;

// Alokasi vektor awal untuk t


// Alokasi vektor awal untuk y

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
-->tic(); [t,y] = rk40(dfeq,0,1,1,5000); t0 = toc()
t0 =
0.361
-->tic(); [t,y] = rk4(dfeq,0,1,1,5000); t1 = toc()
t1 =
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.

Menghindari Fungsi Rekursif


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 nonrekursif. 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.
-->// Perhitungan suku ke-20 deret Fibonnaci
-->tic(); fib1_20 = fib1(20); t_fib1 = toc()
t_fib1 =
0.052
-->tic(); fib2_20 = fib2(20); t_fib2 = toc()
t_fib2 =
0.
-->// Perhitungan suku ke-30 deret Fibonnaci
-->tic(); fib1_30 = fib1(30); t_fib1 = toc()
t_fib1 =
5.91

Penggunaan Scilab yang Efisien - 308

-->tic(); fib2_30 = fib2(30); t_fib2 = toc()


t_fib2 =
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

Baudin, M. 2011. Introduction to Scilab. The Scilab Consortium Digiteo.


Baudin, M. 2011. Programming in Scilab. The Scilab Consortium Digiteo.
Campbell, S.L, Chancelier, J-P, Nikoukhah, R. 2006. Modeling and Simulation in Scilab
/Scicos with Scicoslab 4.4 2ed. Springer. New York.
Chapra, S.C., Canale, R.P. 2015. Numerical Methods for Engineers 7ed. McGraw-Hill. New
York.
Gomez, C., dkk. 1999. Engineering and Scientific Computing with Scilab. Birkhauser. Boston,
1999.
Hudson, S. 2014. Numerical Computing for Engineers.
http://users.tricity.wsu.edu/~hudson/Teaching/EE221/Text
Kaw, A.K. 2011. Numerical Methods with Applications.
http://mathforcollege.com/nm/topics/textbook_index.html
Moler, C. 2004. Numerical Computing with Matlab.
Rietsch, E. 2010. An Introduction to Scilab from a Matlab Users Point of View.
The Scilab Consortium. Scilab. http://www.scilab.org.

Anda mungkin juga menyukai