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
[email protected]. 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
1
Menjalankan Program Scilab
1
Jendela-Jendela Scilab
2
Sistem Bantuan
4
2 Dasar-Dasar Penggunaan Scilab
6
Interaksi dengan Scilab
6
Scilab Sebagai Kalkulator Sains
6
Statemen
7
Baris Komentar
8
Bilangan
9
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
v
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
x
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)
T
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 =
m
// 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 .....
1
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
a–b
a – b
Perkalian
a×b
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:
d
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:
I
Rr
dimana adalah gaya gerak listrik, r adalah tahanan internal dan R adalah tahanan luar.
Matematika Dasar - 29
Beda tegangan (V) yang terdapat di antara terminal baterei dapat dihitung dengan formula sebagai berikut:
V Ir Arus yang mengalir pada rangkaian dan beda tegangan yang terdapat pada terminal baterei dapat kita hitung dengan perintah-perintah sebagai berikut. -->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 =
n
4. = 5.
-->[m,n] = rat(%pi,0.001) n =
m
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"
F
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
a w FH h cosh 2 1 w FH w g
Dimana:
FH adalah tegangan tarik horisontal yang bekerja pada kabel optik Tmax adalah tegangan tarik maksimum yang bekerja pada kabel optik h adalah panjang lendutan maksimum a adalah jarak antara tiang w adalah berat satuan kabel adalah kerapatan massa (density) kabel g adalah percepatan gravitasi
Perhitungan tegangan tarik maksium (Tmax) yang bekerja pada kabel dan tinggi lendutan maksimum (h) adalah sebagai berikut.
Matematika Dasar - 44
-->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.2×10-6 mol/Liter. Tentukan berapakah nilai pH-nya ? Penyelesaian. Nilai pH suatu zat dapat ditentukan dengan formula sebagai berikut:
pH log10 H
dimana [H+] adalah konsentrasi dari ion hidrogen dalam satuan mol/Liter. Maka nilai pH dari minuman kopi dapat dihitung sebagai berikut: -->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 = 2015–1990;
// 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
x
= 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
p
n xip i 1
2
x x x 2 1
2 2
2 1/ 2 n
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:
2
i, j
Norma-matrik 2: A 2 max Ax
Norma-matrix 1: A 1 max aij
x s 1
j
Norma-matrik ∞: A max i
2
i
a
ij
j
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
1
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
8
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
2
x1
8
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 koefisien–koefisien 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
R
= 2 2 + 3x + 5x ------------2 3 4 x + x + x + x
-->Y = Q + R Y = 2 3 4 5 6 7 2 + 9x + 18x + 21x + 30x + 24x + 17x + 9x ----------------------------------------2 3 4 x + x + x + x
Perkalian Operasi perkalian terhadap suatu fungsi polinomial atau rasional dapat dilakukan dengan menggunakan operator bintang (*), seperti pada contoh-contoh di bawah ini. -->y = poly(0,'y'); -->e = y – 3; -->f = y + 4; -->g = e*f g = 2 - 12 + y + y -->x = poly(0,'x'); -->r = (x + 1)/(3 - x) r = 1 + x ----3 - x -->s = (x - 3)^2/(x - 2) s = 2 9 - 6x + x ---------- 2 + x
Polinomial dan Rasional - 127
-->t = r*s t = 2 3 + 2x - x ---------- 2 + x -->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
s
1
1 + s
-->E(3,3) = 1 + s + s^2 E = 2 s
s
0
1
1 + s
0 2
0
0
1 + s + s
-->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
- 1
3
2 - x
- 3
3
1
- 2 - x
-->PA = det(M) PA = 2 3 - 2 + x + 2x - x
Polinomial dan Rasional - 138
Dari output di atas diperoleh polinomial karakterisik dari matrik di atas yaitu: ( ) 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
R
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
W
Th
F
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 select–case, break dan continue.
For Statemen for digunakan untuk melakukan eksekusi secara berulang (iterasi) dalam jumlah tertentu terhadap suatu blok-statemen. Bentuk umum statemen ini adalah sebagai berikut: 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 if–else digunakan untuk mengontrol apakah suatu blok statemen akan dieksekusi atau tidak. Bentuk paling sederhana dari statemen ini adalah sebagai berikut: if ekspresi then blok-statemen end
Blok statemen yang terletak di dalam blok if hanya akan dieksekusi jika ekspresi yang diuji bernilai benar. Kata-kunci then dalam blok kondisional if-else dapat diganti dengan ENTER, tanda koma (,) atau tanda titik-koma (;).
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 select–case. -->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 select–case 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 =
u
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 =
n
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
x
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
!
-->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
r
Merah
g
Hijau
b
Biru
c
Cyan
m
Magenta
y
Kuning
k
Hitam
w
Putih
Berikut ini kode string untuk mendefinisikan corak garis dengan fungsi plot. 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
o
Bulat
*
Asterisk (*)
.
Titik
x
Silang
s atau square
Kotak
d atau diamond
Diamond
^
Segitiga
V
Segitiga
<
Segitiga Segitiga
'pentagram'
Pentagram
>
Berikut ini contoh pengaturan corak dan warna garis serta penanda pada titik-titik kurva dengan fungsi plot. -->xdat = (0:10)'; -->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 1×2. -->//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 2×2. -->//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)
1
24.51
10
2.35
100
0.08
1
40.98
10
4.06
100
0.37
1
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
2
3
4
5
6
y
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
Y
1.93
5
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
2
3
4
5
6
Y
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
y
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
4
1 x
2
dx
0
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
4
1 x
2
dx 3.142
0
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
y
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 v dt m b
Metode Numerik - 287
dimana v adalah kecepatan penerjun payung (m/s), m adalah massa penerjun payung (kg), g adalah percepatan gravitasi dan b adalah koefisien tahanan udara. Apabila diketahui m = 72.7 kg, g = 9.80 m/s2 dan b = 30 kg/m. Selesaikan persaman diferensial tersebut dan gambar laju dari penerjun payung sesaat setelah melompat sampai dua detik berikutnya ? 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
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.
x
0
sin(x)
0.0
0.5
0.707
0.866
1.0
0.866
0.707
0.5
0.0
Berikut ini statemen untuk menyatakan sudut yang akan dihitung nilai sinusnya. -->x = [0, 1/6, 1/4, 1/3, 1/2, 2/3, 3/4, 5/6, 1]*%pi;
Pada operasi yang berbasis skalar, perhitungan nilai sinus dari elemen vektor x akan dilakukan dengan menggunakan statemen-statemen sebagai berikut.
Penggunaan Scilab yang Efisien - 300
-->for i = 1:9 --> y(i) = sin(x(i)); -->end -->y y = 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 User’s Point of View. The Scilab Consortium. Scilab. http://www.scilab.org.