Metode Numerik Menggunakan C, C++ dan Matlab atau Octave
I Wayan Sudiarta, Ph.D
Program Studi Fisika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Mataram
Februari 14, 2011
ii
Daftar Isi
1 Pendahuluan
1
2 Aproksimasi Maclaurin dan Taylor
3
3 Metode Horner
9
4 Sistem Bilangan
13
5 Floating Point - Titik Mengambang 5.1 Bentuk Floating Point . . . . . . . . . . . . . . . . . . . .
19 19
6 Interpolasi 6.1 Metode Lagrange 6.2 Metode Newton . 6.3 Error . . . . . . . 6.4 Fenomena Runge
. . . .
21 22 24 27 28
. . . . .
29 29 29 30 30 30
. . . . . . . . . . . . . .
31 33 34 34 35 36 37 38 39 39 39 39 39 40 42
. . . .
. . . .
. . . .
. . . .
. . . .
7 Persamaan Nonlinier 7.1 Metode Fixed Point Iterasi 7.2 Metode Bisection . . . . . 7.3 Metode Newton . . . . . . 7.4 Metode Secant . . . . . . . 7.5 Metode Regula-Falsi . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
8 Matlab atau Octave 8.1 Notasi dan konvensi . . . . . . . . . . 8.2 Operasi Bilangan . . . . . . . . . . . . 8.3 Variabel dan Konstanta . . . . . . . . 8.4 Fungsi-Fungsi Matematis . . . . . . . 8.5 Vektor dan Matriks . . . . . . . . . . . 8.5.1 Fungsi-fungsi untuk Matriks . 8.5.2 Operasi Matriks . . . . . . . . . 8.6 Input dan Output . . . . . . . . . . . . 8.7 Pemrograman . . . . . . . . . . . . . . 8.7.1 Pengulangan for . . . . . . . . . 8.7.2 Persyaratan atau Percabangan 8.8 Visualisasi . . . . . . . . . . . . . . . . 8.8.1 Grafik Dua Dimensi . . . . . . 8.8.2 Grafik Tiga Dimensi . . . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . . . . . . . . . . . . . . . . . . if . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
. . . .
. . . . .
. . . . . . . . . . . . . .
ii
Daftar Isi 8.8.3 Grafik Contour . . . . . . . . . . . . . . . . . . . . 8.9 Input Output Data . . . . . . . . . . . . . . . . . . . . . .
43 44
1
Pendahuluan Apa itu Metode Numerik. Apa saja yang diperlukan fisika komputasi. Aplikasinya mencakup bidang apa saja. proses yang dilakukan untuk fisika komputasi Menentukan Persamaan dasar, hati-hati dengan wilayah aplikasi persamaan tersebut. Menentukan metode untuk discritasi Membuat algoritma. ”Becoming familiar with basic numerical methods without realizing their limitation would be foolhardy”
2
Aproksimasi Maclaurin dan Taylor Sebelum kita membahas tentang metode-metode numerik untuk menyelesaikan suatu permasalahan, pada bab ini kita akan mempelajari tentang deret Maclaurin dan Taylor yang akan digunakan untuk aproksimasi dan penurunan persamaan-persamaan numerik. Deret Taylor merupakan sebuah deret pangkat atau power series yang diberikan dengan definisi sebagai berikut:
P (x) =
n X
ak xk−1
k=0
= a0 + a1 x + a2 x2 + · · · + an xn
(2.1)
. Atau dengan kata lain, sebuah deret pangkat adalah sebuah polinom dengan orde n. Pada banyak aplikasi di bidang fisika, kita mendapat kemudahan dalam kalkulasi atapun formulasi jika kita bisa merepresentasikan sebuah fungsi dengan sebuah deret pangkat. Disini kita berasumsi bahwa sebuah deret pangkat bisa ditemukan dan konvergen pada interval yang diinginkan. Untuk lebih jelasnya, kita akan menggunakan fungsi trigonometri cos(x) sebagai contoh. Sebuah deret tak berhingga untuk fungsi cos(x) adalah cos(x) = a0 + a1 x + a2 x2 + a3 x3 + · · ·
(2.2)
Kita perhatikan bahwa deret pangkat ini konvergen sekitar x = 0. Koefisien-koefisien, ak , harus ditentukan sehingga fungsi polinom yang dihasilkan mendekati fungsi sebenarnya. Bagaimana cara mendapatkan nilai ak ? Caranya adalah dengan menggunakan turunan. Ji-
4
Aproksimasi Maclaurin dan Taylor
ka kita lakukan turunan berturut-turut untuk fungsi cos(x) dan deret pangkatnya, kita mendapatkan, cos(x) = a0 + a1 x + a2 x2 + a3 x3 + a4 x4 · · · d cos(x) = − sin(x) = a1 + 2a2 x + 3a3 x2 + 4a4 x3 · · · dx d2 cos(x) = − cos(x) = 2!a2 + 3 × 2a3 x + 4 × 3a4 x2 · · · 2 dx d3 cos(x) = sin(x) = 3!a3 + 4 × 3 × 2a4 x · · · dx3 ······ Jika kita substitusi nilai x = 0 pada fungsi cos(x) dan turunanturunannya, kita mendapatkan bahwa a0 = 1, a1 = 0, a2 = −1 , a3 = 0, 2! 1 a4 = 4! dan seterusnya. Jadi dengan menggunakan koefisien-koefisien ini deret pangkat yang dihasilkan untuk fungsi cos(x) adalah cos(x) = 1 −
1 2 1 4 x + x ··· 2! 4!
(2.3) (2.4)
Melihat proses di atas yang menghasilkan deret pangkat untuk sebuah fungsi cos(x) maka pertanyaannya adalah ”bagaimana cara mendapatkan deret pangkat untuk sebuah fungsi f (x) secara umum?”. Kita akan menggunakan pendekatan deret pangkat x atau yang lebih umum deret pangkat (x − a). Jadi sebuah fungsi f (x) dapat direpresentasikan dengan deret pangkat (x − a) pada daerah sekitar x = a yang berbentuk f (x) = a0 + a1 (x − a) + a2 (x − a)2 + a3 (x − a)3 + · · ·
(2.5)
Jika kita lakukan diferensiasi atau turunan berturut-turut seperti proses untuk cos(x), kita mendapatkan, f (x) = a0 + a1 (x − a) + a2 (x − a)2 + a3 (x − a)3 + a4 (x − a)4 + · · · (2.6) f ′ (x) = a1 + 2a2 (x − a) + 3a3 (x − a)2 + 4a4 (x − a)3 + · · · (2.7) ′′ 2 f (x) = 2!a2 + 3 × 2a3 (x − a) + 4 × 3a4 (x − a) + · · · (2.8) ′′′ f (x) = 3!a3 + 4 × 3 × 2a4 (x − a) + · · · (2.9) ··· (2.10)
5 Jika kita substitusi x = a pada persamaan-persamaan (2.10), kita mendapatkan koefisien-koefisien sebagai berikut f (x) = a0 f ′ (x) = a1 f ′′ (x) = 2!a2 f ′′′ (x) = 3!a3 ···
(2.11) (2.12) (2.13) (2.14) (2.15)
atau dengan manipulasi sederhana, kita mendapatkan, f (a) 0! ′ f (a) a1 = f ′ (a) = 1! ′′ f (a) a2 = 2! f ′′′ (a) a3 = 3! ··· = ··· a0 = f (a) =
an =
f
(2.16) (2.17) (2.18) (2.19) (2.20)
(n)
(a) n!
(2.21)
Ingat bahwa notasi f (n) (x) adalah merupakan turunan ke n dari fungsi f (x) dan factorial 0! = 1. Jadi deret pangkat untuk f (x) di daerah sekitar x = a adalah f (a) f ′ (a) f ′′ (a) + (x − a) + (x − a)2 0! 1! 2! f ′′′ (a) f (iv) (a) + (x − a)3 + (x − a)4 + · · · 3! 4! ∞ X f (k) (a) (x − a)k = k! k=0
f (x) =
(2.22) (2.23) (2.24)
Deret pangkat ini diberi nama deret Taylor. Jika nilai a = 0 pada deret Taylor di atas, disebut deret Maclaurin. Disini deret berguna hanya untuk interval sekitar x = 0. Jadi deret Maclaurin adalah
6
Aproksimasi Maclaurin dan Taylor
f ′′ (0) 2 f (0) f ′ (0) + x+ x 0! 1! 2! ∞ X f (k) (0) k x = k! k=0
f (x) =
+
f ′′′ (0) 3 f (iv) (0) 4 x + x +··· 3! 4!
(2.25) (2.26)
Deret-deret Maclaurin yang penting untuk aplikasi di bidang fisika adalah sebagai berikut x3 x5 x7 x9 + − + + · · · , berlaku pada semua x (2.27) 3! 5! 7! 9! x2 x4 x6 x8 + − + + · · · , berlaku pada semua x (2.28) cos(x) = 1 − 2! 4! 6! 8! x2 x3 x4 x5 + + + + · · · , berlaku pada semua x exp(x) = 1 + x + 2! 3! 4! 5! (2.29) 1 = 1 + x + x2 + x3 + x4 + x5 + · · · , berlaku pada − 1 < x < 1 1−x (2.30) 3 4 5 2 x x x x + − + + · · · , berlaku pada − 1 < x ≤ 1 ln(1 + x) = x − 2 3 4 5 (2.31) 5 7 9 3 x x x x + − + + · · · , berlaku pada − 1 < x ≤ 1 tan−1 (x) = x − 2 5 7 9 (2.32) x3 x5 x7 x9 sinh(x) = x + + + + + · · · , berlaku pada semua x (2.33) 3! 5! 7! 9! x2 x4 x6 x8 + + + + · · · , berlaku pada semua x (2.34) cosh(x) = 1 + 2! 4! 6! 8! p 4 p 3 p 2 p p x + · · · , berlaku pada − 1 < x < 1 x + x + x+ (1 + x) = 1 + 4 3 2 1 (2.35) Ingat bahwa binomial kp = p!/(k!(p − k)!). Apakah deret Taylor atau Maclaurin yang kita peroleh konvergen ke fungsi sebenarnya? Apa yang menjadi ukuran bahwa deret itu konvergen? Untuk menjawab pertanyaan ini kita akan mendefinisikan fungsi sisa Rn (x) yang merupakan sisa dari fungsi f (x) dikurangi dengan jumlah (n + 1) suku pertama dalam deret. sin(x) = x −
7
f ′′ (a) f (n) (a) f (a) f ′ (a) 2 n + (x − a) + (x − a) + · · · (x − a) Rn (x) = f (x)− 0! 1! 2! n! (2.36) Deret Taylor atau Maclaurin konvergen jika limn→∞ |Rn (x)| = 0. Menggunakan teorema kalkulus, persamaan sisa sama dengan Rn (x) =
f (n+1) (c) (x − a)n+1 (n + 1)!
(2.37)
,dimana c adalah sebuah titik di antara a dan x. Persamaan sisa ini sering digunakan untuk mengetahui konvergensi dari suatu deret. Sebagai contoh konvergensi dari deret Maclaurin untuk fungsi sin(x) atau cos(x) dapat dibuktikan dengan mengetahui bahwa |f (n+1) (x)| = | sin(x)| atau |f (n+1) (x)| = | cos(x)|, | cos(x)| ≤ 1 atau | sin(x)| ≤ 1 dan limn→∞ xn /n! = 0. Jadi limn→∞ |Rn (x)| = 0 terpenuhi. Selain konvergensi dari sebuah deret, dalam kalkulasi kita harus memperhitungkan berapa banyak suku yang dibutuhkan sehingga kalkulasinya akurat. Teorema berikut ini bisa digunakan untuk menentukan apakah jumlah suku P∞yang kdigunakan sudah cukup. Teorema: Jika S = k=0 ak x adalah sebuah deret pangkat yang konvergen pada |x| < 1 dan jika |ak+1 | < |ak | untuk k > N, maka sisa atau error pemotongan adalah N X (2.38) ak xk < |aN +1 xN +1 /(1 − |x|) error = S − k=0
3
Metode Horner
Metode Horner adalah sebuah metode atau prosedur untuk menghitung sebuah polinom yang efisien atau dengan jumlah operasi yang paling sedikit. Umpama kita mempunyai sebuah polinom yang berbentuk, p(x) = a0 + a1 x + a2 x2 + · · · + an−1 xn−1 + an xn
(3.1)
p(x) = a0 + x(a1 + x(a2 + · · · + x(an−1 + an x) · · · ))
(3.2)
Kita ingin menghitung nilai dari p(x) pada titik x = b atau p(b). Cara langsung yang kita bisa gunakan biasanya yaitu dengan menghitung satu per satu setiap bagian polinom dan kemudian menjumlahan untuk mendapatkan nilai p(b). Cara langsung ini tidaklah efisien dan mungkin juga tidak akurat karena jika nilai x kecil akan menimbulkan kesalahan yang besar. Cara yang lebih akurat dan efisien adalah dengan mengubah terlebih dahulu polinom di atas menjadi,
Jadi proses menghitung nilai p(b) adalah
pn = an pn−1 = pn b + an−1 pn−2 = pn−1 b + an−2 .. . p1 = p2 b + a1 p0 = p1 b + a0
(3.3)
Nilai p(b) = p0 . Contoh kalkulasi sebagai berikut, p(x) = 1.0 + 2.0x + 5.0x2 + 3.0x3
(3.4)
10
Metode Horner Jadi proses menghitung nilai p(0.2) adalah p3 p2 p1 p0
= 3.0 = (3.0)(0.2) + 5.0 = 5.6 = (5.6)(0.2) + 2.0 = 3.12 = (3.12)(0.2) + 1.0 = 1.624
(3.5)
Dengan menggunakan sebuah kalkulator, perhitungan ini sangat mudah dilakukan. Program C pada Listing 3.1 menghitung polinom menggunakan metode Horner bisa dilihat dibawah ini. 1 2
# i n c l u d e
3 4
# d e f i n e N 100
5 6 7 8 9 10
i n t main ( ) { int i , n ; f l o a t a [N] ; / / array a [N] f l o a t x , p ; / / n i l a i x dan n i l a i polinom
11 12 13
p r i n t f ( ”Masukkan order d ari polinom n?\n” ) ; scanf ( ”%d ” , &n ) ;
14 15 16 17 18 19 20 21
p r i n t f ( ”Masukkan %d k o e f i s i e n polinom order %d \n” , n+1 , n ) ; f o r ( i =0; i <=n ; i ++) { scanf ( ”%f ” , &a [ i ] ) ; } p r i n t f ( ”Masukkan n i l a i x ? ” ) ; scanf ( ”%f ” ,&x ) ;
22 23 24 25 26 27 28 29 30 31 32 33 34 35
/ / hitung dengan metode horner p = a[n ] ; f o r ( i =( n−1) ; i >=0; i −−){ p = a [ i ] + x∗p ; } / / output p r i n t f ( ” \n\n=============================\n” ) ; printf ( ” i a [ i ] \n” ) ; f o r ( i =0; i <=n ; i ++) { p r i n t f ( ” %d %f ” , i , a [ i ] ) ; }
11 printf ( ”\ n p r i n t f ( ” p(% f ) = %f \n” , x , p ) ;
36 37 38
return 0 ;
39 40
\n” ) ;
}
Listing 3.1: Program menghitung nilai polinom dengan metode Horner.
4
Sistem Bilangan Bilangan riil dalam penulisannya dapat dipisahkan menjadi dua bagian yaitu bagian bilangan bulat dan bagian bilangan pecahan. Biasanya tanda yang digunakan untuk memisahkan dua bagian bilangan riil ini adalah tanda koma (,) atau tanda titik (.). Penggunaan tanda koma biasa ditemukan di Indonesia, tetapi pada buku ini, untuk mempertahankan konsistensi dalam penulisan dan mengurangi kesalahan pada waktu kalkulasi menggunakan kalkulator maupun dengan bahasa pemrograman seperti C++, kita akan menggunakan tanda titik (.) . Sistem bilangan yang sering kita pergunakan adalah sistem bilangan desimal. Bilangan bulat pada sistem bilangan desimal berbentuk: (dn dn−1 dn−2 · · · d2 d1 d0 )10 = dn × 10n + dn−1 × 10n−1 + · · · + d1 × 101 + d0 (4.1) Sedangkan, bilangan pecahan pada sistem bilangan desimal berbentuk: (0.d−1 d−2 d−3 · · · )10 = d−1 ×
1 1 1 + d−2 × 2 + d−3 × 3 + · · · 1 10 10 10
(4.2)
Mengikuti pola di atas, secara umum bilangan bulat pada sistem bilangan dengan basis β berbentuk, (bn bn−1 bn−2 · · · b2 b1 b0 )β = bn β n + bn−1 β n−1 + · · · + b1 β 1 + b0
(4.3)
dan bilangan pecahannya berbentuk: (0.b−1 b−2 b−3 · · · )β = b−1 ×
1 1 1 + b−2 × 2 + b−3 × 3 + · · · 1 β β β
(4.4)
Jenis-jenis sistem bilangan yang biasa digunakan pada bidang komputasi maupun pada bidang elektronika dapat dilihat pada Tabel 4.1.
14
Sistem Bilangan
Tabel 4.1: Jenis-Jenis Sistem Bilangan Sistem Bilangan β Nilai Biner 2 0,1 Oktal 8 0,1,2,3,4,5,6,7 Desimal 10 0,1,2,3,4,5,6,7,8,9 Heksadesimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fa
Contoh 1111 17 15 F
a
Note: Perlu diingat bahwa nilai desimal dari A, B, C, D, E, dan F adalah 10, 11, 12, 13, 14, dan 15.
Setelah mengetahui bentuk beberapa sistem bilangan, kita kemudian perlu mempelajari cara mengubah bentuk dari sistem bilangan yang satu ke sistem bilangan yang lain. Mengkonversi suatu bilangan ke sistem bilangan yang lain, kita perlu memisahkan bilangan menjadi dua bagian, bulat dan pecahan karena cara konversi bilangan bulat berbeda dengan cara konversi bilangan pecahan. Konversi yang mudah dilakukan, karena kita sudah terbiasa menggunakan sistem bilangan desimal, adalah mengubah dari suatu sistem bilangan berbasis β ke sistem bilangan desimal. Mengubah suatu bilangan bilangan ke bilangan desimal dapat dengan mudah dilakukan menggunakan persamaan (4.3) dan (4.4). Untuk mengkonversi bilangan heksadesimal, kita perlu mengingat bahwa huruf A, B, C, D, E, dan F diganti dengan angka 10, 11, 12, 13, 14, dan 15. Sebagai contoh bilangan (1101.011)2 di ubah ke desimal menjadi (1101)2 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = (13)10
(4.5)
Dengan metode Horner, p3 p2 p1 p0
=1 = 1×2+1 =3 = 3×2+0 =6 = 6 × 2 + 1 = (13)10
(4.6)
Bilangan pecahan pada sistem bilangan desimal berbentuk: 1 1 1 +1× 2 +1× 3 1 2 2 2 = 0 + 0.25 + 0.125 = (0.375)10
(0.011)2 = 0 ×
(4.7)
15 Dengan metode Horner, p3 p2 p1 p0
=1 = 1 × 0.5 + 1 = 1.5 = 1.5 × 0.5 + 0 = 0.75 = 0.75 × 0.5 + 0 = (0.375)10
(4.8)
Hasil akhir yang kita peroleh adalah (1101.011)2 = (13.375)10 . Contoh untuk bilangan heksadesimal adalah sebagai berikut: (D5)16 = 13 × 16 + 5 = (213)10
(4.9)
Mengubah bilangan dari sistem desimal ke basis β dilakukan dengan memisahkan bilangan menjadi dua bagian: bagian bilangan bulat dan bagian bilangan pecahan. Untuk bagian bilangan bulat dilakukan dengan membagi bilangan dengan β dan mengambil nilai sisa bagi. Supaya lebih jelas, umpama kita memiliki sebuah bilangan x yang akan di uabah menjadi (bn bn−1 · · · b1 b0 )β , maka x = (bn bn−1 bn−2 · · · b2 b1 b0 )β = bn β n + bn−1 β n−1 + · · · + b1 β 1 + b0
(4.10)
Jika x dibagi dengan β, kita memperoleh, b0 x = bn β n−1 + bn−1 β n−2 + · · · + b1 + {z } β β |
(4.11)
Bilangan Bulat
Jadi b0 merupakan sisa ketika x dibagi dengan β. Bilangan bulat dari x/β yang dihasilkan kemudian dibagi lagi dengan β dan menghasilkan sisa yaitu b1 . Begitu pula selanjutnya, sehingga semua bilangan bi diperoleh. Sedangkan untuk bagian bilangan pecahan dilakukan dengan mengalikan dengan β dan mengambil bilangan bulatnya. Seperti sebelumnya, umpama kita memiliki bilangan pecahan y yang akan di ubah menjadi bilangan (0.b−1 b−2 · · · )β y = (b−1 b−2 b−3 · · · )β 1 1 1 = b−1 × 1 + b−2 × 2 + b−3 × 3 + · · · β β β
(4.12)
16
Sistem Bilangan
y×β =
1 1 b−1 + b−2 × + b−3 × 2 + · · · |{z} β β {z } | Bil.Bulat
(4.13)
Bilangan pecahan
Jadi b−1 merupakan bilangan bulat ketika y dikali dengan β. Bilangan pecahan y × β yang dihasilkan kemudian dikalikan lagi dengan β dan menghasilkan bilangan bulat yaitu b−2 . Begitu pula selanjutnya, sehingga semua bilangan pecahan b−j diperoleh. Contoh: Konversi bilangan (123.21)10 = (· · · )2 menjadi bilangan biner. Kita mulai dengan mengkonversi bilangan bulatnya dengan proses sebagai berikut. 123 dibagi 2 61 dibagi 2 30 dibagi 2 15 dibagi 2 7 dibagi 2 3 dibagi 2 1 dibagi 2
= 61 = 30 = 15 =7 =3 =1 =0
sisa 1 sisa 1 sisa 0 sisa 1 sisa 1 sisa 1 sisa 1
(4.14)
Dan kemudian kita baca dari bawah menghasilkan bilangan biner yaitu (1111011)2. Untuk bagian bilangan pecahan, kita melakukan proses sebagai berikut, 0.21 dikali 2 = 0.42 bagian 0.42 dikali 2 = 0.84 bagian 0.84 dikali 2 = 1.68 bagian 0.68 dikali 2 = 1.36 bagian 0.36 dikali 2 = 0.72 bagian 0.72 dikali 2 = 1.44 bagian 0.44 dikali 2 = 0.88 bagian 0.88 dikali 2 = 1.67 bagian .. . dan seterusnya
bulat = 0 bulat = 0 bulat = 1 bulat = 1 bulat = 0 bulat = 1 bulat = 0 bulat = 1 (4.15)
17 Dan kita baca dari atas menghasilkan bilangan biner pecahan (0.0011010 · · · )2 . Jadi bilangan (123.21)10 = (1111011.00110101 · · · )2 . Di sini kita menghentikan perhitungan setelah 8 bilangan biner. Pada contoh ini, bilangan pecahan tidak berakhir pada angka pecahan tertentu, oleh karena itu dalam komputasi yang menggunakan bilangan biner seperti pada komputer dan kalkulator akan terjadi pemotongan sehingga terjadi kesalahan. Jadi perlu diingat bahwa dalam setiap komputasi numerik, kita memiliki jumlah angka yang terbatas disimpan oleh komputer dan kita perlu mempertimbangkan kesalahan pembulatan untuk menghindari kesalahan numerik yang dapat berakumulasi menjadi besar.
5
Floating Point - Titik Mengambang [not complete]
5.1 Bentuk Floating Point Suatu bilangan x berbasis β dapat di bentuk seperti berikut ini x = ± .b1 b2 b3 · · · ×β E | {z } mantisa E
= ±r × β
(5.1) (5.2)
di mana E adalah eksponen, r adalah bilangan mantisa yang bernilai β1 ≤ r < 1 dan b1 harus tidak sama dengan nol. Bilangan yang terbesar dengan notasi ini adalah 0.ccccc · · · × β Emax dan terkecil adalah 0.10000 · · · × β −Emax . Sebagai contoh untuk bilangan biner, x = ±q × 2E
(5.3)
dengan 21 ≤ q < 1. Istilah yang akan sering ditemukan dalam komputasi yaitu overflow dan underflow. Overflow adalah situasi di mana bilangan yang akan ditampung oleh komputer di atas bilangan yang terbesar yang bisa disediakan oleh komputer. Underflow terjadi jika angka di bawah angka terkecil komputer. Komputasi dengan komputer biasanya menggunakan 32 bits. Pembagian angka biner pada 32 bit ini ditunjukkan pada Gambar 5.1. Contoh: bagaimana komputer menyimpan angka 2? Pertama kita ubah terlebih dahulu angka 2 menjadi bilangan biner (10.0)2 dan
20
Floating Point - Titik Mengambang
Gambar 5.1: Pembagian 32 bit komputer untuk menampung bilangan floating point kemudian ke bentuk floating point yaiut (+.1 × 2+2 ) dengan nilai eksponen dalam bilangan biner adalah (10)2 , tanda + berarti bernilai 0, maka bilangan yang tersimpan dalam komputer yaitu 0 − 0 − 000010 − 100 · · 0000}. Di sini tanda − digunakan hanyalah untuk memisahkan | · {z sebanyak 24
antara tanda, ekponen dan mantisa. Bilangan yang terbesar yang dapat disimpan 32 bit komputer yaitu 0 − 0 − 111111 − |11111 {z · · · 1111} atau 0.9999 × 2+63 1018 . dan yang terkecil 1 sebanyak 24
adalah 0−1−111111−1 0000 ·{z · · 0000} atau 0.5×2−63 10−19 . 24 bit bilangan | 0 sebanyak 23
biner setara dengan 7 digit bilangan desimal. Bagaimana untuk angka double precision atau 64 bit. [akan ditambahkan lagi]
6
Interpolasi Dalam suatu pengukuran pada suatu pengamatan atau eksperimen, kita biasanya memperoleh dua kolom data untuk sebuah variabel bebas (anggap saja x) pada interval [a, b] dan sebuah variabel tak bebas (f (x)). Data yang diperoleh tentunya bukan data kontinyu, melainkan data diskrit atau data pada titik-titik tertentu saja tergantung pada metode dan alat yang digunakan. Tetapi, kita ingin mendapatkan nilai f (x) yang tidak berada pada titik-titik data pengukuran. Nilai f (x) pada titik yang tidak sama dengan pengukuran dapat dihitung dengan menggunakan metode interpolasi. Dengan kata lain metode interpolasi adalah metode untuk mendapatkan nilai yang tidak diketahui dari data. Proses menghitung nilai f (x) untuk nilai x yang berada di dalam interval data, [a, b], disebut dengan proses interpolasi dan jika nilai x berada di luar interval (daerah) data, disebut ekstrapolasi. Untuk melakukan interpolasi dan ekstrapolasi, kita perlu mengetahui hubungan antara variabel tak bebas (f ) dengan variabel bebas x. Ada banyak fungsi yang dapat digunakan untuk memperoleh hubungan ini. Setiap fungsi memiliki parameter-parameter atau koefisienkoefisien yang harus ditentukan sehingga fungsi tersebut mendekati atau juga melalui titik-titik data. Jumlah parameter atau koefisien fungsi tidak mungkin lebih dari jumlah titik-titik data. Metode numerik yang menggunakan jumlah parameter atau koefisien lebih sedikit dari jumlah titik-titik data disebut dengan nama metode regresi. Pada bab ini kita akan mempelajari metode interpolasi menggunakan polinom dengan orde yang sesuai dengan jumlah titik-titik data. Jika kita menggunakan n titik data, maka kita menginterpolasi dengan polinom orde ke n − 1. [Cara matriks] jelaskan mengapa tidak efisien. [lihat catatan kuliah, maaf belum sempat diketik] Kita akan membahas dua cara untuk memperoleh polinom interpo-
22
Interpolasi
lasi yang lebih efisien dan mudah daripada metode matriks yaitu: (a) metode Lagrange dan (b) metode Newton. Dua metode ini kelihatannya menghasilkan bentuk polinom yang berbeda, tetapi jika diuraikan akan menghasilkan polinom yang sama. Ini dikarenakan hanya satu polinom yang bisa dihasilkan yang melewati semua titik-titik data.
6.1 Metode Lagrange Umpamanya ada N + 1 titik data yaitu (x0 , y0 ), (x1 , y1 ), (x2 , y2),· · · , (xN , yN ). Kita ingin memperoleh polinom order ke N, pN (x) yang melalui semua titik data. Polinom interpolasi menggunakan metode Lagrange berbentuk, N X pN (x) = yk LN,k (x) (6.1) k=0
Polinom koefisien Lagrange LN,k (x) merupakan polinom yang dibentuk dengan perkalian seperti berikut ini. LN,k (x) =
N Y
(x − xk ) (xk − xj ) j=0,j6=k
(6.2)
atau jika kita jabarkan menjadi LN,k (x) =
(x − x0 ) · · · (x − xk−1 )(x − xk+1 ) · · · (x − xN ) (xk − x0 ) · · · (xk − xk−1 )(xk − xk+1 ) · · · (xk − xN )
(6.3)
Perlu kita perhatikan dan ingat bahwa faktor (x − xk ) dan (xk − xk ) tidak ada pada polinom Lagrange LN,k (x). Sebagai contoh untuk data berjumlah 3, polinom orde 2 yang dihasilkan adalah p2 (x) = y0 L2,0 (x) + y1 L2,1 (x) + y2 L2,2 (x) (x − x1 )(x − x2 ) (x0 − x1 )(x0 − x2 ) (x − x0 )(x − x2 ) L2,1 (x) = (x1 − x0 )(x1 − x2 ) (x − x0 )(x − x1 ) L2,2 (x) = (x2 − x0 )(x2 − x1 ) L2,0 (x) =
(6.4)
(6.5) (6.6) (6.7) (6.8)
Metode Lagrange
23
[Contoh penggunaan][lihat di catatan kuliah] Contoh program bahasa c ditunjukkan pada Listing 6.1. 1 2 3 4
/ ∗ lagrange . c Program i n t e r p o l a s i dengan metode Lagrangge I Wayan Sudiarta updated : 20 Pebruari 2012
5 6 7 8
9
Catatan : Diberikan data sebanyang n , x [ i ] dan y [ i ] D i i n t e r p o l a s i dengan metode Lagrange p n ( x ) = sum i y [ i ] L [ i ] ( x) program i n i menghitung n i l a i p n ( a ) , untuk a yang d ibe rikan .
10 11 12
13 14 15
Re f e re nsi : J .H. Mathews , ( 1992) , Numerical methods f o r mathematics , s c i e n c e , and engineering , 2nd , Pre ntice−Hall , New Jersey . ∗/ # i n c l u d e
16 17
# d e f i n e NMAX 200
18 19 20 21 22 23 24
i n t main ( ) { int k , j , n ; f l o a t x [NMAX] , y [NMAX] ; f l o a t a , pa ; float t ;
25 26 27
p r i n t f ( ” Masukkan n i l a i n\n” ) ; scanf ( ”%d ” ,&n ) ;
28 29 30 31 32 33 34 35 36
/ / input data x [ i ] dan f [ i ] f o r ( k=0; k<=n ; k++) { scanf ( ”%f ” ,&x [ k ] ) ; scanf ( ”%f ” ,&y [ k ] ) ; } p r i n t f ( ” Masukkan n i l a i x yang diinginkan \n” ) ; scanf ( ”%f ” ,&a ) ;
37 38 39 40 41 42 43 44
/ / Hitung p n ( a ) pa = 0 ; f o r ( k=0; k<= n ; k++) { t = y[k ] ; / / Hitung L k ( a ) f o r ( j =0; j <= n ; j ++) { i f ( k!= j ) {
24
Interpolasi
45
}
46
} pa += t ;
47 48
}
49 50
/ / Output p r i n t f ( ” data input \n” ) ; p r i n t f ( ” n = %d \n” , n ) ; p r i n t f ( ” ====================\n” ) ; f o r ( k=0; k<=n ; k++) { printf ( ” %f %f \n” , x [ k ] , y [ k ] ) ; } p r i n t f ( ” a = %f \n” , a ) ; p r i n t f ( ” n i l a i p n ( a ) adalah %f \n” , pa ) ;
51 52 53 54 55 56 57 58 59 60
return 0 ;
61 62
t ∗= ( a−x [ j ] ) / ( x [ k]−x [ j ] ) ;
}
Listing 6.1: Program interpolasi dengan polinom metode Lagrange
6.2 Metode Newton Metode interpolasi Lagrange membutuhkan banyak operasi aritmatika untuk menghitungnya. Jika kita ingin menambah titik data tidak mudah dilakukan. Bagaimana cara yang lebih efisien? dengan menggunakan metode beda dibagi Newton. Mungkin istilah beda dibagi agak susah dimengerti awalnya. Nanti kita jelaskan mengapa dinamakan demikian. Sebelum kita mempelajari bagaimana mendapatkan polinom interpolasi, mari kita definisikan notasi baru yaitu f [x0 ] = y0
(6.9)
Perhatikan kita menggunakan tanda kurung persegi [] untuk membedakan dengan tanda kurung (). Untuk memulai, kita mendefinisikan terlebih dahulu suatu nilai yang merupakan beda dua nilai f [] dibagi dengan beda dua posisi x yaitu f [x0 , x1 ] = f [x0 , x1 , x2 ] =
f [x1 ] − f [x0 ] x1 − x0
f [x1 , x2 ] − f [x0 , x1 ] x2 − x0
(6.10) (6.11)
Metode Newton
25
f [x1 , x2 , x3 ] − f [x0 , x1 , x2 ] x3 − x0
(6.12)
f [x1 , x2 , · · · , xk ] − f [x0 , x1 , · · · , xk−1 ] xk − x0
(6.13)
f [x0 , x1 , x2 , x3 ] =
f [x0 , x1 , · · · , xk−1 , xk ] =
dan seterusnya. Untuk mempermudah perhitungan, kita biasanya dihitung menggunakan tabel seperti berikut ini.
xk x0 x1 x2 x3 x4
Tabel 6.1: Tabel kalkulasi menggunakan metode Newton f [xk ] f [xk , xk+1 ] f [xk , xk+1, xk+2 ] f [x0 ] = y0 [x0 ] f [x0 , x1 ] = f [xx11]−f −x0 [x0 ,x1 ] f [x1 ] = y1 f [x0 , x1 , x2 ] = f [x1 ,xx22]−f −x0 [x1 ] f [x1 , x2 ] = f [xx22]−f −x1 [x1 ,x2 ] f [x2 ] = y2 f [x1 , x2 , x3 ] = f [x2 ,xx33]−f −x1 [x2 ] f [x2 , x3 ] = f [xx33]−f −x2 [x2 ,x3 ] f [x3 ] = y3 f [x2 , x3 , x4 ] = f [x3 ,xx44]−f −x2 [x0 ] f [x0 , x1 ] = f [xx11]−f −x0 f [x4 ] = y4
Setelah mendapatkan nilai-nilai beda dibagi f [, , , ], kita memperoleh interpolasi polinom Newton dengan rumus pN (x) = f [x0 ] + (x − x0 )f [x0 , x1 ] + (x − x0 )(x − x1 )f [x0 , x1 , x2 ] + · · · + f [x0 , x1 , · · · , xN ]
N −1 Y k=0
(x − xk )
(6.14)
Sebagai contoh untuk polinom interpolasi orde ke 3, pN (x) = f [x0 ] + (x − x0 )f [x0 , x1 ] + (x − x0 )(x − x1 )f [x0 , x1 , x2 ] + (x − x0 )(x − x1 )(x − x2 )f [x0 , x1 , x2 , x3 ] (6.15) Nilai polinom Newton pN (x) dapat dihitung dengan menggunakan teknik seperti Metode Horner, sebagai contoh untuk polinom orde ke 3 yaitu
26
Interpolasi
pN (x) = [f[3] (x − x2 ) + f[2] ](x − x1 ) + f[1] ](x − x0 ) + f [x0 ]
(6.16)
Untuk mempersingkat notasi, kita menggunakan f[1] = f [x0 , x1 ], f[2] = f [x0 , x1 , x2 ] dan f[3] = f [x0 , x1 , x2 , x3 ]. Dihitung dengan cara s3 s2 s1 s0
= f[3] = s3 (x − x2 ) + f[2] = s2 (x − x1 ) + f[1] = s1 (x − x0 ) + f [x0 ]
(6.17)
[contoh tabel][lihat di catatan kuliah] 1 2 3 4
/ ∗ newton interp . c Program i n t e r p o l a s i dengan metode Newton I Wayan Sudiarta updated : 20 Pebruari 2012
5 6 7 8 9
Catatan : Diberikan data sebanyang n , x [ i ] dan y [ i ] D i i n t e r p o l a s i dengan metode Newton p n ( x ) program i n i menghitung n i l a i p n ( a ) , untuk a yang d ibe rikan .
10 11 12
13 14 15
Re f e re nsi : J .H. Mathews , ( 1992) , Numerical methods f o r mathematics , s c i e n c e , and engineering , 2nd , Pre ntice−Hall , New Jersey . ∗/ # i n c l u d e
16 17
# d e f i n e NMAX 200
18 19 20 21 22 23 24 25
i n t main ( ) { int k , j , n; f l o a t x [NMAX] , y [NMAX] ; f l o a t dd [NMAX] [NMAX] ; f l o a t a , pa ; float t ;
26 27 28
p r i n t f ( ” Masukkan n i l a i n\n” ) ; scanf ( ”%d ” ,&n ) ;
29 30
/ / input data x [ k ] dan f [ k ]
Error
27
f o r ( k=0; k<=n ; k++) { scanf ( ”%f ” ,&x [ k ] ) ; scanf ( ”%f ” ,&y [ k ] ) ; }
31 32 33 34 35
p r i n t f ( ” Masukkan n i l a i x yang diinginkan \n” ) ; scanf ( ”%f ” ,&a ) ;
36 37 38
/ / hitung dd [ k ] [ 0 ] f o r ( k=0; k<= n ; k++) { dd [ k ] [ 0 ] = y [ k ] ; } / / hitung dd [ k ] [ j ] f o r ( j =1; j <= n ; j ++) { f o r ( k= j ; k<= n ; k++) { dd [ k ] [ j ] = ( dd [ k ] [ j −1] − dd [ k−1][ j −1]) / ( x [ k]−x [ k−j ] ) ; } }
39 40 41 42 43 44 45 46 47 48 49
/ / Hitung p n ( a ) pa = dd [ n ] [ n ] ; f o r ( k=(n−1) ; k >= 0 ; k−−){ pa = pa ∗ ( a−x [ k ] ) + dd [ k ] [ k ] ; }
50 51 52 53 54 55
/ / Output p r i n t f ( ” data input \n” ) ; p r i n t f ( ” n = %d \n” , n ) ; p r i n t f ( ” ====================\n” ) ; f o r ( k=0; k<=n ; k++) { printf ( ” %f %f \n” , x [ k ] , y [ k ] ) ; } p r i n t f ( ” a = %f \n” , a ) ; p r i n t f ( ” n i l a i p n ( a ) adalah %f \n” , pa ) ;
56 57 58 59 60 61 62 63 64 65
return 0 ;
66 67
}
Listing 6.2: Program interpolasi dengan polinom metode beda dibagi Newton
6.3 Error Besarnya nilai kesalahan yang ditimbulkan dari penggunaan polinomial order ke N, pN (x) untuk pendekatan fungsi f (x) diberikan oleh
28
Interpolasi
N f (N +1) (c) Y E(x) = (x − xk ) (N + 1)! k=0
(6.18)
6.4 Fenomena Runge jika order N polinomial di besarkan, tentu kita berharap bahwa polinom akan mendekati fungsi sebenarnya. tetapi tidak demikian. Non convergence ini disebut dengan fenomena Runge. Ini disebabkan oleh penggunaan spasi yang sama. coba dengan menggunakan pendekatan 3 5 dan seterusnya
Gambar 6.1: Pendekatan polinomial yang menghasilkan fenomena Runge
7
Persamaan Nonlinier 7.1 Metode Fixed Point Iterasi Ubah persamaan nonlinier menjadi bentuk x = g(x)
(7.1)
contoh Kita memulai dengan sebuah nilai awal, x0 , kemudian menggunakan iterasi,
xn+1 = g(xn )
(7.2)
7.2 Metode Bisection Metode setengah interval f (x) = 0 Kita mengambil dua titik a0 dan b0 dan sehingga f (a0 )f (b0 ) < 0, f (a0 ) < 0 dan f (b0 ) > 0 atau kebalikannya f (a0 ) > 0 dan f (b0 ) < 0. Ini berarti kurva f (x) memotong sumbu x pada interval (a0 , b0 ). Karena kita tahu solusi berada pada interval (a, b), posisi tengahnya berarti lebih dekat dengan solusinya, langkah berikutnya xn =
an + bn 2
(7.3)
Setelah itu, kita menentukan interval di mana solusi berada. cek f (an )f (xn ) < 0 jika benar kita mengganti an+1 = an dan bn+1 = xn jika tidak berarti f (xn )f (bn ) < 0 an+1 = xn dan bn+1 = bn Contoh
30
Persamaan Nonlinier
7.3 Metode Newton Jika diketahui turunannya f ′ (x)
xn+1 = xn −
f (x) f ′ (x)
(7.4)
7.4 Metode Secant Menggunakan aproksimasi turunan. kita mulai dengan dua titik awal yaitu x0 dan x1 . Aproksimasi turunannya adalah
f ′ (xn ) =
f (xn ) − f (xn−1 ) xn − xn−1
xn+1 = xn −
f (x)(xn − xn−1 ) f (xn ) − f (xn−1 )
7.5 Metode Regula-Falsi Menggabungkan metode secant dan bisection.
(7.5)
(7.6)
8
Matlab atau Octave Pada bab ini kita akan belajar secara singkat tentang MATLAB dan Octave. Tentunya tidak semua hal yang diperlukan untuk pengolahan data dibahas semua di Bab ini, melainkan akan dijelaskan pada bab selanjut sesuai dengan materi pada Babnya. MATLAB atau singkatan dari MATrix LABoratory, pada awalnya merupakan program yang berguna untuk memanipulasi matriks. MATLAB menggunakan bentuk matriks sebagai basis data yang utama dalam komputasinya. Dengan kata lain, setiap perhitungan, MATLAB memproses skalar, vektor dan Matriks. Karena data numerik berupa vektor atau matriks, maka MATLAB sangatlah sesuai digunakan untuk analisis data. Di samping itu pula, MATLAB telah mengalami banyak perkembangan dan sekarang tidak hanya menyediakan banyak kemudahan untuk memanipulasi dan menampilkan data berupa grafik atau citra dan animasi, tetapi juga mempunyai fasilitas simbolic programming, pengambilan data, simulink dan kompilasi program. MATLAB dengan bahasa pemrograman yang mudah, telah banyak digunakan di berbagai bidang. Tetapi, MATLAB merupakan program komersial dan bukan open source (sumber terbuka) yang tidak bisa tersedia gratis bagi pengguna. Oleh karena itu sebuah program yang menyerupai MATLAB telah dibentuk dengan nama Octave. Bahasa pemrograman yang digunakan Octave hampir sama atau kompatibel dengan MATLAB. Ini berarti dengan mempelajari Octave, kita juga belajar MATLAB. Satu kelemahan Octave adalah Octave hanya untuk komputasi numerik saja dan tidak menyediakan fasilitas user interface untuk memanipulasi grafik. Selain itu fungsi-fungsi yang tersedia di Octave tidak selengkap yang ada di Matlab. Walaupun demikian, ini tidak membatasi kegunaannya, karena pengolahan data dapat dilakukan tanpa menggunakan fasilitas user interface dan fungsi-fungsi akan terus ditambah sehingga Octave mampu menjalankan MATLAB script.
32
Matlab atau Octave
Dengan alasan biaya, program Octave akan digunakan sepenuhnya dalam buku ini karena program Octave tersedia gratis dan dapat diunduh langsung di internet. Untuk kemudahan pembaca agar bisa langsung mencoba program Octave, bersamaan dengan buku ini dilengkapi dengan CDROM yang mengandung Octave versi 3.2.3. Octave dengan versi terbaru dapat diunduh di www.octave.org and octave.sourceforge.net. Di samping gratis, penggunaan Octave berguna untuk mengurangi pemakaian software MATLAB bajakan yang ilegal. Setelah program Octave terinstal di Windows atau Linux, untuk menjalankan Octave dengan mengklik ikon Octave. Pada linux, menjalankan Octave dapat juga dilakukan pada command line dengam mengetik octave. Tampilan awal yang dimunculkan di layar adalah seperti yang ditunjukkan pada Gambar AA. Octave hanya menyediakan jendela command line untuk memasukkan perintah-perintah Octave. Jadi di sini kita akan selalu bekerja pada command prompt yang dimulai dengan tanda > . Pada MATLAB, command prompt diawali dengan tanda >> atau EDU>. Tanda ini menunjukkan bahwa Octave atau MATLAB telah siap menunggu pengguna untuk memasukkan perintah. Untuk mengakhiri program Octave atau Matlab dengan mengetik perintah quit atau exit. Ini bisa juga dilakukan dengan mengklik tombol silang atau exit disebelah kiri atas atau kanan atas pada jendela program. Untuk membantu kita dalam penggunaan perintah atau fungsi, MATLAB atau Octave menyediakan perintah help. Cara penggunaan help seperti help sin , di sini kita menambahkan nama perintah atau fungsi yang akan kita lihat penjelasan tentang perintah tersebut. Selain itu MATLAB dan Octave menyediakan perintah doc yang akan menampilkan dokumentasi atau buku tentang MATLAB atau Octave. Perintah penting lain adalah edit yang akan memanggil sebuah editor teks. Perintah ini berguna untuk membuat dan mengedit script file dan data file. Penggunaan perintah ini dengan menambahkan nama file setelah perintah edit seperti edit data.txt atau edit fungsi.m. Jika tidak diberikan nama file, perintah edit akan menampilkan editornya saja yang dapat digunakan untuk membuat file teks baru. Sebelum kita mempelajari fungsi-fungsi dan bahasa pemrograman untuk MATLAB atau Octave, kita akan mempelajari terlebih dahulu notasi dan konvensi atau aturan-aturan yang digunakan oleh MATLAB. Ini berguna untuk mengurangi kesalahan dalam pembuatan script MATLAB.
Notasi dan konvensi
33
Gambar 8.1: Jendela perintah atau command window untuk memasukkan perintah-perintah Octave. Jendela perintah yang hampir sama juga digunakan oleh MATLAB
8.1 Notasi dan konvensi Konvensi yang pertama adalah menggunakan tombol enter untuk eksekusi atau menjalankan perintah yang telah diketik pada command line. Tanda-tanda penting yang digunakan oleh MATLAB adalah 1. Tanda persen ( % ) atau tanda komentar. Tanda \% menyatakan satu baris disamping kiri tanda ini dianggap sebuah komentar, yang berarti baris tersebut tidak dijalankan oleh MATLAB. 2. Tanda koma ( , ) digunakan untuk memisahkan dua pernyataan atau perintah. 3. Tanda titik koma ( ; ) digunakan untuk mengakhiri perintah dengan tidak mengeluar hasil atau output. 4. Tanda titik tiga kali ( ... ) digunakan untuk melanjukan perintah ke baris berikutnya. 5. Tanda kutip satu ( ’ ’ ) dipakai untuk membentuk jenis data string atau kata dan kalimat. Untuk lebih jelas kita perhatikan dan coba program MATLAB berikut ini.
34 > > > > > >
Matlab atau Octave gaya = 10, massa = 5; %dalam satuan MKS %hitung percepatan percepatan = gaya/massa %data dalam baris menggunakan ... data = [10, 40, 500, 21, 55, 78, ... 33, 56, 109];
8.2 Operasi Bilangan Seperti penjelasan sebelumnya bahwa Octave atau MATLAB mampu memproses data numerik, maka langkah pertama dalam penggunaan Octave dan MATLAB adalah menggunakannya sebagai kalkulator yang lengkap dengan fungsi-fungsi matematis. Operasi-operasi matematis untuk penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/) dan pangkat (ˆ) dapat dengan mudah dilakukan seperti contoh berikut ini. Dalam setiap perhitungan kita perlu mengingat bahwa perhitungan dalam Octave atau MATLAB menggunakan presisi angka bertipe double. > > > > > > > >
23 + 15 23 - 15 23 * 15 23/15 23ˆ(1/5) sin(1.59) exp(-1) cosh(2)
8.3 Variabel dan Konstanta Seperti halnya bahasa pemrograman lain, dalam penyelesaian permasalahan menggunakan Octave dan MATLAB kita perlu menggunakan variabel dalam memanipulasi data. Variabel-variabel dalam MATLAB harus dimulai dengan huruf dan tidak boleh diawali dengan angka atau tanda-tanda lain. Huruf-huruf berikutnya dapat berupa huruf atau angka. Variabel berhuruf besar dibedakan dengan variabel berhuruf kecil. Disamping variabel, MATLAB dan Octave telah mempunyai variabelvariabel yang berisi atau bernilai konstan atau konstanta. Bebera-
Fungsi-Fungsi Matematis
35
pa konstanta-konstanta yang penting dalam komputasi numerik di bidang fisika yaitu 1. pi adalah konstanta bilangan π = 3.1415926.... 2. eps adalah bilangan yang menentukan presisi perhitungan, 2−25 . 3. inf adalah bilangan tak hingga atau infiniti, ∞. √ 4. i dan j adalah bilangan imajiner i = −1. 5. nan adalah singkatan dari not a number yang berarti bukan sebuah bilangan/angka. 6. nargin adalah jumlah argumen input fungsi. 7. nargout adalah jumlah argumen output fungsi. 8. realmin dan realmax adalah bilangan riil terkecil dan terbesar yang dipakai pada komputasi yang sesuai dengan akurasi pada tipedata yang digunakan. Sebagai contoh berikut ini > > > > > > >
tan(pi/3) 200*eps 1 + 2*i 0.0/0.0 %akan menghasilkan NaN 1.0/0.0 %akan menghasilkan inf realmin realmax
Nama-nama fungsi yang disediakan oleh MATLAB dan Octave tidak direserved. Jadi kita bisa menggantinya dengan definisi fungsi yang lain. Sebagai contoh i = 2, untuk mengembalikan ke definisi semula, kita menggunakan clear i .
8.4 Fungsi-Fungsi Matematis Untuk melengkapi manipulasi data, Octave dan MATLAB telah menyediakan fungsi-fungsi matematika yang umum seperti abs(x), acos(x),angle(x), ceil(x), exp(x), fix(x), floor(x), gcd(x),imag(x), real(x), round(x) sign(x), sqrt(x), sin(x) dan sinh(x). Penjelasan sedikit disini tentang fungsi-fungsi yang penting dan fungsi lain dilihat di lampiran.
36
Matlab atau Octave
8.5 Vektor dan Matriks Sebagai dasar perhitungan, MATLAB dan octave memberikan fasilitas untuk manipulasi vektor dan matriks. Sebelum mengoperasikan matriks, kita terlebih dahulu mempelajari bagaimana mendefinisikan atau memasukkan data yang berupa vektor dan matriks. Untuk membentuk vektor dan matriks MATLAB dan Octave menggunakan tanda [ ] untuk awal dan akhir vektor atau matriks. Setiap elemen dalam satu baris dipisahkan dengan menggunakan tanda koma ( , ) atau spasi. Sedangkan untuk memisahkan antara baris yang berbeda MATLAB dan Octave menggunakan tanda titik koma ( ; ). Contoh membuat vektor dan matriks diberikan berikut ini. > > > > > > >
% a b % c % d
membuat sebuah vektor (1x3) = [1 2 5] = [2,3,5] membuat sebuah vektor (3x1) = [1;2;5] membuat matriks (3x3) = [1,4,5; 3,2,7; 1,0,3]
Untuk mengakses elemen matriks dan vektor dengan menggunakan nama variabel dan diikuti tanda () yang menyatakan elemen. Sebagai konvensi yang menyatakan semua elemen dalam baris atau kolom, MATLAB dan Octave menggunakan tanda titik dua ( : ). Untuk lebih jelasnya, kita perhatikan contoh berikut ini. > % > % % > % >
a = [2 3 4 5; 1 2 2 7; 4,4,2,1]; memilih elemen (1,1) a(1,1) memilih satu baris, baris pertama, 1 tanda : menyatakan semua a(1,:) memilih satu kolom, kolom kedua, 2 a(:,2)
Jadi tanda yang penting diingat adalah tanda : yang menyatakan semua atau deretan dalam banyak operasi matriks. Sebagai contoh di atas a(:,1) adalah semua baris pada kolom pertama. Untuk menyatakan deretan atau bagian dari matriks, MATLAB menggunakan notasi i:j:k di mana indeks i adalah indeks awal, j adalah penambahan dan k adalah indeks akhir. Sebagai contoh deretan 1:2:10
Vektor dan Matriks
37
menyatakan deretan 1, 3, 5, 7, 9 , jadi jika kita menggunakan v(1:2:10) menyatakan kita memilih deretan elemen a(1), a(3), a(5), a(7) dan a(9). Deretan dengan nilai penambahan 1 dapat ditulis tanpa penambahan, jadi 1:1:10 dapat ditulis dengan 1:10. Supaya kita lebih mengerti, mari kita kerjakan perintah berikut ini. > v = [10 20 30 40 50 60 70 80 90 100] > a = v(1:3:10) > b = v(2:2:10) Perintah v(1:3:10) menghasilkan vektor dengan elemen [10 40 70 100] dan perintah v(2:2:20) menghasilkan vektor [20 40 60 80 100]. Matriks atau array dapat dibuat dengan menggabungkan beberapa vektor atau matriks. > a = [ 1 3 6 ]; > b = [ 4 6 9 10]; > c = [a,b,a];
8.5.1 Fungsi-fungsi untuk Matriks Untuk berbagai analisis data, di samping menyediakan fungsi-fungsi matematis yang sudah disebutkan sebelumnya, MATLAB dan Octave juga menyediakan fungsi-fungsi khusus untuk operasi matriks. Fungsifungsi untuk membentuk dan memanipulasi matriks yang sering digunakan adalah 1. ones(m,n) digunakan untuk membentuk matriks dengan ukuran m × n dengan semua elemen bernilai satu (1). Untuk matriks kuadrat kita dapat menulis fungsi dengan satu input ones(n). 2. zeros(m,n) seperti dengan fungsi ones(m), fungsi ini membentuk matriks m×n tetapi dengan semua elemen bernilai zeros atau nol. 3. eye(n) digunakan untuk membuat matriks satu atau identitas (I), atau matriks kuadrat n × n dengan nilai elemen semua nol terkecuali elemen diagonal bernilai satu. 4. inv(M) adalah fungsi untuk mendapatkan invers matriks M. Perlu diingat bahwa matriks M adalah matriks kuadrat. 5. eig(M) adalah fungsi untuk mendapatkan nilai dan vektor eigen dari matriks M.
38
Matlab atau Octave 6. det(M) digunakan untuk menghitung determinan matriks kuadrat M. 7. rand(n,m) digunakan untuk membuat matriks m × n dengan elemen bernilai acak atau random dengan distribusi uniform dan dari angka (0, 1). 8. randn(n,m) digunakan untuk membuat matriks m × n dengan elemen bernilai acak atau random dengan distribusi normal dengan rata nol dan variance satu. 9. chol(M) digunakan untuk mendapatkan Choleksky faktorisasi matriks.
8.5.2 Operasi Matriks Semua operasi-operasi matriks dapat dilakukan di MATLAB dan Octave. Untuk mempermudah penjelasan, kita mengumpamakan mempunyai matriks A dan B. Operasi matriks yang dapat dilakukan adalah 1. Operasi transpose dengan menggunakan tanda kutip satu ( A = B; membuat matriks A adalah transpos dari matriks B.
).
2. Operasi elemen per elemen. Ini dapat dilakukan dengan memberi tanda titik ( . ) dan operasi yang diingikan. Sebagai contoh C = A.*B menghasilkan matriks C dengan elemen bernilai hasil kali antara elemen A di kali elemen B. D = A.ˆ3 menghasilkan matriks dengan elemen bernilai elemen A dipangkat 3 atau setiap elemen A dipangkatkan 3. Fungsi-fungsi matematis jika dioperasikan pada sebuah matriks akan menghasilkan matriks dengan nilai fungsi(elemen). Umapamanya F = sin(A) menghasilkan matriks dengan elemen sin(elemen A), jadi setiap elemen A dioperasikan fungsi sin(). 3. perkalian matriks menggunakan tanda bintang ( * ), seperti C = A*B. Tentunya kita harus memperhatikan ukuran matriks A dan B supaya perkalian matriks dapat dilakukan. Jika tidak sesuai maka kita akan mendapatkan error. 4. operator garis miring ( \ ) berguna untuk mencari solusi persamaan linear y = A ∗ x di mana x dan y adalah vektor. Jadi dalam MATLAB solusi untuk vektor x diperoleh dengan x = A\y.
Input dan Output
39
8.6 Input dan Output Perintah input untuk mendapatkan masukkan dari keyboard, contoh r = input(Nilai jari-jari =) Perintah disp untuk menampikan di layar disp(hasil perhitungan =); disp(2*pi*r)
8.7 Pemrograman Dalam pengolahan data kita akan sering melakukan perhitungan berulangulang atau perhitungan dengan berbagai persyaratan. Untuk hal ini MATLAB dan Octave memberikan fasilitas pengulangan menggunakan fungsi for dan percabangan atau persyaratan dengan fungsi if .
8.7.1 Pengulangan for Untuk pengulangan sederhana, kita membutuhkan tiga input yaitu nilai awal, penambahan, dan nilai batas akhir. Kita perhatikan contoh berikut ini. > s = 0; > for n = 1:2:10 > s = s + nˆ2; > end Di sini kita melakukan pengulangan untuk n = 1, 3, 5, 7, 9.
8.7.2
Persyaratan atau Percabangan if
> if(n==1) >a = 2; > elseif(n==2) >a = 3; > else > error(ada kesalahan); > end
8.8 Visualisasi Sebagai tujuan akhir setiap pengolahan data, kita perlu menampilkan data dalam bentuk gambar atau grafik. MATLAB dan Octave telah
40
Matlab atau Octave
menyediakan banyak fungsi untuk pembuatan grafik. Di sini akan dibahas sebagian dari fungsi-fungsi yang ada. Daftar fungsi-fungsi yang lain dapat dilihat di Lampiran.
8.8.1 Grafik Dua Dimensi Membuat grafik dua dimensi sebuah tabel atau fungsi dengan satu peubah, kita menggunakan fungsi plot. Supaya lebih mudah kita mengerti bagaimana membuat grafik, kita perhatikan perintah-perintah berikut ini. > x = 0:0.1:6*pi; > y = cos(x); > plot(x,y); Untuk membuat grafik satu peubah, kita memerlukan dua vektor yaitu vektor untuk variabel peubah di sini di beri nama x dan variabel dependen yaitu y. Dua perintah pertama di atas digunakan untuk membuat dua vektor x dan y. Kemudian dari kedua data ini dibentuk grafik dengan perintah plot(x,y). Untuk menambahkan keterangan sumbu x dan y dan judul grafik, kita menggunakan perintah berikut ini. > xlabel(’x, sudut dalam radian’); > ylabel(’cos(x)’); > title(’Fungsi Cos(x)’); Hasil perintah-perintah di atas dapat dilihat pada Gambar 8.2. Kita juga dapat mengubah jenis grafik dengan menambahkan opsi "or" seperti contoh ini. plot(x,y,’or’) Di sini tanda o menunjukkan bahwa plotnya menggunakan tanda o dan tambahan huruf r menunjukkan warna merah (r-red). Untuk menampilkan grafik dengan data yang lebih banyak, kita menggunakan perintah seperti ini > > > > > > >
x = 0:0.1:6*pi; y1 = sin(x); y2 = cos(x); plot(x,y1,’or’, x,y2); xlabel(’x, sudut dalam radian’); ylabel(’cos(x) atau sin(x)’); title(’Fungsi Sin(x) dan Cos(x)’);
Visualisasi
41
Fungsi Cos(x) 1
cos(x)
0.5
0
-0.5
-1 0
5
10
15
20
x, sudut dalam radian
Gambar 8.2: Grafik cos(x) dan hasil grafik ditunjukkan pada Gambar 8.3
Fungsi Sin(x) dan Cos(x) 1
cos(x) atau sin(x)
0.5
0
-0.5
-1 0
5
10
15
20
x, sudut dalam radian
Gambar 8.3: Grafik menampilkan dua kurva, sin(x) dan cos(x)
42
Matlab atau Octave
8.8.2 Grafik Tiga Dimensi Untuk membuat grafik tiga dimensi, kita memerlukan tiga data, untuk tiga sumbunya. Untuk membantu pembentukan titik-titik yang akan diplot kita menggunakan fungsi meshgrid. Seperti contoh berikut ini. % menentukan sumbu yang diplot x = 0:0.1:5; y = 0:0.1:5; % menentukan titik-titik pada ruang dua dimensi [xx,yy] = meshgrid(x,y); % tulis fungsi yang akan diplot zz = sin(xx.*yy); % plot mesh mesh(xx,yy,zz); Hasil grafik menggunakan perintah mesh dapat dilihat di Gambar 8.4.
1
0.5
0
-0.5
-1 5 4
5 3
4 3
2 2 1
1 0 0
Gambar 8.4: Grafik tiga dimensi menggunakan perintah mesh
Visualisasi
43
8.8.3 Grafik Contour Selain plot menggunakan mesh, grafik dua dimensi menggunakan garis kontur sering digunakan di fisika. menggunakan fungsi contour. % menentukan sumbu yang diplot x = 0:0.1:5; y = 0:0.1:5; % menentukan titik-titik pada ruang dua dimensi [xx,yy] = meshgrid(x,y); % tulis fungsi yang akan diplot zz = sin(xx.*yy); % plot contour contour(xx,yy,zz) kita juga dapat menggunakan contourf(xx,yy,zz) untuk contour dengan daerah yang diwarnai. Dua hasil grafik untuk perintah contour dan contourf ditunjukkan pada Gambar 8.5 dan 8.6. 5
4
3
2
1
0 0
1
2
3
4
5
Gambar 8.5: Hasil grafik menggunakan contour selain grafik ditampilkan di layar, kita dapat menyimpan hasil grafik ke dalam bentuk file dengan menggunakan perintah print seperti berikut ini. > print -deps output.eps
44
Matlab atau Octave
5
4
3
2
1
0 0
1
2
3
4
5
Gambar 8.6: Hasil grafik menggunakan contourf selain itu, MATLAB dan Octave memberikan fasilitas membuat multi grafik dengan menggunakan fungsi subplot(m,n,k). Di sini nilai m menentukan jumlah baris dan n menentukan jumlah kolom dalam grafik multi ini. dan sedangkan k menentukan letak grafik pada tabel. > > > > > > > > >
x = -2:0.1:2; y = -2:0.1:2; [xx,yy] = meshgrid(x,y); zz = exp(-1.0*(xx.ˆ2+yy.ˆ2); subplot(2,2,1); mesh(xx,yy,zz); subplot(2,2,2); surf(xx,yy,zz); subplot(2,2,3); contour(xx,yy,zz); subplot(2,2,4); contourf(xx,yy,zz); print -deps output.eps
8.9 Input Output Data Dalam pengolahan data, kita akan sering memasukkan atau membaca data dari file menggunakan MATLAB dan Octave. Tentunya ini berguna untuk mempercepat proses pengolahan data tanpa harus mema-
Input Output Data
45
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
02
1.5
02 1
0.5
0
-0.5
-1
-1.5
-2 -2 -1.5
-1
-0.5
0
0.5
1
1.5
2
2
2
1.5
1.5
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
-1
-1.5
-1.5
-2
1.5
1
0.5
0
-0.5
-1
-1.5
-2 -2 -1.5
-1
-0.5
0
0.5
1
1.5
2
-2 -2
-1.5
-1
-0.5
0
0.5
1
1.5
2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Gambar 8.7: Empat grafik ditampilkan sekaligus menggunakan perintah subplot sukkan data satu-persatu. Pada Bab ini, kita mempelajari cara membaca untuk file yang berupa teks dab berbentuk tabel angka numerik saja. Untuk membaca jenis file dengan format yang berbeda akan dijelaskan di Bab-Bab selanjutnya dan perintah-perintah di berikan pada Lampiran. Untuk membaca data, kita menggunakan perintah atau fungsi load seperti berikut ini. Umpamanya kita memiliki data berupa file dengan format teks seperti berikut ini dan diberi nama data.txt. Untuk membaca file data.txt kita menggunakan perintah > d = load(data.txt) Hasil pembacaan file data.txt disimpan dalam matriks d. Dan selanjutnya kita dapat mengolah data yang ada pada matriks d ini. Untuk menyimpan data hasi perhitungan, MATLAB dan Octave telah memberikan fungsi/perintah save. Coba perhatikan perintah berikut ini. % Matriks M hasil kalkulasi
46 M = [ 1:3; 4:6; 7:9 ]; % Simpan dalam file output save -ascii output.txt M
Matlab atau Octave