I Wayan Sudiarta Metode Numerik bilangan bulat yaitu b−2. Begitu pula selanjutnya, se hingga semua bilangan pecahan b−j diperoleh. Contoh: Konversi bilangan (123.21)10 = (···)2 men jadi bilangan biner. Kita mulai dengan mengkonversi bilangan bulatnya dengan proses sebagai berikut. sisa 1 sisa 1 sisa 0 123 dibagi 2 = 61 61 dibagi 2 = 30 30 dibagi 2 = 15 15 dibagi 2 = 7 7 dibagi 2 = 3 3 dibagi 2 = 1 1 dibagi 2 = 0 sisa 1 sisa 1 sisa 1 sisa 1 (5.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 bulat = 0 0.42 dikali 2 = 0.84 bagian bulat = 0 0.84 dikali 2 = 1.68 bagian bulat = 1 83 382
0.68 dikali 2 = 1.36 0.36 dikali 2 = 0.72 0.72 dikali 2 = 1.44 bagian bulat = 1 bagian bulat = 0 bagian bulat = 1 bagian bulat = 0 bagian bulat = 1 ... 0.44 dikali 2 = 0.88 0.88 dikali 2 = 1.67 dan seterusnya (5.15) 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 pe cahan tertentu, oleh karena itu dalam komputasi yang menggunakan bilangan biner seperti pada komputer dan kalkulator akan terjadi pemotongan sehingga ter jadi kesalahan. Jadi perlu diingat bahwa dalam setiap komputasi numerik, kita memiliki jumlah angka yang terbatas disimpan oleh komputer dan kita perlu mem pertimbangkan kesalahan pembulatan untuk menghin dari kesalahan numerik yang dapat berakumulasi men jadi besar. 5.2 Bilangan Floating Point Suatu bilangan x berbasis β dapat di bentuk seperti berikut ini 84 382
I Wayan Sudiarta Metode Numerik x = ±0.b1 ×βE ︸b2b︷︷3 ···bp︸ (5.16) = mantisa ±r × βE (5.17) dengan E adalah eksponen yang bernilai terbatas antara E1 ≤ E ≤ E2, r adalah bilangan mantisa yang terdiri dari p digit bernilai selain nol adalah β1 ≤ r < 1. Bilangan yang terbesar (largest) adalah L = 0.ccccc···×βE 2 dengan c adalah digit terbesar dan Bi langan terkecil (smallest) adalah S = 0.10000· · ·×βE1 . Sebagai contoh untuk bilangan biner (β = 2), jum lah digit pada mantisa yaitu p = 3 dan umpama nilai eksponen dapat bernilai {−1,0,1}. Nilai terbesar ada lah L = (0.111)2 × 21 = 1.75 dan nilai terkecil selain nol adalah S = (0.100)2 × 2−1 = 0.25. Angka-angka positif yang dapat direpresentasikan dengan bilangan floating point ini adalah (0.100)2 × (terkecil) 2−1 = 0.25 (0.101)2 × 2−1 = 0.3125 (0.110)2 × 2−1 = 0.375 (0.111)2 × 2−1 = 0.4375 (0.100)2 × 20 = 0.5 (0.101)2 × 20 = 0.625 85 382
= (0.110) × 2 20 = 0.75 (0.111)2 × 20 = 0.875 (0.100)2 × 21 1.0 (0.101)2 × 21 = 1.25 (0.110)2 × 21 = 1.5 (0.111)2 × 21 = 1.75 (terbesar) (5.18) Bilangan-bilangan ini dapat direpresentasikan dengan titik-titik pada garis lurus seperti ditunjukkan pada Gambar 5.1. 0 S = 0.25 L = 1.75 Gambar 5.1: Representasi bilangan floating point po sitif dengan tiga digit untuk mantisa dan eksponen {−1,0,1}. Umpama suatu bilangan x bernilai antara dua bi langan floating point (fp1 dan fp2, dengan fp1 <x< fp2). Agar bilangan x dapat direpresentasikan oleh bilangan floating point, bilangan tersebut perlu di bu latkan (rounding) ke bilangan floating point yang ter dekat atau dipotong (chopping), dibulatkan ke bawah atau ke bilangan yang lebih dekat dengan nol. Karena bilangan x tidak bisa sempurna direpresentasikan oleh 86 382
I Wayan Sudiarta Metode Numerik komputer, maka terjadi kesalahan pembulatan (round off error). Selain pembulatan, istilah yang akan sering dite mukan dalam komputasi yaitu overflow dan underflow. Overflow terjadi ketika bilangan yang akan ditampung oleh komputer di atas bilangan yang terbesar (L) yang bisa disediakan oleh komputer. Sedangkan underflow terjadi jika bilangan di bawah bilangan terkecil (S) pada komputer. Komputasi dengan komputer biasanya menggunak an single precision 32 bit dan double precision 64 bit. Ilustrasi pembagian bilangan biner 32 bit ditunjukkan pada Gambar 5.2. Tanda Bilangan 1 bit 8 bit 23 bit eksponen mantisa Gambar 5.2: Pembagian bilangan 32 bit untuk me nampung bilangan floating point Untuk bagian mantisa pada bilangan 32 bit terda pat 1 bit yang tidak secara eksplisit disimpan oleh komputer dan bernilai 1. Sehingga terdapat 24 bit untuk mantisa. Bilangan eksponen bernilai antara 87 382
−126 dan +127. Bilangan terbesar untuk 32 bit adalah L = (1.111...1)2 × 2+127 = (2 − 2−23) × 2127 ≈ 3.4028 × 1038 dan bilangan terkecil adalah S = (1.000...0)2 × 2−126 ≈ 1.1755 × 10−38. Bilangan biner 24 bit setara dengan 7 digit bilangan desimal. Sebagai contoh mari kita perhatikan cara komputer menyimpan angka 2. Pertama kita ubah terlebih da hulu 2 menjadi bilangan biner (10.0)2 dan kemudian ke bentuk floating point yaitu (+1.0 × 2+1) dengan nilai eksponen dalam bilangan biner adalah (01)2, tanda + berarti bernilai 0, maka bilangan yang tersimpan da lam komputer yaitu 0−00000001−00···0000 ︸ ︷︷ ︸ . Di sini sebanyak 23 tanda − digunakan hanyalah untuk memisahkan an tara tanda, ekponen dan mantisa. Perlu diperhatikan bahwa angka 1 pada representasi floating point tidak tersimpan secara eksplisit, tetapi implisit. Bilangan double precision 64 bit terdiri dari 1 bit untuk tanda bilangan, 11 bit untuk eksponen dan 52 bit mantisa. Seperti pada bilangan single precision 32 bit, satu bit di awal mantisa tidak disimpan secara eksplisit sehingga jumlah mantisa menjadi 53 bit. Nilai eksponen bernilai antara −1022 dan +1023. Bilangan biner 53 bit mempunyai presisi sekitar 16 digit desimal. dan Bilangan terkecil terbesar adalahadalah S ≈ 1L×≈2−1022 2×21023 ≈ 2.2251 ≈ 1.7976×10308 × 10−308. 88 382
I Wayan Sudiarta Metode Numerik 5.3 Kesalahan, Galat Kesalahan atau galat (error), dihitung dengan definisi: Galat = Nilai eksak - Nilai pendekatan (5.19) Jika kita mempunyai nilai eksak atau sebenarnya y dan nilai aproksimasi yA, galat atau error dihitung dengan galat = y − yA (5.20) Kita biasanya juga menampilkan galat relatif yaitu y − yA galat = (5.21) ≈ y y − yA (5.22) yA Pada kenyataannya, kita tidak mengetahui nilai yang sebenarnya (y) karena belum diketahui. Tetapi kita dapat menghitung sebuah batas maksimum galat (error bound) sehingga nilai galat selalu lebih kecil da ri nilai batas ini. Kita akan menggunakan aproksimasi Taylor dan teorema sisa untuk menentukan nilai batas maksimum galat. Sumber Galat Galat dapat bersumber dari: 1. Formulasi dari model matematis. 2. Kekeliruan dalam operasi matematis. 89 382
3. Galat pada data 4. Galat pembulatan 5. Galat pemotongan Kehilangan Signifikan Kehilangan angka penting terjadi ketika dua angka yang hampir sama dikurangi satu sama lain. Sehingga ada bagian angka yang hilang. Sebagai contoh meng gunakan aritmatika 4 digit seperti berikut ini: +51.84 −51.75 ——— 00.0︸︷︷︸9 Pada contoh ini, jumlah angka penting pada awal nya ada empat, sedangkan setelah dilakukan operasi pengurangan, jumlah angka pentingnya menjadi satu. Kita kehilangan tiga angka penting yang signifikan. Oleh karena itu pengurangan dua bilangan yang hampir sama perlu dihindari sebelum kita melakuk an komputasi atau memasukkan ke dalam komputer. Kita juga dapat menggunakan variabel yang bisa me nampung digit dengan jumlah yang lebih sesuai se hingga tidak terjadi seperti kesalahan ini. 90 382
I Wayan Sudiarta Metode Numerik Banyak persamaan yang dapat diubah terlebih da hulu sehingga setelah kalkulasi dilakukan tidak me nimbulkan kehilangan angka penting. Sebuah contoh yang sering digunakan adalah rumus akar untuk per samaan kuadrat ax2+bx+c = 0 mempunyai akar-akar x = −b ± √ b2 − 4ac 2a (5.23) Jika 4ac, maka nilai b√cukup b2 − 4acbesarbernilai dibandingkan hampir sama dengandengan bagian b. Jika umpama nilai b positif, menghitung salah satu akar dengan cara x = −b + b2 − 4ac √ 2a (5.24) akan mengalami kesalahan yang tergantung dari be sarnya b. Kita dapat menghindari pengurangan dua variabel bernilai yang hampir sama dengan mengubah persa maan di atas menjadi persamaan tanpa ada kehilangan signifikan. Cara pertama adalah dengan minghitung x1 terlebih dahulu dan kemudian menggunakan c x2 = (5.25) ax1 atau dengan mengubah dengan mengalikan persamaan 91 382
dengan sekawannya seperti berikut ini. x = −b + b2 − 4ac √ 2a × −b +− √ √ b2 − 4ac 4ac (5.26) 2c x = (5.27) −b − b2 − 4ac √ 5.4 Penggunaan Python Referensi-referensi yang digunakan untuk operasi bi langan dengan Python yaitu 1. https://docs.python.org/3/library/ functions.html 2. https://docs.python.org/3/tutorial/ floatingpoint.html Untuk menyatakan suatu bilangan berbasis terten tu, kita menggunakan: 1. Awalan 0B atau 0b untuk menuliskan bilangan binari. 2. Awalan 0o atau 0O untuk bilangan Oktal. 3. Awalan 0x atau 0X untuk bilangan Heksadesi mal. 92 382
I Wayan Sudiarta Metode Numerik Sistem bilangan Awalan Binari Oktal Heksadesimal ‘0b’ atau ‘0B’ ‘0o’ atau ‘0O’ ‘0x’ atau ‘0X’ Sebagai contoh berikut ini: [1]: a = 0b110010 print(a) 50 [2]: b = 0o1716 print(b) 974 [3]: c = 0xFF11 print(c) 65297 Konversi bilangan Konversi bilangan dari suatu basis ke basis yang la in dapat dilakukan dengan menggunakan fungsi-fungsi berikut ini: 93 382
1. bin() untuk bilangan binari 2. int() untuk bilangan desimal (integer) 3. oct() untuk bilangan oktal hex() untuk bilang an heksadesimal Perhatikan contoh-contoh berikut ini. [4]: bin(123) [4]: 0b1111011 [5]: int( 0b111100 , 2) [5]: 60 [6]: oct(123) [6]: 0o173 [7]: hex(123) [7]: 0x7b [8]: int( 0xFF12 , 16) [8]: 65298 [9]: hex(65298) [9]: 0xff12 94 382
I Wayan Sudiarta Metode Numerik Sebagai tambahan: Untuk mendapatkan representa si bilangan desimal dalam heksadesimal, kita menggu nakan metode/fungsi float.hex(). Perhatikan contoh penggunaan berikut ini. [10]: float.hex(1.5) [10]: 0x1.8000000000000p+0 Format Bilangan Floating point Untuk menampilkan sejumlah digit dibelakang koma (“.”), kita menggunakan fungsi format dengan penu lisan jumlah angka di belakang koma. format(0.1, ‘.20f’) untuk menampikan 20 angka di belakang ko ma. [11]: format(0.1, .20f ) [11]: 0.10000000000000000555 Menentukan Tipe data Suatu Variabel Menggunakan fungsi type() [12]: d = 1.0 [13]: type(d) [13]: float [14]: g = 6 type(g) 95 382
[14]: int Contoh kesalahan 10000∑ s = 0.1 i=1 [15]: s = 0.0 for i in range(10000): s+= 0.1 print(s) 1000.0000000001588 Konversi desimal ke basis lain Mengonversi suatu bilangan riil desimal ke basis 2 da pat dilakukan dengan membagi dua bagian: 1. Bagian bulat (integer) 2. Bagian pecahan (fraction) Bagian bulat [16]: b = 2 # base [17]: a = 123 # Angka bagian bulat (integer) digit = [] while a > b: a//b digit.append(r) digit.reverse() r = a%b a = 96 382
I Wayan Sudiarta Metode Numerik print(digit) [1, 1, 1, 0, 1, 1] a = Bagian pecahan [18]: b = 2 # base 0.1 # Angka bagian desimal digit = [] for i in range(30): a = b*a d= int(a) a = a - d digit.append(d) print(digit) [0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, ↩→0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0] Konversi ke Desimal Konversi suatu bilangan dengan basis tertentu dapat dilakukan efisien dengan metode Horner Python memberikan fungsi int() [19]: digit = 110011 # dalam bentuk string 97 382
banyaknya [20]: len(digit) # jumlah digit ↩→character = [20]: 6 [21]: # Metode Horner p = int(digit[0]) for i in range(1,len(digit)): p = p*b + int(digit[i]) print(p) 51 [22]: # Menggunakan fungsi int() int(digit,2) [22]: 51 Soal-Soal Soal 5.1. Konversi bilangan desimal (3.14)10 ke ben tuk biner dan oktal. Soal 5.2. Konversi bilangan biner (110111.10101)2 ke bentuk oktal dan desimal. Soal 5.3. Konversi bilangan biner (10111.10101110)2 ke bentuk Heksadesimal. 98 382
I Wayan Sudiarta Metode Numerik Soal 5.4. Konversi bilangan heksadesimal (AB.CD)16 ke bentuk biner dan desimal. Soal 5.5. Tuliskan representasi floating point untuk bilangan desimal 3.14 dengan komputer 32 bit. Soal 5.6. Tuliskan representasi floating point untuk bilangan desimal 2.17 dengan komputer 64 bit. Soal 5.7. Berapakah kesalahan relatif pendekatan fungsi cos(x) dengan aproksimasi Taylor dengan a = 0 orde dua (2) pada titik x = 0.5? Soal 5.8. Berapakah kesalahan relatif pendekatan fungsi sin(x) cos(x) dengan aproksimasi Taylor dengan a = 0 orde tiga (3) pada titik x = 1.0? Soal 5.9. Ubah persamaan f(x) = cos(x+a)−cos(x− a) supaya tidak kehilangan keakuratan di sekitar x = 0. Soal 5.10. Ubah persamaan g(x) = √ x + 1 su paya tidak kehilangan keakuratan ketika x bernilai be √ x − sar. Soal 5.11. Ubah persamaan h(x) = (sin(x) − x)/x2 supaya tidak kehilangan keakuratan di sekitar x = 0. Soal 5.12. Ubah persamaan f(x) = ln(x + 2) − ln(x) supaya tidak kehilangan keakuratan untuk x bernilai besar. 99 382
√ Soal 5.13. Ubah persamaan g(x) = cos(x)+1 su paya tidak kehilangan keakuratan di sekitar x = π. 100 382
Bab 6 Interpolasi "Very little is needed to make a happy life; it is all within yourself, in your way of thinking." –Marcus Aurelius Dalam suatu pengukuran atau pengamatan atau eksperimen, kita biasanya memperoleh dua kolom da ta 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 ter tentu saja yang bergantung pada metode dan alat yang digunakan. Tetapi yang kita ingin dapatkan adalah nilai f(x) yang tidak berada pada titik-titik pengu kuran. Nilai f(x) pada titik yang tidak sama dengan titik pengukuran dapat dihitung dengan menggunakan sebuah metode pendekatan. Proses menghitung nilai f(x) untuk nilai x yang berada di dalam interval da 101 382
ta, [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 be bas (f) dengan variabel bebas x. Ada banyak fung si yang dapat digunakan untuk memperoleh hubung an ini. Setiap fungsi memiliki parameter-parameter atau koefisien-koefisien yang harus ditentukan sehing ga fungsi tersebut mendekati atau juga melalui titik titik data. Jumlah parameter atau koefisien fungsi ti dak mungkin lebih dari jumlah data. Metode numerik yang menggunakan jumlah parameter atau koefisien lebih sedikit dari jumlah data disebut dengan nama metode regresi. Pada bab ini kita akan mempelajari metode inter polasi menggunakan polinom dengan orde yang sesuai dengan jumlah data. Jika kita mempunyai data seba nyak (n + 1), contohnya {(xi,yi)}, maka kita meng interpolasi tuk pn(x) =dengan∑ ni=0 cpolinom ixi. orde ke n yang berben Masing-masing data (xi,yi) menghasilkan sebuah persamaan linier dengan para meter yang belum diketahui adalah 102 382
I Wayan Sudiarta Metode Numerik = co + C1X0 + C2xő + ... + Cnxo Cm - Yo co +2121 + c2x + ... + Crix ” = yı Co + C122 + C2x3 + ... + Cnxe " = y2 : = : Co + C1In + C2x + ... + cnxn Yn = ( 6.1 ) atau dalam bentuk matrix diberikan oleh 1 Xo xo Co yo 1 X 1 C1 Y1 cà Ti c? X2 x : : X1 1 2 x2n C2 - Y2 ( 6.2 ) : : 1 In In 2012 X nп n Сп Yn Kita dapat menentukan parameter atau koefisien Cį dengan cara menyelesaikan Pers . ( 6.2 ) . Tetapi cara ini tidak efisien , tidak mudah dan membutuhkan kompu tasi yang lama. Pada bab ini , kita akan mempelajari dua cara un tuk memperoleh polinom interpolasi yang lebih efisien dan mudah daripada metode matriks Pers . ( 6.2 ) yai tu: ( a) metode Lagrange dan ( b) metode Newton. Dua metode ini kelihatannya menghasilkan bentuk polinom yang berbeda , tetapi jika diuraikan akan menghasilkan polinom yang sama. Hanya satu polinom yang bisa di hasilkan yang melewati semua titik data. 103 382
6.1 Metode Lagrange Umpamanya kita diberikan sebanyak n +1 titik data yaitu ( x0, yo ), (x1, yı ), (x2, y2),... , (Xn , yn ). Kita ingin memperoleh polinom order ke n, Pn ( x) , yang melalui semua titik data , Pn (xi ) = yi i = 0,1 , ... , n ( 6.3 ) Polinom interpolasi menggunakan metode Lagrange berbentuk , Pn ( x) = ykLn,k (2 n ( 6.4) k=0 = dengan Ln, k ( x) merupakan sebuah polinom yang me miliki sifat (Ref] 0 jika i + k Ln,k (x ;) ( 6.5 ) 1 jika i = k Polinom yang memenuhi persamaan ( 6.5 ) berbentuk perkalian ( x– x; ) , dengan pengecualian ( x – Xk ) ( Kuo, 1965 ; Atkinson , 1978) yaitu Ln,k (x ) = a (x – xo ) ... ( x – Xk - 1 ) ( x – Xk+1 ) ... (x – Xn) ( 6.6 ) dengan a adalah sebuah koefisien . Perlu kita meng ingat bahwa dalam perkalian ini tidak ada bagian ( x - 2k ) . Substitusi x = Ik pada Pers . ( 6.6 ) menghasil kan Ln, k ( tk ) =a ( Ik – xo ) ... ( 2k – Xk- 1 ) ( 2k – Xk+ 1 ) ... ( xkk – Xn ) = 1 ( 6.7) 104 | 382
I Wayan Sudiarta Metode Numerik Sehingga koefisien a bernilai ( Kuo, 1965) 1 a = ( Ik – xo) ... (Xk – Xk- 1 ) ( xk – Xk+1 ) ... ( xk – Xn ) ( 6.8 ) Jadi , polinom Lagrange Ln, k ( x) berbentuk Ln, k ( x) = ( x – xo ) ... ( x – Xk- 1 ) ( x – Xk+ 1 ) ... ( x — xn ) ( A - ( Xk – Xk- 1 ) ( Xk – Xk+ 1 ) ... ( xk – xn) ( 6.9) xo) . atau dapat dituliskan secara singkat dengan notasi perkalian II seperti berikut ini . N ( x – Xi ) Ln, x ( x ) = II (ak – Xi ) i =0 , i #k ( 6.10) Perlu kita perhatikan dan ingat lagi bahwa faktor ( x – xk ) dan ( xk – xk ) tidak ada pada polinom La grange Ln, k ( x) . Cara mengingat dan menulis polinom Lagrange adalah dengan mengalikan semua ( 2-0 ) ke (X k - Xi) cuali į = k . Sebagai contoh untuk data berjumlah 3 data , { ( xo , yo ) , ( x1 , y1 ) , ( 22 , y2 ) } , polinom orde 2 yang diha silkan adalah P2 ( x) = yoL2,0 ( x) + yıL2,1 ( x) + y2L2,2 ( x ) ( 6.11 ) 105 | 382
L2,0 ( x) = ( 6.12 ) L2,1 ( x ) = = ( x – x1 ) ( x – X2) ( 0 – 1) ( zo - 02 ) ( x – xo) (x – x2 ) ( x1 - x0 ) ( x1 - x2 ) ( x – xo ) ( x – x1 ) ( x2 – xo ) ( x2 – x1 ) ( 6.13 ) L2,2 (x) = ( 6.14 ) Sebagai contoh, kita mempunyai tiga titik data yaitu ( 1,6) , ( 2,5 ) , dan ( 3,2 ) . Tiga polinom Lagrange order dua yang dihasilkan adalah 1 P2,0 ( 2 ) = - 5 ( z – 5x + 6) ( 6.15) P2,1 ( 2) ( x − 2 ) ( x – 3) ( 1 – 2 ) ( 1-3) ( x - 1 ) ( x – 3) ( 2 – 1 ) ( 2 – 3 ( x - 1 ) ( x - 2) ( 3 – 1 ) ( 3 – 2 ) = -x2 + 4x - 3 ( 6.16) 1 P2,2 ( x) = = 5 (x2 - 3x + 2) ( 6.17) 2 Polinom interpolasinya adalah 6 - 2 Pn ( x) = 40P2,0(x ) + 41P2,1 ( x) + y2P2,2 (x ) ( 22 – 5x + 6 ) + 5 ( –22 + 4x – 3 ) 2 + x2 ( 22 – 3x + 2) = -x2 + 2x + 5 ( 6.18) 2 Contoh program bahasa Python ditunjukkan pada Kode berikut ini . 106 | 382
I Wayan Sudiarta Metode Numerik 10 p2(x) data 5 y 0 −50 1 2 3 4 x Gambar 6.1: Interpolasi data dengan polinom orde 2. # Menghitung nilai f(a) dari data # f(a) = p_n(a) interpolasi Lagrange # input data x[i] dan yd[i] xd = [0, 2, 3, 4] yd = [1, 4, 2, -2] n = len(f) # input nilai a x = 1 107 382
p = 0 t for k in range(n): = yd[k] # Hitung L_k(x) for j in range(n): if k!=j: t *= (x-xd[j])/(xd[k]-xd[j]) p += t print(p) 3.75 6.2 Metode Newton Metode interpolasi Lagrange membutuhkan banyak operasi aritmatika untuk menghitung setiap polinom Lagrangenya. Jika data bertambah, polinom Lagrange harus dibuat kembali dari awal sehingga tidak efisien. Bagaimana cara yang lebih efisien? Dengan menggu nakan metode beda terbagi Newton. Mungkin istilah "beda terbagi" agak susah dimengerti pada awalnya. Kita akan mengerti mengapa dinamakan demikian. Sebelum kita mempelajari bagaimana mendapatkan polinom interpolasi, mari kita definisikan notasi baru yaitu f[x0] = y0 (6.19) 108 382
I Wayan Sudiarta Metode Numerik Perhatikan kita menggunakan tanda kurung persegi [ ] untuk membedakan dengan tanda kurung biasa (). Untuk memulai, kita mendefinisikan terlebih dahulu suatu nilai yang merupakan beda dua nilai f [ ] dibagi dengan beda dua posisi x yaitu f [ 21 ] - f[x ] f( x0 , x1 ) = (6.20) X1 – XO - f[ 21 , x2] – f(x0 , x1 ] f [xo, X1,X2] = ( 6.21 ) 02-00 f[21,X2 , X3 ] – f [ 20, X1 , X2 ] f (x0,X1 , X2 , X3] = ( 6.22 ) 03 – 20 f [20, 21,... , Ik- 1 , xk] X k XK = f (x1,X2,... , xk] – f (x0,X1, ... , Xk -1 ( 6.23 ) Тk XO dan seterusnya. Untuk mempermudah perhitungan, kita biasanya menghitung menggunakan tabel seperti berikut ini . Setelah mendapatkan nilai- nilai beda terbagi f[,,, ], kita memperoleh interpolasi polinom Newton dengan persamaan Pn ( x ) = f[xo] + ( x – xo ) f[ro , X1 ] + ( x – xo ) ( x – x1 ) f ( x0 , x1 , x2] n- 1 + ... + f(x0, X1,... ,Xn] II (x – Xk ) ( 6.24 ) k=0 109 | 382
Tabel 6.1 : Tabel kalkulasi menggunakan metode New ton. Notasi fi = f [vi],fij f [ x;, x; ] , fijk f[li,Xj , Xk] digunakan untuk mempersingkat penulis - = an. Xk f [ xk] f (xk ,Xk + 1 f [ Ik,Xk+1 , 2k + 2 Xo fo = yo foi f(x1] – f(xo) X1 -XO X1 fi = y1 fo,1,2 - f(x1,02) – f (x0,21 ] X2 -X0 $ 1,2 - f [x2] – f [21] X2 -X1 X2 f2 = y2 $ 1,2,3 - $ [x2,x3] – $ (x1,x2] X3 -X1 $2,3 f [x3] – f [x2 ] X3 -X2 X3 f3 = y3 $2,3,4 - $ (23,14] - f [22,23 ] 24 -X2 f [ x4 ] - f [x3] $ 3,4 = X3 -X3 X4 = Y4 Sebagai contoh untuk polinom interpolasi orde ke 3 , P3 ( x) = f [ 20] + ( x – xo ) f(x0 , x1 ] + ( x – xo ) ( x – xı ) f ( x0 , x1 , x2] + ( x – x0 ) ( x – x1 ) ( x – x2 ) f ( x0 , X1 , X2 , X3] ( 6.25 ) Nilai polinom Newton pn ( x) dapat dihitung dengan menggunakan metode Horner, sebagai contoh untuk polinom orde ke 3 yaitu P3 ( x) = ( f[3)( x – x2 ) + f[ 2] ] ( x – x1 ) + f[ 1 ] ( x – Xo ) + f [co] ( 6.26) 110 | 382
I Wayan Sudiarta Metode Numerik = = = Untuk mempersingkat notasi , kita menggunakan f (x0 ,x1] , f 2] f( x0 , x1 , x2] dan $13 f (x0 ,X1, X2, X3] Polinom p3 ( x) dihitung dengan metode Horner yaitu $ 3 = $)13 S2 = $3 ( x – x2 ) + f (2) $ 1 = S2 ( x – X1 ) + fiu So = 81 ( x – Xo ) + f[20] ( 6.27) Menggunakan data seperti sebelumnya untuk meto de Lagrange, perhitungan menggunakan tabel untuk kalkulasi metode interpolasi Newton ditunjukkan pa da Tabel 6.2 berikut ini . Tabel 6.2 : Sebuah contoh tabel kalkulasi dengan me tode Newton. 5-6 2-1 = Xk f [xk] f [Xk,Xk+1 ] f [ Xk , Xk+ 1 , Xk+2 ] 1 6 -1 2 . 5 -3= (-1) -1 -3 32 = 3-1 2-5 3-2 = 111 | 382
Polinom interpolasi orde dua adalah p2(x)=6+ −1(x − 1) + −1(x − 1)(x − 2) = −x2 + 2x + 5 (6.28) Polinom ini sama dengan polinom yang dihasilkan menggunakan metode Lagrange Pers. (6.18). Program Python untuk interpolasi dengan polinom metode beda terbagi Newton. import numpy as np # Menghitung nilai f(a) dari data # f(a) = p_n(a) interpolasi Newton # input data x[i] dan f[i] xd = [0, 2, 3, 4] yd = [1, 4, 2, -2] n = len(f) # input nilai x x = 1 # Membuat tabel beda terbagi Newton dd = np.zeros((n,n)) # Mengisi tabel dd[k][0] 112 382
I Wayan Sudiarta Metode Numerik for k in range ( n) : dd [k , 0] yd [k] = # Mengisi tabel dd [ k , j ] for j in range ( 1 , n ) : for k in range ( j , n ) : dd [ k , j ] = ( dd [ k , j - 1 ] - 4dd [k - 1 , j - 1 ]) / ( xd [k ] -xd [k - j ]) # Menghitung nilai polinom p_n ( x ) р dd [ n - 1 , n - 1 ] ; for k in range ( 1 , n) : р p * ( x -xd [n - k - 1 ] ) + dd [n - k - 1 , n - k - 1 ] print ( p) = 3.75 6.3 Kesalahan Interpolasi Besarnya nilai kesalahan interpolasi menggunakan po linomial order ke n, Pn ( x ) untuk pendekatan fungsi f( x ) diberikan oleh , seperti teorema sisa Taylor , [Ref] п E( x) = f( n+1 ) ( c) II (x – xk) ( n + 1 ) ! ( 6.29 ) k =0 113 382
6.4 Fenomena Runge Jika orde n polinom bertambah besar, tentu kita mengharapkan bahwa polinom akan mendekati fungsi sebenarnya, tetapi tidak semua kasus demikian. Data dengan interval titik data yang seragam dapat menye babkan sebuah "non convergence" yang disebut dengan fenomena Runge. Pada kasus dengan fenomena Runge berarti bahwa semakin tinggi orde polinomnya, sema kin besar kesalahannya. Mari kita perhatikan interpolasi untuk data dipero leh dari fungsi f(x) = 1/(1 + 25x2). Perbandingan interpolasi untuk p4(x) dan p8(x) ditunjukkan pada Gambar (6.2). Pada kasus ini dengan menambah orde atau data, kesalahan pada interpolasi semakin besar. Maka perlu diingat bahwa penggunaan polinom de ngan orde besar perlu dihindari untuk interpolasi data, khususnya, pada data dengan interval yang seragam. 6.5 Penggunaan Python Umpama, kita memiliki data dalam bentuk tabel se perti berikut ini. x y x0 y0 x ... 1 y1 .. . 114 382
I Wayan Sudiarta Metode Numerik x y xn yn Ada sebanyak (n + 1) data dengan indeks i = 0,...,n. 1. Metode Lagrange Polinom interpolasi Lagrange berbentuk, pn(x) = n∑ ykLn,k(x) k=0 dengan Ln,k(x) diberikan oleh N∏ LN,k(x) = (x − xi) i=0,i=k (xk − xi) [1]: %matplotlib inline import numpy as np import matplotlib.pyplot as plt [2]: # data x dan y xd = [1 , 3, 4, 5] yd = [4, 2, 6, 9] [3]: n = len(xd) [4]: # Berapakah nilai y ketika x bernilai x = 2 115 382
1 f( x) -- P4 ( 2) 0.5 * P8( 2) 1 У 0 -0.5 - 1 -1 -0.5 0 0.5 1 X Gambar 6.2 : Pendekatan polinomial p4 ( x ) dan p8 ( 2 ) untuk fungsi f( x) = 1 / ( 1 +25x2 ) yang memperlihatkan fenomena Runge. [ 5] : # Hitung nilai interpolasi p_n ( a ) р 0 for k in range ( n ) : t = yd [ k] # Hitung L_k (a) for j in range ( n ) : if k ! = j : t * = ( x-xd [ j ] ) / ( xd [ k] -xd [ j ] ) P += t print ( p) 116 | 382
I Wayan Sudiarta Metode Numerik 0.25 [ 6] : # posisi interpolasi sebanyak 101 titik xi xd [O ] + np.arange ( 101) * (xd [n - 1 ] 4xd [ 0 ] ) / 100 = # array untuk menampung nilai yi yi = np.zeros ( 101 ) for i in range ( 101) : x = xi [ i] р o for k in range ( n ) : t = yd [k] # Hitung L_k ( x ) for j in range (n ) : if k ! =j : t * = ( x- xd [ j ] ) / (xd [ k ] -xd [ j ] ) p += t yi [ i ] p # Visualisasi plt.plot ( xi , yi , ' -b ' ) plt.plot (xd , yd , ' or ' ). plt.xlabel ( ' x ' ) plt.ylabel ( ' y ' ) plt.show (). 117 | 382
Menggunakan Modul Sympy Pada bagian ini kita menggunakan modul Sympy un tuk mendapatkan persamaan polinom interpolasi. [7]: from sympy import * [8]: x = t = symbols( x ) symbols( t ) symbols( p ) p = [9]: p = 0 for k in range(n): yd[k] #forHitung j in range(n): L_k(x) t = 118 382
I Wayan Sudiarta Metode Numerik if k ! = j : t * = ( x - xd [ j ] ) / ( xd [k ] -xd [ j ] ) p += t p1 expand ( p) [ 10] : p1 13x3 24 + 6x2 431.0 33 + 24 2 [ 11 ] : p1.subs ( x , 2 ) 1 4 . 2. Metode Newton Menentukkan polinom interpolasi dengan metode Newton dapat dengan mudah dilakukan dengan mem buat tabel seperti berikut ini . Xo I1 Yi f [ /i ] f [ /i , li+1 ] f[ri, li+ 1,l'i + 2] Yo f[x] Yi f [ 21 ] f [ 20 , X1 ) y2 f[ 22] [ x1 , x2] f [ xo , X1 , X2] yg f [23] f ( x2 , X3] f [ 21 , 22 , 23] X2 23 Kita menghitung nilai-nilai pada tabel dengan Ru mus beda dibagi Newton. Perhatikan beberapa contoh di bawah ini . 119 | 382
= X1 = f [.2o] = yo f [ 21 ] – f( xo] f [ x0 , x1 ] = - x0 f [21, x2 ] – f [ 70, X1 ] f[.10,x1, x2] X2 – Xo f (x1,X2 , X3] – f ( x0 , X1 , X2] f (x0,X1 , X2 , x3] = 03 - 00 dan seterusnya . Polinom interpolasi dengan metode Newton kemu dian berbentuk: Pn ( x) = f[ ro] + ( x – xo ) f(x0 , x1 ] n-1 + (x -xo)(x - x1) f [x0,X1 , X2] +... + f [20 ,X1 , ... , Xn] II ( X—Xk ) k=0 [ 12] : x = 2.0 # Membuat tabel beda dibagi Newton dd = np.zeros ( (n , n ) ) # Mengisi tabel dd [k ] [ O ] for k in range ( n ) : dd [k , 0 ] = yd [k] # Mengisi tabel dd [k ,j] for j in range ( 1 , n ) : for k in range ( j , n ) : 120 | 382
I Wayan Sudiarta Metode Numerik dd [ k , j ] = (dd [k , j - 1 ] 2 dd [k - 1 , j - 1 ]) / ( xd [k ] -xd [k - j ] ) # Menghitung nilai polinom p_n ( 2 ) p = dd [n - 1 , n - 1 ] ; for k in range ( 1 , n ) : p p * ( x - xd [n - k - 1 ] ) + dd [n - k - 1 , n - k - 1 ] print ( p ) 0.25 [ 13] : # Interpolasi pada sebanyak 101 titik xi2 = xd [O ] + np.arange ( 101) * (xd [n - 1 ] -0 4xd [ 0 ] ) / 100 # Array untuk menampung nilai yi yi2 = np.zeros ( 101 ) for i in range ( 101) : x = xi2 [ i] р dd [ n - 1 , n - 1 ] ; for k in range ( 1 , n ) : p = p * ( x - xd [n- k- 1 ] ) +u 4dd [n - k - 1 , n - k - 1 ] yi2 [ i ] р = # Visualisasi 121 382
plt.plot(xi2,yi2, -b ) plt.plot(xd,yd, or ) plt.xlabel( x ) plt.ylabel( y ) plt.show() Menentukan Persamaan Polinom dengan Modul Sympy [14]: x = symbols( x ) p = symbols( p ) [15]: p = dd[n-1,n-1]; for k in range(1,n): p = p*(x-xd[n-k-1]) + dd[n-k-1,n-k-1] 122 382
I Wayan Sudiarta Metode Numerik p2 = expand(p) [16]: p2 −0.541666666666667x3 + 6.0x2 − 17.9583333333333x + 16.5 Perbandingan hasil interpolasi metode Lagrange dan Newton. [17]: plt.plot(xi2,yi2, xb ) plt.plot(xi,yi, -r ) [17]: [<matplotlib.lines.Line2D at 0x11f62e48>] [18]: p2.subs(x,2) 0.249999999999993 123 382
3. Menggunakan Modul Numpy atau Scipy Fungsi-fungsi penting yang diberikan oleh modul Numpy dan Scipy untuk interpolasi adalah polyfit, po ly1d, dan interp1d. Fungsi polyfit memberikan interpolasi dengan meng gunakan polinom yang dicocokkan dengan data secara least squares. Polyfit mencocokkan data dengan polinom order m yang berbentuk p(x) = cmxm + cm−1xm−1 + ... + c0 dengan cm adalah koefisien polinom. Polyfit memberikan ouput berupa array yang beri sikan nilai koefisien dimulai dari koefisien untuk pang kat tertinggi seperti berikut ini. [cm ,cm−1,...,c0] Fungsi poly1d membentuk polinom dengan koefisien pada array input. Fungsi interp1d merupakan fungsi pendekatan se cara regresi pada data. Opsi yang sering digunakan adalah opsi kind yang menentukan tipe interpolasi. Untuk opsi kind dapat berupa string ‘linear’, ‘nea rest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, ‘next’ atau bilangan bulat. Referensi yang digunakan untuk aplikasi Python ya itu 124 382
I Wayan Sudiarta Metode Numerik 1. https://docs.scipy.org/doc/numpy/ reference/ generated / numpy.polyfit.html 2. https://docs.scipy.org/doc/numpy/ reference/generated/numpy.polyid.html 3. https://docs.scipy.org/doc/scipy/ reference/generated/ scipy.interpolate . interpid.html = [ 19] : XX np . array (xd) yy = np.array ( yd ) [ 20] : c = np.polyfit ( xx , yy , n- 1 ) print ( c ) [ -0.54166667 6 . -17.95833333 16 . 45 ] [ 21 ] : pn = np . polyld ( c ) [ 22] : # Menghitung nilai polinom intepolaszu pada 2 2 pn (2) [ 22] : 0.24999999999996092 [ 23] : xp np.linspace (xd [0 ] , xd [n - 1 ] , 100 ) plt.plot ( xx , yy , ' or ' ) 125 382
plt.plot(xp,pn(xp), -b ) plt.xlabel( x ) plt.ylabel( y ) plt.show() [24]: from scipy.interpolate import interp1d [25]: f = interp1d(xx, yy, kind= cubic ) [26]: plt.plot(xx,yy, or ) plt.plot(xp,f(xp), -b ) plt.xlabel( x ) plt.ylabel( y ) plt.show() 126 382
I Wayan Sudiarta Metode Numerik [27]: f(2) [27]: array(0.25) Soal-Soal Soal 6.1. Diberikan tiga data eksperimen: (0,1), (2,5) dan (3,0). Tentukan polinom interpolasi dengan metode Lagrange dan Newton. Soal 6.2. Diberikan empat data eksperimen: (0,5), (1,3), (2,1) dan (3,2). Tentukan polinom interpolasi dengan metode Lagrange dan Newton. Soal 6.3. Buatlah empat data dari fungsi sin(x): (x0,sin(x0), (x1,sin(x1), (x2,sin(x2) dan (x3,sin(x3). 127 382
Kemudian tentukan polinom interpolasi dengan meto de Lagrange atau Newton. Selanjutnya ambil bebera pa titik sampel untuk membandingkan tingkat keaku rasian polinom interpolasinya. Soal 6.4. Dari polinom yang dihasilkan pada Soal 6.1, hitunglah nilai turunan polinom pada posisi x = 1. Soal 6.5. 6.3, hitunglah Gunakan integralpolinom polinomyang∫xx03dihasilkan p3(x)dx. pada Soal Kemudian bandingkan dengan nilai eksaknya. 128 382
Bab 7 Regresi atau Pencocokan Kurva "I have learned from nature that all is equal... all is equal and in balance. I see everything as fitting together." – Joseph Raffael Pada eksperimen atau pengamatan, kita biasanya mendapatkan data dengan kesalahan pengukuran yang dapat bersifat sistematis maupun acak. Hubungan variabel-variabel fisis pada data dapat diperoleh de ngan pencocokan kurva atau regresi. Tentunya kita tidak menggunakan polinom interpolasi seperti pada bab sebelumnya karena ada kesalahan pada data. De ngan metode regresi, kesalahan pengukuran dapat se cara rata-rata dikurangi. Orde polinom atau fungsi yang biasa digunakan untuk regresi jauh lebih kecil 129 382
dari jumlah data. Khususnya hubungan yang paling sederhana menggunakan polinom order satu atau re gresi linier selalu digunakan sebelum fungsi nonlinier diterapkan. 7.1 Teori Umpama kita memiliki sebanyak (n + 1) titik data, {(xi,yi),i = 0,...,n}, kita ingin membuat pendekat an data dengan sebuah fungsi yang merupakan kombi nasi linier dari sebanyak (m + 1) fungsi-fungsi seperti dibawah ini. f(x) = c0g0(x) + c1g1(x) + c2g2(x) + ... + cmgm(x) = m∑ k=0 ckgk(x) (7.1) Karena ini bersifat pendekatan atau regresi, nilai m selalu lebih kecil dari n ( m < n). Jika m = n dinamakan dengan proses interpolasi yang sudah dije laskan sebelumnya. Tingkat pendekatan fungsi dengan data dapat dili hat dengan menentukan jumlah kesalahan kuadratnya atau the sum of the squares of the errors (SSE) yang dihitung dengan SSE = ]2 [f(xi) − yi n∑ [ m∑ n∑ i=0 2 = ckgk (xi) − yi (7.2) ] i=0 k=0 130 382
I Wayan Sudiarta Metode Numerik Kita inginkan nilai SSE terkecil dengan syarat tu runan parsial terhadap variabel Ck semua sama dengan nol, assEack = 0. Dari syarat turunan parsial ini diperoleh sebanyak m +1persamaan linier yaitu n m Ck9k (x; ) – Yi [gk ( X; ) ] = 0 -- ( 7.3) i =0 Lk=0 Persamaan ( 7.3 ) dapat disederhanakan menjadi ΣΣΩ(89) c = Žar (ra ) : ( 7.4 ) k=0 Li =0 Persamaan ini dapat dibentuk menjadi matriks FTFc = FTy dengan [ 90( x0) 91 ( x0 ) go ( x1 ) 91 ( x1 ) F = 90 ( 22 ) 91 ( 22 ) : : [ 90 (Xn) 91 ( xn ) 9m ( 20) Im (x1) 9m ( 22) ( 7.5 ) : Im ( Xn )] Со C1 C = C2 ( 7.6 ) : cm ] 131 382
Yo Y1 y = Y2 ( 7.7) : Yn Jadi kita dapat menentukan nilai- nilai Ck dengan ca ra menghitung matriks A = FTF dan BB = FTy, ke mudian menyelesaikan persamaan Ac = B. 7.2 Regresi Linier Umpama diberikan data sebanyak ( n + 1) yaitu ( x0 , yo) , ( x1, yı) ( In , Yn ) yang memiliki trend berupa ga ris lurus . Kita menggunakan fungsi pendekatan linier yaitu y = Co + Cix ( 7.8 ) Nilai SSEnya adalah n SSE = (( co + Cixi) – yi ) ? ( 7.9 ) i =0 Kita membentuk matriks 1 XO 1 1 1 F = (7.10) : 1 In 132 382