Monday, March 30, 2015

Komputasi Fisika di bidang Numerik

Fisika Komputasi merupakan bidang yang mengkaji masalah fisika berdasarkan hasil tinjauan komputasi numerik. Sebagai perbandingan, fisika teori melandaskan bidang kajian fisika berdasarkan analisis matematis analitik sedangkan fisika eksperimen melandaskannya pada interpretasi hasil-hasil pengukuran beberapa besaran fisis yang terkait. Dengan perkembangan teknologi (khususnya komputer) batas antara fisika komputasi dan fisika teori menjadi semakin tidak nampak seiring dengan semakin tidak nampaknya perbedaan hasil yang diperoleh secara komputasi dan analitik. Ini merupakan salah satu alasan yang menyebabkan mengapa fisikawan teori dapat berperan sebagai fisikawan komputasi dan sebaliknya (contoh Feynman, Kenneth G Wilson, Steven Koonin dan sebagainya). Ramalan yang secara akurat dapat diperoleh dari hasil komputasi terhadap beberapa masalah fisika menunjukkan bahwa fisika komputasi tidak lagi hanya sekedar alat visualisasi atau simulasi proses fisis agar nampak sederhana. Penghargaan Nobel Fisika untuk K.G. Wilson dalam teori fenomena kritis (critical phenomena) dan Nobel Kimia untuk Pope dalam pengembangan teori fungsional kerapatan untuk molekul menunjukkan peranan fisika komputasi yang semakin mantap sebagai bentuk pendekatan ketiga (selain fisika teori dan fisika eksperimen) dalam mempelajari fisika. Fisikawan eksperimen perlu memiliki ketrampilan penanganan peralatan agar pengukuran besaran fisis yang dilakukannya dapat memberikan hasil. Pemahaman mengenai karakteristik alat yang dihadapi sangat membantu dalam melacak sumber-sumber kesalahan yang mungkin timbul atau bahkan dapat membantu melokalisir permasalahan. Fisikiwan teori perlu memiliki ketrampilan matematis agar dapat memperoleh penyelesaian terhadap persamaan matematis yang dihadapi. Disinipun diperlukan pemahaman yang mendalam tentang watak-watak fungsi dan operasi matematis agar mampu melalukan trik atau teknik tertentu untuk meyederhanakan persoalan matematis yang rumit. Hal yang semacam juga diperlukan dalam fisika komputasi. Fisikawan komputasi perlu memiliki ketrampilan untuk mengubah persamaan matematis atau hukum fisika ke dalam bentuk diskrit yang sesuai. Dalam hal ini diperlukan bentuk diskrit karena segala informasi fisis mengenai sistem nantinya akan tersaji dalam bentuk angka-angka atau nilai-nilai numerik. Metode pengubahan persamaan matematis ke bentuk diskrit beserta berbagai metode penyelesaiannya ini biasa disebut metode numerik. Pemahaman mengenai metode numerik itu saja belum mencukupi karena hasil nilai-nilai numerik yang diharapkan baru akan muncul setelah diproses oleh komputer. Dalam hal ini diperlukan bahasa komputer atau piranti tertentu (biasanya perangkat lunak berbentuk paket siap pakai) sehingga pemakai dapat berkomunikasi dengan komputer dan memerintahkannya untuk melakukan proses komputasi seperti yang diharapkan. Pemahaman tentang watak-watak alur langkah komputasi (algoritma) serta watak komputer itu sendiri tentunya sangat membantu dalam melakukan trik dan manipulasi untuk optimasi proses komputasi. Bidang fisika komputasi yang memerlukan tidak hanya pemahaman fisika tetapi juga metode numerik dan bahasa pemrograman menimbulkan kesan seolah-olah sebagai pengetahuan yang memerlukan multi disiplin ilmu. Untuk masa sekarang (paling tidak di Indonesia) kesan ini memang tidak salah. Seseorang yang belajar fisika di perguruan tinggi tidak otomatis mendapatkan kuliah metode atau analisis numerik dan bahasa pemograman. Keduanya biasanya diberikan di program studi lain seperti matematika atau ilmu komputer. Hal ini lain jika dibandingkan dengan kuliah fisika matematika (diperlukan dalam bidang fisika teori) dan praktikum/eksperimen fisika (diperlukan dalam bidang fisika eksperimen) yang tersedia dalam program studi fisika. Di masa depan keadaan ini mungkin akan berubah oleh beberapa sebab. Pertama karena komputer sudah memasyarakat dan user friendly sehingga interaksi dengan komputer baik melalui bahasa pemrograman atau piranti lain sudah dikuasai oleh setiap pengguna sejak dini. Kedua, metode numerik sendiri tidak terpisah lagi dengan fisika karena begitu intensif digunakan dalam banyak masalah fisika atau juga karena metode numerik itu sendiri dikembangkan melalui analogi proses fisika. 
2. Beberapa aspek dasar telah disinggung bahwa inti dari proses komputasi adalah mengubah persamaan matematika ke dalam bentuk diskritnya sedemikian hingga perilaku sistem dan penyelesaiannya dapat diwakili oleh nilai-nilai numerik yang terlibat. *) Pemahaman persamaan dan arti fisisnya. Bagi pemula prinsip ini kadang digunakan secara tidak hati-hati : asalkan persamaan matematika yang menggambarkan sisten fisika sudah diubah ke bentuk diskrit maka nilai hasil keluaran yang diperoleh akan diterima apa adanya sebagai penyelesaian sistem tersebut. Perlu ditekankan bahwa meskipun fisika komputasi terlibat dengan angka-angka numerik, tapi bukan nilai angka-angka itu sendiri yang penting. Yang lebih penting adalah apakah nilai-nilai tersebut secara benar dapat menggambarkan sistem fisika yang ditinjau. Dengan kata lain fisika komputasi adalah bidang yang berhadapan dengan masalah fisika (seperti halnya fisika teori dan fisika eksperimen) dan bukan sekedar masalah angka/matematika. Pemahaman ini memberikan konsekuensi pada beberapa aspek dasar yang perlu diperhatikan, yang pada akhirnya akan berguna untuk mendapatkan informasi yang benar terhadap sistem yang ditinjau dan bahkan berguna dari sisi efisiensi dan ketelitian proses komputasi. Aspek yang perlu diperhatikan antara lain seperti yang diuraikan sebagai berikut. *) Satuan universal Berbagai besaran fisis di dalam fisika dapat dikaitkan dengan satuannya masing-masing. Mengetahui satuan yang digunakan untuk besaran fisis tertentu akan dapat diketahui keadaan sistem bagi besaran tersebut. Ketika besaran panjang dinyatakan dalam satuan angstrom dan besaran tenaga dalam satuan eV maka kira-kira sistem yang ditinjau adalah sistem mikroskopis non-relativistik. Sebaliknya ketika satuan panjang dinyatakan dalam meter dan tenaga dalam Joule maka yang terlintas adalah sistem makroskopis. Untuk penyelesaian analitis, pengambilan satuan sesuai dengan sistem fisisnya tersebut tidak begitu berarti pada perolehan hasil akhir karena selalu dapat dilakukan penyederhanaan pada langkah perhitungannya. Namun dalam komputasi pengambilan satuan yang sesuai tersebut sangat mempengaruhi hasil mengingat yang terlibat dalam komputasi hanyalah nilai-nilai numerik dan bukan simbol besaran fisis. Karena keterbatasan presisi komputer, suatu nilai yang sebenarnya tidak nol seperti nilai massa elektron m = 9.1 x 10-31 kg dapat diperlakukan sebagai nilai nol. Hal ini sangat berbahaya apabila muncul sebagai nilai pembagi pada pertengahan proses komputasi yang berakibat pada gagalnya proses komputasi. Cara lain untuk menjamin agar nilai yang terlibat dalam komputasi tidak terlalu besar atau terlalu kecil sesuai sistem fisisnya adalah dengan menormalisir persamaan matematik yang terlibat dengan cara mendefinisikan satuan universal bagi sistem sedemikian hingga semua besaran fisis yang terlibat menjadi tidak bersatuan. Keuntungan cara ini adalah selain persamaan yang terlibat menjadi berbentuk sederhana juga dimunkinkannya diperoleh ketelitian proses komputasi yang tinggi mengingat angka numerik yang terlibat berorde besar sesuai batas ketelitian komputer. Sumber diambil dari : Dr. Pekik Nurwantoro 21 Agustus 2000

GALAT (KESALAHAN ) DALAM KOMPUTASI Perlu disadari bahwa komputasi numerik adalah komputasi yang mengikuti suatu algoritma pendekatan (aproksimasi) untuk menyelesaikan suatu persoalan. Dengan demikian bidang komputasi numerik memiliki kemungkinan kesalahan/galat sebagaimana terdapat di dunia eksperimen fisika. Beberapa sumber galat pada komputasi numerik adalah: 
1. Round-off error : kesalahan akibat pembuatan angka 
2. Truncation error : kesalahan akibat pemotongan suku pada deret aproksimasi, misalnya suatu rumus rumit diganti dengan rumus yang lebih sederhana. 
3. Range error : kesalahan yang terjadi karena nilai hasil komputasi melampaui batas angka yang diperbolehkan oleh komputer, misalnya sangat kecil atau sangat besar.

1) Galat Pembulatan Pembulatan bilangan sering dilakukan dalam bidang komputasi numerik, misalnya mengurangi cacah digit pada suatu nilai hampiran dengan membuang/mengabaikan beberapa digit terakhir. Aturan pembulatan yang sering diterapkan adalah sebagai berikut: *) Bila digit yang dibulatkan kurang dari 5, digit depannya tidak berubah. *) Bila digit yang dibulatkan lebih dari atau sama dengan 5, digit depannya ditambah 1 nilainya. Contoh : dibulatkan menjadi 3.35 3.344 dibulatkan menjadi 3.34 Pengulangan pembulatan tidak disarankan dalam komputasi numerik karena akan memperbesar galat. Sebagai contoh, 3.3446 jika dibulatkan tiga angka dibelakang koma menjadi 3.345 dan jika dibulatkan lagi dua angka dibelakang koma menjadi 3.35. Galat pembulatan pertama sebesar 0.0004, galat pembulatan kedua sebesar 0.0054. Terlihat galat semakin besar sehingga pembulatan hanya boleh dilakkukan sekali. Kesalahan yang timbul akibat pembulatan pada digit ke-N di belakang koma, nilainya selalu £ 10-N / 2. Kesalahan pembulatan bisa terjadi karena komputasi terkait dengan angka-angka yang nilainya berbeda jauh, misalnya : hasil seharusnya 1, tetapi oleh komputer bisa jadi hasilnya ® ¥ karena pembilang ataupun penyebut nilainya kecil sekali sehingga dianggap nol. 

2) Galat Pemotongan Galat pemotongan terjadi ketika suatu rumus komputasi disederhanakan. Biasanya suatu rumus rumit diganti dengan deret Taylor, lalu deret dipotong hanya sampai pada suku tertentu, suku selanjutnya diabaikan. Contoh : Misal x=1.5, nilai eksak cos (1.5) = 0.070737 sedangkan jika dihitung sampai suku ke-4 saja dihasilkan nilai komputasi cos(1.5) = 1 - (1.5)2/2! + (1.5)4/4! - (1.5)6/6! = 0.070187. Dengan demikian terdapat galat pemotongan sebesar 0.000550. 

3) Galat batasan angka Setiap komputer memiliki keterbatasan dalam jangkauan representasi angka, misalnya angka presisi-tunggal (single precision) sekitar 10+37 dan presisi ganda (double precision) sekitar 10+308 . Melampaui batas jangkauan presisi tunggal dalam komputasi fisis dapat terjadi dengan mudah, misalnya dalam komputasi jari-jari atom Bohr, sebagai berikut: Walaupun hasil akhir tidak melampui batas single precision, tetapi pembilang dan penyebut sudah jelas melampaui sehingga komputasi bisa mengalami round-off dan hasil akhirnya tidak tepat. Masalah serupa juga dijumpai ketika dilakukan komputasi pada nilai yang sangat besar, misalnya komputasi faktorial : n! = n(n-1)(n-2)(n-3)…1 ketika n besar, misalnya n=200, aka nilai 200! Dapat melampaui besaran presisi ganda (double precision) . Jalan keluar untuk mengatasi masalah ini adalah dengan mencari rumus pendekatan. Sebagai contoh, faktorial dengan n besar dapat diganti dengan komputasi logaritmik, di mana : log(n!) = log (n) + log (n-1) + log (n-2) + log (n-3) + … Referensi : Suarga, 2007, Fisika Komputasi solusi problema fisika dengan MATLAB, Andi Yogyakarta Sahid, 2005, Pengantar Komputasi numerik, Andi Yogyakarta. BAB III. TURUNAN NUMERIK Pada bab ini akan dijelaskan metode numerik untuk menaksir nilai turunan suatu fungsi. Suatu fungsi f, baik diketahui rumusnya secara eksplisit maupun dalam bentuk data titik-titik yang dilalui kurvanya, dapat dihampiri dengan sebuah fungsi lain yang lebih sederhana. Suatu polinomial p merupakan pilihan yang paling mudah sebagai hampiran suatu fungsi f karena setiap polinomial dapat dengan mudah diturunkan. Turunan polinomial p, yakni p’(x) digunakan sebagai hampiran untuk f’(x) untuk sembarang nilai x. Secara geometris hal ini ekivalen dengan menghampiri gradien garis singgung pada kurva f di x dengan gradien garis singgung pada kurva p di x. Rumus-rumus (metode-metode) turunan numerik bermanfaat di dalam pengembanagn algoritma untuk menyelesaikan masalah nilai awal pada persamaan diferensial biasa dan parsial. 1. Turunan tingkat satu *) Rumus selisih maju dua titik (beda maju) Misalkan f(x) adalah sebuah fungsi riil satu variabel, deret Taylor untuk f(x) disekitar x = x0 adalah: (1) dengan c adalah sebuah bilangan antara x dan x0. Misalkan x = x0+h, dengan h>0, maka persamaan (1) dapat diltulis ulang sebagai: untuk suatu c Î [x0, x0+h] (2) Atau (3) Jika h mengecil, akan memberi taksiran untuk nilai f’(x0). Ini berarti : (4) disebut dengan rumus selisih maju dua titik (beda maju ) dengan galat sebesar O(h). Gambar 1 Perhatikan ruas kanan persamaan (4) adalah gradien tali busur yang melalui titik-titik (x0, f(x0)) dan (x0+h, f(x0+h)) sedangkan f’(x0) merupakan gradien garis singgung di titik (x0, f(x0)). Dengan simulasi dapat ditunjukkan bahwa gradien garis-garis bususr akan semakin menyamai gradien garis singgung jika h semakin kecil dan akhirnya gradien kedua garis sama apabila h ®0. Agar lebih jelas lagi, perhatikan contoh berikut. Carilah turunan fungsi f(x)=ln x di x =1. Penyelesaian : Tabel berikut memberikan nilai-nilai turuan untuk beberapa nilai pilihan h. H ln(1+h) f’(1) 0.1 0.01 0.001 0.0001 0.00001 0.000001 0.0953101798043 0.00995033085317 0.000999500333083 0.0000999950000333 0.0000099999500004 0.0000009999994999 0.9531017980432 0.995033085317 0. 999500333083 0. 999950000333 0. 99999500004 0. 9999994999 Dari tabel terlihat bahwa semakin kecil nilai h yang digunakan (h mendekati nol), hampiran semakin mendekati nilai turunan yang sesungguhnya, yaitu = 1. 2. Rumus Selisih mundur dua titik (beda mundur) Rumus selisih maju menggunakan nilai fungsi di x0 dan x0 +h. Rumus serupa untuk mencari f’(x0) juga dapat diperoleh dengan menggunakan nilai-nilai fungsi di x0 dan x0-h, yakni : (5) disebut rumus selisih mundur dua titik dengan galat sebesar O(h). Visualisi selisih mundur dua titik untuk mendapatkan hampiran turunan fungsi di suatu titik diilustrasikan pada Gambar 2. Gambar2 3. Rumus Selisish pusat dua titik (beda pusat) Dari rumus selisih maju dua titik, diketahui : dan dari rumus selisih mundur dua titik, diketahui : Jika keduanya dijumlahkan diperoleh : Jadi, (6) disebut rumus selisih pusat dua titik dengan galat (O) h2 . Gambar3 Rumus selisih pusat dua titik menggunakan fakta bahwa gradien garis busur yang melalui titik-titik (x0-h, f(x0-h)) dan (x0+h, f(x0+h)) merupakan hampiran gradien garis singgung di x0 sebagaimana ditunjukkan pada Gambar 3. Dengan simulasi dapat ditunjukkan bahwa gradien garis busur semakin mendekati gradien garis singgung jika nilai h semakin kecil menuju nol. Rumus beda pusat memiliki galat yang lebih kecil dibandingkan rumus beda maju dan beda mundur. Ini dapat dibuktikan dengan contoh berikut : Contoh : Misalkan . Hitunglah hampiran f’(1) dengan menggunakan rumus beda pusat dan beda maju untuk nilai-nilai h =0.2 , 0.02 , 0.002, 0.0002. Penyelesaian : Untuk h=0.2 dengan menggunakan rumus beda maju diperoleh: dengan menggunakan rumus beda pusat diperoleh: Diketahui secara analitik , 2.71828182845905. Tabel berikut memuat hasil simulasi pencarian turunan dengan beda maju dan beda pusat untuk berbagai nilai h. h Beda maju Galat beda maju Beda pusat Galat beda pusat 0.2 0.02 0.002 0.0002 3.009175471388 2.745646775263 2.721001923382 2.718553674765 0.290893642928 0.027364946803 0.002720094922 0.000271846306 2.73643998561 2.71846305087 2.71828364064 2.71828184658 0.018158157151 0.000181222412 0.000001812188 0.000000018121 Dari tabel di atas tampak jelas bahwa galat metode beda pusat memberikan hasil yang lebih baik. 

PENCARIAN AKAR-AKAR FUNGSI NON LINIER, f(x) = 0 Banyak masalah-masalah fisika yang melibatkan fungsi/persamaan kontinu yang tidak linier. Persamaan non linier adalah persamaan di mana variabel di dalamnya pada umumnya tidak linier, misalnya dalam bentuk polinomial atau dalam bentuk perkalian atau pembagian beberapa variabel. Pada persamaan non linier dengan satu variabel, tujuan analisis pencarian akar –akar adalah mencari nilai variabel, mencari nilai x agar f(x)=0. Pada sistem persamaan non linier akan dijumpai lebih dari satu variabel yang terkait secara non linier dalam beberapa persamaan, kemudian akan dicari nilai dari masing-masing variabel yang membuat semua persamaan non linier bernilai nol. Terdapat banyak cara untuk menyelesaikan persamaan non linier seperti metode bagi dua (bisection), pisisi palsu (regula false) dan Newton Raphson. Pada bab ini akan dibahas metode Bagi dua dan metode Newton Raphson, karena dua metode ini merupakan metode fundamenal pada kasus pencarian akar-akar fungsi. non linier. *) Metode Bagi dua (bisection) Suatu fungsi kontinu pada interval tertutup [a b] sedemikian hingga f(a) dan f(b) berlawanan tanda, maka terdapat suatu akar persamaan f(x) = 0 pada interval [a b]. Akan dicari akar r Î (a,b) yang memenuhi f(r) = 0. Dari fakta ini muncullah metode pengapitan akar, berusaha mendapatkan interval kecil yang memuat suatu akar. Salah satu metode pengapitan akar adalah metode bagi dua. Metode bagi dua menggunakan konsep : Interval yang memuat akar dibagi menjadi dua subinterval sama panjang, kemudian dipilih subinterval mana yang memuat akar, dan selanjutnya sub interval ini dibagi dua lagi. Demikian seterusnya sampai diperoleh sebuah subinterval yang memuat akar yang dicari dan interval ini memiliki lebar tidak lebih dari nilai tertentu (sangat kecil mendekati nol). ALGORITMA BAGI DUA 1. Pilih dua titik a dan b sehingga f(a)*f(b)<0 2. Tetapkan toleransi error TOL dan maximum langkah iterasi N. 3. for i =1 sampaidengan N d = a+ (b-a)/2 cetak hasil (‘akar = “, d) if (f(p)=0) or ((b-a)/2 TOL then a = d else b=d 4. selesai *) Metode Newton Raphson Metode diperoleh dari ekspansi deret Taylor di sekitar x. Andaikan pada awalnya diberikan nilai x1 sehingga terjadi simpangan h = (x1 - x) dari akar yang dicari, nilai x dapat ditulis sebagai : x =x1-h. Ekspansi deret Taylor di sekitar x memberikan : karena nilai fungsi di titik akar x adalah f(x)=0, maka: atau dengan O(h2) adalah galat komputasi. Karena h = x1-x maka jadi . Jika ditulis dalam bentuk iteratifnya : Disebut dengan metode newton rapson untuk mencari akar-akar persamaan non-linier. Jika dipenuhi (telah konvergen, ) maka jelaslah bahwa akar x telah diperoleh sebesar xi+1. ALGORITMA NEWTON RAPHSON 1. Tetapkan nilai awal x0 2. Tetapkan besar toleransi error TOL dan maximum langkah iterasi N. 3. for i =1: N a. hitung f(x0) dan f’(x0) b. hitung delta = f(x0) / f’(x0) c. hitung x = x0 - delta d. if ( delta < TOL) tulis (‘akar yang di cari =’, x) break end if else x0=x e. if (i >= maximum langkah) tulis (‘gagal mencari akar’) end if Keunggulan metode Newton Raphson dibandingkan metode lain : Hanya dibutuhkan satu nilai coba awal, sedangkan metode bagi dua membutuhkan dua nilai coba yang harus mengapit akar yang dicari. Kelemahan : metode Newton Raphson membutuhkan informasi turunan pertama fungsi f’(x). Hal ini akan menjadi masalah jika fungsi terlalu kompleks sehingga turunan pertama fungsi tersebut sulit dicari. Contoh kasus: Sebuah bola pejal homogen terbuat dari suatu bahan dengan kerapatan r seragam. Bola tersebut terbenam sebagian dalam air setinggi d. Berdasarkan hukum Archimedes : berat bola sebanding dengan gaya angkat Fa : Massa bola : Hukum Archimedes : Volume bola yang terbenam di air setinggi d = Va, dapat dicari dengan kaedah volume benda putar (ingat kalkulus integral), sedemikian sehingga : dimana ρ = ρb ; Nilai d dapat dicari secara analitik dengan konsep pencarian akar-akar fungsi f(d) =0 ; Masalah ini dapat juga diselesaikan secara komputasi . Nilai d dapat dicari dengan konsep pencarian akar-akar fungsi f(d) =0 dengan berbagai metode, diantaranya adalah metode bagi dua. Jika diandaikan ρa = 1; ρb = ρ = 0.638; r =10 cm, d = …? Untuk mendapatkan nilai coba yang tepat, perlu dilihat bentuk fungsi nonlinier dari masalah ini. Hal ini dapat dibantu dengan melukis fungsi nonliniernya yakni : dengan memasukkan ρa = 1; ρb = ρ = 0.638; r =10 cm, diketahui bentuk fungsi matematisnya seperti tampak pada gambar (tampak bahwa nilai d terletak di sekitar 10 < d < 20). *) Berikut ini adalah metode bagi dua untuk menyelesaikan masalah ini ( mendapatkan nilai d) dengan bahasa MATLAB. Nilai coba pengapit akar adalah [a b] = [10 15]. clc;clear; r=10; rho=0.638; % nilai coba [a b] a=10; b=15; % batas toleransi tol=0.00001; % banyaknya langkah N=50; hasil=[]; % kontrol loop for i=1:N d=a+(b-a)/2; % metode bagi dua fd=pi*(d^3-3*d^2*r+4*r^3*rho)/3; % substitusi nilai d ke persamaan nonlinier fa=pi*(a^3-3*a^2*r+4*r^3*rho)/3; % substitusi nilai a(batas kiri) ke persamaan nonlinier hasil=[hasil;i a b d fd]; if (fd==0)||((b-a)