PEMROGRAMAN NUMERIK MENGGUNAKAN BAHASA FORTRAN
Oleh: Ahmad Zakaria
Jurusan Teknik Sipil Fakultas Teknik Universitas Lampung 2005
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
1.
Pendahuluan Fortran merupakan bahasa pemrograman tingkat tinggi yang paling banyak dipergunakan orang untuk pemrograman, terutama untuk pemrograman yang membutuhkan perhitungan numerik yang rumit. Selain Fortran, banyak juga bahasa pemrograman lain yang dikembangkan orang seperti Basic, Pascal, C, Cobol, ada, dan masih banyak lagi. Bahasa-bahasa pemrograman seperti yang disebutkan ini merupakan bahasa pemrograman yang sering disebut sebagai bahasa pemrograman under DOS, ini dikarenakan bahasa pemrograman ini dijalankan lewat DOS. Setelah itu berkembang bahasa pemrograman yang sering disebut sebagai bahasa pemrograman berorientasi objek atau Object Oriented Programming. Bahasa-bahasa pemrograman itu antara lain Visual Compaq Fortran, Visual Basic, Borland Delphi, Visual C++ dan lain-lain. Disamping itu juga berkembang bahasa pemrograman yang berjenis Script seperti java, matlab, dan beberapa bahasa pemrograman WEB seperti, bahasa php dan Java Script. Banyak sekali materi bahasa pemrograman yang menarik untuk dipelajari dan dikembangkan untuk kepentingan didalam bidang Teknik,
akan
tetapi
sepanjang
pengetahuan
penulis,
Fortran
merupakan bahasa yang paling banyak dipergunakan oleh para Scientist dan Engineer untuk aplikasi-aplikasi praktis dalam rangka penyelesaikan permasalahan-permasalahan di dalam bidang teknik. Sehubungan dengan makin banyaknya penggunaan Fortran oleh Scientist dan Engineer, Program Fortran juga mengalami perkembangan dari Fortran 77, Fortran 90 dan Fortran 95. Program Fortran ini juga bisa didapat baik untuk yang menggunakan Operating Sistem Win32 (Windows 31, Windows 98, Windows 2000, Win NT dan Windows Xp)
maupun yang menggunakan operating sistem lain
seperti LINUX ( Mandrake, RedHat, Slackwere, SuSe dll), UNIX, OS2, BeOs yang mana Fortran 77 dikenal sebagai g77 (ji_seventiseven) atau f77 (ef_seventiseven). Selain itu juga Fortran 77 juga mengalami
Ahmad Zakaria
1
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
perkembangan dalam hal tampilan program, yang biasanya disebut dengan Front End yang sebenarnya hanya tampilan muka program, akan tetapi program ini tetap menggunakan Fortran 77 dan Fortran 90 sebagai Compilernya seperti Lahey Fortran, NF Fortran, F Fortran, FTN77, FORT99, Salford Fortran, BC Fortran, PyFort, RATFOR, VFORT, WATCOM, Fortran FORCE dan masih banyak lagi. Ini merupakan salah satu bukti bahwa Compiler Fortran tetap eksis didalam perkembangan ilmu pengetahuan, dalam hal perkembangan berbagai macam bahasa pemrograman. Salah satu program Fortran 77 yang akan dipergunakan pada pelatihan ini adalah Fortran FORCE yang juga menggunakan Fortran 77 sebagai Compilernya.
Bila seseorang ingin menggunakan komputer, orang tersebut tidak harus bisa dan mengetahui benar seluk beluk mengenai komputer. Hal ini dapat dimisalkan sebagaimana halnya bila seseorang ingin menggunakan atau mengendarai sebuah mobil, apa seseorang harus mempunyai pengetahuan yang lengkap mengenai mobil, jika hanya untuk bisa menjalankan atau mengendarainya?
Kita sebagai pemakai, untuk dapat menjalankan sebuah program, kita tidak harus mengetahui benar seluk beluk mengenai komputer, walaupun lebih banyak pengetahuan dan, berpengalaman dan lebih mengenal seluk beluk komputer adalah lebih baik.
Sebagai pengguna yang ingin membuat program komputer hanya perlu mengenal pengetahuan pemrograman yang diminatinya dalam hal ini kita akan belajar bahasa pemrograman Fortran. Jadi untuk dapat membuat dan bisa menjalankan program Fortran tentu kita
perlu mengetahui bahasa
(Sintax) sebagai intruksi yang
dimengerti oleh bahasa pemrograman Fortran. Biasanya untuk dapat membuat sebuah program yang baik, kita perlu membuat atau
Ahmad Zakaria
2
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
melengkapinya dengan sebuah Flow Chart, yang menggambarkan jalan fikiran algoritma program.
Untuk dapat mempelajari bahasa pemrograman Fortran kita perlu mengetahui aturan-aturan penting dan Sintax-Sintax dasar yang selalu dipergunakan didalam pembuatan sebuah program Fortran. Dengan berbekal mengetahui Sintax-Sintax Dasar tersebut kita sudah dapat membuat sebuah program yang besar. Program Fortran ditulis dalam suatu file dengan ekstensi *.f , *.ftn, atau *.for. Dalam menulis program Fortran pada suatu file dengan berekstensi seperti tersebut di atas ( Fortran 77) harus mengikuti aturan-aturan penulisan sebagai berikut, 1. Pernyataan untuk program Fortran yang bisa dimengerti oleh program apabila ditulis dalam selang kolom 7 sampai dengan kolom 72. 2. Kolom ke 6 disebut sebagai kolom sambungan dan dipersiapkan hanya untuk keperluan tersebut. Apabila pernyataan Fortran terlalu panjang dan akan melebihi kolom 72 maka pernyataannya dapat dilanjutkan di bawahnya dengan menambahkan satu karakter pada kolom ke 6. 3. Kolom 1 s/d kolom 5 dapat dipergunakan untuk untuk pengenal atau acuan. 4. Isi kolom 73 s/d 80 diabaikan komputer, dan kolom ini dapat
dipergunakan
sebagai
identifikasi
atau
untuk
keperluan lain.
Ahmad Zakaria
3
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Untuk aturan penulisan Fortran tersebut dapat dilihat pada Gambar berikut, 1
56 7 Label pernyataan
Ahmad Zakaria
Kode sambungan
Pernyataan fortran
72
80
identitas
4
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
2.
Sintax Dasar Program Fortran 2.1.
Perhitungan Aritmatik Operasi perhitungan yang dilakukan oleh komputer
sebenarnya hanya berupa operasi aritmatik seperti penjumlahan (+), pengurangan (-), perkalian (*), dan pembagian(/). Selain itu juga dapat dilakukan operasi perpangkatan (**), logaritma, perhitungan sudut, sinus dan kosinus, serta perhitungan bilangan imaginer yang dilambangkan dengan IMAG. Untuk perhitungan aritmatik biasa, semua bahasa pemrograman tingkat tinggi lain juga memiliki sintax yang hampir sama jumlahnya, akan tetapi untuk perhitungan bilangan imaginer sepanjang pengetahuan penulis hanya bahasa pemrogram fortran yang bisa melakukannya. Operasi Aritmatik dalam bentuk aljabar dan Fortran dapat dilihat pada Tabel berikut, Operasi
Bentuk Aljabar
FORTRAN
Penjumlahan
A+B
A+B
Pengurangan
A–B
A-B
Perkalian
A×B
A*B
Pembagian
A
A/B
Perpangkatan
A2
A**2
Nama konstanta dan variabel yang dimulai huruf I, J, K, L, M, N menyimpan nilai dalam bentuk Integer, dan yang dimulai dengan huruf selain yang disebutkan, menyimpan nilai dalam bentuk Real.
2.2.
Masukkan dan Keluaran(Input/Output) Biasanya suatu program untuk melakukan perhitungan-
perhitungan membutuhkan data masukan atau data input yang berasal dari layar monitor atau file input, dan mengeluarkan hasil perhitungannya berupa data keluaran atau data Output
Ahmad Zakaria
5
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
didalam file Output atau pada layar monitor. Ini untuk membaca data dari suatu file atau mengeluarkan data ke dalam suatu file. Pernyataan Fortran untuk membuka file dapat dilakukan dengan sintax sebagai berikut,
OPEN(unit = ekspresi integer, FILE = nama file, STATUS = literal)
Untuk literal dapat dipergunakan ‘OLD’ ( file lama dan sudah ada) , ‘NEW’ (membuat file baru dan tidak dapat di update) dan ‘UNKNOWN’ (membuat file baru dan dapat di update). Untuk membaca data dari suatu file dapat dipergunakan perintah READ. Akan tetapi bila data yang dibaca pada posisi kolom tertentu maka dapat dipergunakan perintah atau sintax berformat. Aturan penggunaan perintah READ adalah sebagai berikut,
READ (nomor unit,nomor acuan berformat)daftar variabel
Untuk menulis data ke dalam suatu berkas file dapat dilakukan dengan melakukan perintah sbb,
WRITE(nomor unit,nomor acuan berformat)daftar variabel
Bentuk umum penggunaan pernyataan berformat adalah sebagai berikut,
k
Ahmad Zakaria
FORMAT(daftar rincian)
6
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Secara keseluruhan penggunaan sintax OPEN, READ, WRITE dan FORMAT dapat dilihat pada contoh program berikut, Contoh Pernyataan FORTRAN OPEN(UNIT=1,FILE=’input.inp’,STATUS=’OLD’) OPEN(UNIT=2,FILE=’output.out’,STATUS=’UNKNOWN’) READ(1,*)A,B C = A + B D = A*B WRITE(2,*)’hasilnya =’ WRITE(2,10)A,B,C,D 10 FORMAT(F4.2,2X,F4.1,2X,F6.2,2X,F6.4) stop end
Contoh untuk Open file Input dan File Output adalah sebagai berikut,
Contoh File input.inp
2
3
Contoh File output.out hasilnya = 2.00 3.0
5.00
6.0000
Dari Contoh program sederhana di atas dapat dilihat bagaimana penggunaan sintax READ, WRITE, FORMAT dan penggunaan OPEN file Input dan OPEN file Output. Dari contoh di atas juga dapat dipelajari pencirian X, I, dan F yang
Ahmad Zakaria
7
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
banyak dipergunakan untuk pernyataan berformat. Pencirian X dipergunakan apabila dalam pembacaan atau penulisan data akan melompati beberapa posisi pada baris data bentuk umumnya adalah nX. Pencirian I dipergunakan apabila kita ingin membaca suatu nilai ke dalam suatu bilangan integer. Bentuk umum dari pencirian I adalah Iw. Pencirian F dapat dipergunakan untuk membaca atau menuliskan nilai suatu variabel real ke dalam atau dari suatu berkas. Bentuk umum dari pencirian F adalah Fw.d. Dimana w menunjukkan jumlah posisi total, dan d menandakan jumlah desimal.
2.3.
Struktur Kontrol Struktur kontrol yang paling banyak dipakai dalam
pembuatan sebuah program Fortran adalah IF Logika. Ekspresi logika menyatakan suatu kondisi itu benar atau salah, diterima atau tidak. Ekspresi logika dibentuk dengan menggunakan salah satu dari operator relasional berikut, Operasi relasional
Tafsiran Aljabar
.EQ.
Sama dengan
.NE.
Tidak sama dengan
.LT.
Lebih kecil daripada
.LE.
Lebih kecil daripada atau sama dengan
.GT.
Lebih besar dari pada
.GE.
Lebih besar dari pada atau sama dengan
Untuk melengkapi struktur logika, bentuk pernyataan untuk penggunaan operator Relasional dapat dilihat pada bentuk berikut,
Ahmad Zakaria
8
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
IF (ekspresi logika) pernyataan terlaksana
IF (ekspresi logika) THEN ……. Pernyataan …….. ENDIF
IF (ekspresi logika) THEN Pernyataan IF (ekspresi logika) THEN ……. Pernyataan …….. ENDIF Pernyataan ENDIF
Contoh penggunaan struktur kontrol IF dapat dilihat pada contoh program berikut,
Contoh penggunaan IF OPEN(UNIT=2,FILE=’output1.out’,STATUS=’unknown’) A = 2 B = 3 IF(A.GE.B)THEN C = A + B ENDIF IF(A.LT.B)THEN C = A * B ENDIF WRITE(2,*)’hasilnya =’ WRITE(2,10)A,B,C 10 FORMAT(F4.2,2X,F4.1,2X,F6.2) stop end
Ahmad Zakaria
9
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Contoh File output1.out untuk penggunaan IF hasilnya = 2.00 3.0
2.4.
6.00
Looping Berlapis Lop DO dapat dilakukan berlapis, lop yang satu dapat
diletakkan di dalam lop yang lainnya, akan tetapi antara satu lop dengan yang lain tidak boleh tumpang tindih. Penggunaan lop secara umum dapat ditulis sbb,
DO I=m,n DO J = mm,nn ........................ pernyataan ....................... END DO END DO
Didalam penggunaan looping DO, m, mm, n, nn merupakan ekspresi integer. m dan mm merupakan variabel lop awal, n dan nn merupakan variabel lop akhir.
Penggunaan looping DO dapat dilihat pada contoh program berikut,
Ahmad Zakaria
10
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Contoh penggunaan Looping DO OPEN(UNIT=2,FILE=’output2.out’,STATUS=’unknown’) DO I=1,2 DO J=1,3 WRITE(2,10)I,J 10 FORMAT(2X,I4,2X,I6) END DO END DO stop end
Contoh File output2.out keluaran Looping DO 00---100-----1 00---100-----2 00---100-----3 00---200-----1 00---200-----2 00---200-----3
Dengan menggunakan looping DO, kita dapat melakukan perhitungan secara berlapis. Perhitungan berlapis diperlukan antara lain untuk pemodelan numerik, misalnya pemodelan numerik 1 dimensi (1-D), 2 dimensi (2-D) dan 3 dimensi (3-D).
2.5.
Jajaran (array) Untuk melakukan perhitungan perhitungan yang besar,
biasanya selama melakukan perhitungan membutuhkan tempat penyimpanan hasil perhitungan kedalam suatu variabel. Pernyataan yang dipergunakan untuk melakukan penyimpanan tersebut adalah dengan menggunakan perintah sebagai berikut, DIMENSION array1(ukuran), array 2 (ukuran),..
Ahmad Zakaria
11
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Contoh penggunaan DIMENSION dapat dilihat pada program berikut,
Contoh program untuk penggunaan DIMENSION
DIMENSION IA(2,3),JA(2,3) OPEN(UNIT=2,FILE=’output3.out’,STATUS=’unknown’) DO I=1,2 DO J=1,3 IA(I,J) = I+J JA(I,J) = I*J END DO END DO DO I=1,2 DO J=1,3 WRITE(2,10)IA(I,J),JA(I,J) 10 FORMAT(2X,I4,2X,I6) END DO END DO stop end
Contoh File output3.out keluaran penggunaan DIMENSION 00---200-----1 00---300-----2 00---400-----3 00---300-----2 00---400-----4 00---500-----6
Dengan menggunakan pernyataan DIMENSION, perhitungan yang dilakukan dengan looping DO dapat disimpan ke dalam suatu
variabel,
sehingga
dalam
melakukan
perhitungan
aritmatik menjadi lebih cepat.
Ahmad Zakaria
12
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
2.6.
Pernyataan GOTO Pernyataan GOTO termasuk struktur looping. Dengan
menggunakan struktur GOTO looping dapat dilakukan dengan bebas dibandingkan dengan looping dengan menggunakan struktur DO…END DO. Bentuk umum dari penggunaan pernyataan GOTO adalah sebagai berikut,
n
pernyataan ……………… GOTO n
Contoh penggunaan struktur GOTO dapat dilihat dari program berikut, Contoh program untuk penggunaan GOTO A = 0 10
A = A + 1 write(*,*)A IF(A.LE.5)GOTO 10 stop end
Contoh hasil keluaran program di layar monitor untuk penggunaan GOTO 1. 2. 3. 4. 5. 6.
Ahmad Zakaria
13
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Program di atas dimaksudkan untuk melakukan perhitungan dari 1 sampai dengan 6 dengan menggunakan pernyataan GOTO.
2.7.
Sub Program Subprogram
yang
sering
dipergunakan
didalam
perhitungan aritmatik dalam suatu program besar adalah SUBROUTINE. Penggunaan SUBROUTINE secara umum adalah sbb,
…………… CALL Nama(argumen) ……………
MAIN PROGRAM
STOP END SUBROUTINE Nama(argumen) ……….. RETURN END
SUBPROGRAM
Contoh penggunaan subprogram SUBROUTINE dapat dilihat pada contoh program berikut,
Contoh program untuk penggunaan SUBROUTINE A=2 CALL Func(A,F) write(*,*)A,F stop end
SUBROUTINE Func(X,F) F = X*X return end
Ahmad Zakaria
14
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Dari contoh di atas terlihat bahwa untuk memanggil subroutine Func(A,F) yang melakukan perintah F = X × X dilakukan dengan perintah CALL. Nilai A=2 yang dimasukkan ke dalam Func merupakan variabel X. Selanjutnya hasil yang didapat berupa nilai variabel F.
2.8.
Pernyataan Double Precision Pernyataan Double Precision dipergunakan bila didalam
perhitungan
aritmatik
dari
suatu
program
kita
ingin
mendapatkan hasil dengan ketelitian yang lebih baik. Dengan mendeklarasikan variabel sebagai variabel double precision atau presisi ganda maka variabel tersebut mempunyai akurasi perhitungan yang lebih baik. Bentuk umum dari penggunaan DOUBLE PRECISION adalah sebagai berikut,
DOUBLE PRECISION nama nama variabel
Penggunaan pernyataan DOUBLE PRECISION dapat dilihat pada contoh program berikut ini.
Contoh program yang menggunakan DOUBLE PRESISSION
20
Ahmad Zakaria
DOUBLE PRECISION A,C A =1.D+00/3.D+00 B = 1./3. C = A - B write(*,20)A,B,C FORMAT(2X,F25.20,2X,F25.20) stop end
15
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Hasil keluaran dari program ini adalah,
0.33333333333333331000 -0.00000000993410748107
0.33333334326744080000
Dari hasil keluaran ini terlihat bahwa perhitungan aritmatik yang
menggunakan
double
precision
dan
yang
tidak
menggunakan double precision mempunyai selisih yang cukup besar yaitu lebih kurang 10-9. Untuk program yang melakukan perhitungan numerik, selisih ini sangat berarti untuk mendapatkan hasil yang lebih akurat.
Ahmad Zakaria
16
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
2.9.
Fungsi Intrinsik Beberapa Fungsi Intrinsik yang sering dipergunakan
didalam penulisan program Fortran adalah sebagai berikut, Nama Fungsi
Jenis Fungsi
Definisi
Real
X
Double Precision
DX
Real
X
Double Precision
DX
Real
eX
DEXP(X)
Double Precision
e DX
LOG(X)
Real
ln X
LOG10(X)
Real
Log10X
REAL(GX)
Real
Ubah GX ke nilai real
FLOAT(IX)
Real
Ubah IX ke nilai real
SIN(X)
Real
Sudut dalam radian
COS(X)
Real
Sudut dalam radian
TAN(X)
Real
Sudut dalam radian
ASIN(X)
Real
Arc. Sin
ACOS(X)
Real
Arc. Cos
ATAN(X)
Real
Arc. Tan
SQRT(X) DSQRT(X) ABS(X) DABS(X) EXP(X)
Selain dari fungsi-fungsi di atas masih banyak lagi fungsi-fungsi intrinsik yang tidak dipresentasikan di tutorial ini dapt didapatkan dari buku pedoman pemrograman fortran.
Dengan mempelajari dan menguasai sintax dasar pemrograman Fortran di atas, dan dapat menggunakan pendekatan-pendekatan untuk pemrograman numerik dengan baik, kita dapat membuat program numerik.
Ahmad Zakaria
17
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
3.
Kesalahan dan Pendekatan Numerik Metode numerik merupakan suatu teknik atau cara untuk menganalisa dan menyelesaikan masalah – masalah di dalam bidang rekayasa teknik dan sain dengan menggunakan operasi perhitungan matematik. Masalah-masalah tersebut biasanya diidealkan dan diformulasikan secara matematis. Operasi perhitungan matematik di dalam metode matrik ini biasanya dilakukan secara berulang ulang. Bila dilakukan secara manual operasi perhitungan ini akan membutuhkan waktu yang sangat lama. Oleh karena itu, untuk operasi perhitungan metode numerik diperlukan bantuan komputer. Dengan bantuan
komputer
operasi
perhitungan
yang
dilakukan
berulang-ulang dapat diselesaikan dengan sangat cepat. Metode numerik sudah lama sejak lama dikembangkan orang. Akan tetapi pada awal perkembangannya aplikasi metode tersebut dalam menyelesaikan permasalahan masih sangatlah jarang. Hal ini disebabkan karena alat bantu operasi perhitungan matematik, yaitu komputer masih sangatlah kurang. Setelah perkembangan teknologi komputer semakin pesat dan pemakaian komputer sudah semakin meluas, metode numerik ini menjadi metode yang handal untuk menganalisa dan menyelesaikan masalah-masalah yang terjadi dalam segala bidang ilmu pengetahuan. Masalah-masalah yang dapat diselesaikan dengan metode numerik tersebut tidak hanya masalah sederhana yang masih dapat diselesaikan secara analitis, akan tetapi juga masalah-masalah kompleks yang tidak dapat lagi diselesaikan secara analitis. Pada awalnya metode numerik banyak diperkenalkan oleh para ahli matematik. Akan tetapi selanjutnya dalam perkembangan metode numerik juga banyak konstribusi dari
Ahmad Zakaria
18
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
ahli rekayasa sipil, mesin, elektro, ekonomi, sosial dan bidang ilmu lainnya. Didalam metode numerik, permasalahan-permasalahan yang diformulasikan secara matematis merupakan suatu pendekatan. Akurasi perhitungan dari permasalahan yang didekati secara matematis sangat tergantung pada asumsiasumsi yang diberikan. Misalnya, untuk aliran air sungai satu dimensi, profil kecepatan setiap titik hitung diasumsikan sama. Semakin akurat data yang dipergunakan untuk perhitungan operasi matematik dan semakin sedikit asumsi yang diberikan maka pendekatan akan memberikan hasil yang lebih baik. Ukuran akurasi dari pendekatan ini lebih dikenal dengan nama error atau kesalahan.
3.1
Kesalahan (error) Hasil operasi perhitungan matematik dari persamaan
matematik (yang merupakan pemodelan dari permasalahan) merupakan suatu perkiraan yang mendekati nilai eksak, apabila persamaan tersebut dapat diselesaikan secara analitis.
Tiga macam kesalahan dalam operasi perhitungan matematik adalah sebagai berikut,
1.
kesalahan bawaan
2.
kesalahan pembulatan
3.
kesalahan pemotongan
Kesalahan bawaan adalah suatu kesalahan yang terjadi karena kesalahan input data yang dipergunakan untuk perhitungan. Kesalahan ini terjadi karena kurang telitinya pencatatan data
Ahmad Zakaria
19
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
dari lapangan maupun pencatatan dari data primer dan sekunder.
Kesalahan pembulatan terjadi karena pemotongan desimal dari bilangan yang diperhitungkan, baik untuk input data maupun pada waktu operasi perhitungan matematik. Contoh dari kesalahan pembulatan ini adalah sebagai berikut:
2,71828183
dibulatkan menjadi 2,71
3,14159265
dibulatkan menjadi 3,14
Kesalahan
pemotongan
terjadi
karena
didalam
operasi
matematik tidak dilakukan prosedur perhitungan matematik yang sesuai dengan pemodelannya. Misalnya suatu persamaan tak hingga dimodelkan menjadi persamaan berhingga seperti pendekatan untuk metode beda hingga yang diturunkan dari deret Taylor.
3.2
Kesalahan Absolut dan kesalahan Relatif
Kesalahan Absolut dapat dipresentasikan sebagai berikut,
Ee = p − p *
dimana: Ee p p*
= = =
kesalahan absolut nilai eksak pendekatan nilai eksak
Kesalahan relatif dapat ( ε exact ) dipresentasikan sebagai berikut,
Ahmad Zakaria
20
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
εe =
Ee .100 % p
Jika nilai eksak tidak diketahui, perhitungan kesalahan relatif ( ε approximate ) juga dapat ditulis sebagai berikut,
εa =
Ea .100 % p*
perhitungan kesalahan relatif juga dapat dipresentasikan,
εa =
3.3
p*n +1 − p*n p*n
.100 %
Deret Taylor Pendekatan fungsi f ( x + ∆x ) dan fungsi f ( x − ∆x ) dengan
menggunakan deret Taylor dapat dipresentasikan sebagai berikut, Pendekatan untuk f ( x + ∆x ) ,
f ( x + ∆x ) = f (x ) +
∂f ∆x ∂ 2 f (∆x ) ∂ 3 f (∆x ) ∂ n f (∆x ) . + 2. + 3. +K+ n . ∂x 1! ∂x 2! ∂x 3! n! ∂x 2
3
n
Pendekatan untuk f (x − ∆x ) ,
∂f ∆x ∂ f ( x − ∆x ) = f ( x ) − . + ∂x 1!
Ahmad Zakaria
2
f
∂x 2
2 ( ∆x ) .
∂ 3 f (∆x ) ∂ n f (∆x ) − 3. +K+ n . 2! 3! n! ∂x ∂x 3
n
21
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
1.
Pendekatan untuk satu suku pertama (orde nol) dapat
ditulis sebagai, f ( x + ∆x ) ≈ f ( x ) + Ο ( x )
2.
Pendekatan untuk dua suku pertama (orde satu) dapat
ditulis sebagai,
f ( x + ∆x ) ≈ f ( x ) +
∂f ∆x . + Ο x2 ∂x 1!
( )
dari pendekatan ini dapat diturunkan, f ( x + ∆x ) − f ( x ) ∂f + Ο x2 ≈ ∆x ∂x
( )
3.
Pendekatan untuk tiga suku pertama (orde dua) dapat
ditulis sebagai,
f ( x + ∆x ) ≈ f ( x ) +
∂f ∆x ∂ 2 f (∆x ) . + . + Ο x3 ∂x 1! ∂x 2 2 ! 2
( )
dari pendekatan di atas dapat diturunkan, ⎧ f (x + ∆x ) − f ( x ) ∂f 1 ⎫ ∂2 f ≈ 2.⎨ − . ⎬ + Ο x3 2 2 ∂x ∆x ⎭ ∂x (∆x ) ⎩
( )
Berdasarkan fungsi f ( x + ∆x ) dan fungsi f ( x − ∆x ) , turunan
⎛ ∂2 f kedua ⎜⎜ 2 ⎝ ∂x
⎞ ⎟⎟ dari fungsi f ( x ) dapat dapat disusun sebagai ⎠
berikut,
Ahmad Zakaria
22
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
f ( x + ∆x ) ≈ f (x ) +
∂f ∆x ∂ 2 f (∆x ) ∂ 3 f (∆x ) ∂ n f (∆x ) + 3. +K+ n . . + 2. ∂x 1! ∂x 2! 3! n! ∂x ∂x
f ( x − ∆x ) ≈ f (x ) −
∂f ∆x ∂ 2 f (∆x ) ∂ 3 f (∆x ) ∂ n f (∆x ) − 3. +K+ n . . + 2. ∂x 1! ∂x 2! 3! n! ∂x ∂x
2
3
2
3
n
n
+
f ( x + ∆x ) + f ( x − ∆x ) ≈ 2. f ( x ) +
∂2 f 2 .(∆x ) + Ο x 3 ∂x 2
( )
Kesalahan pendekatan dari persamaan di atas dapat dijabarkan sebagai berikut, f ( x + ∆ x ) − 2 . f ( x ) + f ( x − ∆x ) ∂2 f + Ο x3 ≈ 2 2 ∂x (∆x )
( )
Nilai eksak
Nilai pendekatan
Error
Dari persamaan di atas dapat dibuat sebagai berikut, ∂ 2 f 1. f ( x + ∆x ) − 2. f (x ) + 1. f ( x − ∆x ) ≈ ∂x 2 (∆x )2
lebih sederhana persamaan ini dapat disusun sebagai berikut,
∂ 2 f 1. f i +1 − 2. f i + 1. f i −1 ≈ ∂x 2 (∆x )2
dimana: 1, 2, dan 1 merupakan koefisien pemberat beda hingga Persamaan ini merupakan persamaan pendekatan turunan kedua fungsi f ( x ) dengan derajad kesalahan atau akurasi orde dua. Persamaan di atas dikenal sebagai persamaan pendekatan
Ahmad Zakaria
23
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
metode
beda
hingga
(finite-difference)
yang
merupakan
pendekatan beda hingga terpusat (central differences). Dengan cara yang sama dapat dibuat tabel pendekatan metode beda hingga untuk berbagai turunan dan akurasi sebagai berikut: Tabel 1. koefisien pemberat pendekatan beda hingga untuk akurasi orde 2
f i−2 ∂f ∂x 2 (∆x )2 ∂ 2f ∂x 3 3 ∂ f 2.(∆x ) ∂x 3 4 (∆x )4 ∂ 4f ∂x
f i −1
fi
f i +1
-1
0
1
1
-2
1
-1
2
0
-2
1
1
-4
6
-4
1
2.∆x.
f i+2
central differences Ο(∆x )
2
Tabel 2. koefisien pemberat pendekatan beda hingga untuk akurasi orde 4 f i −3
∂f ∂x 2 2 ∂ f 12.(∆x ) ∂x 2 3 3 ∂ f 8.(∆x ) ∂x 3 4 4 ∂ f 6.(∆x ) ∂x 4
f i−2
f i −1
fi
f i +1
f i +2
1
-8
0
-8
1
-1
16
-30
16
-1
1
-8
13
0
-13
8
-1
-1
12
-39
56
-39
12
-1
12.∆x.
f i +3
central differences Ο(∆x )
4
Ahmad Zakaria
24
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Problem Set: 1.
Dari Tabel 1 diketahui bahwa pendekatan beda hingga
untuk turunan orde tiga adalah sebagai berikut,
2.(∆x ) . 3
∂3 f = −1. f i −2 + 2. f i −1 + 0. f − 2. f i +1 + 1. f i + 2 ∂x 3
∂ 3 f − 1. f i − 2 + 2. f i −1 + 0. f − 2. f i +1 + 1. f i + 2 = 3 ∂x 3 2.(∆x )
∂ 3 f − 12 . f i −2 + 1. f i −1 − 1. f i +1 + 12 . f i + 2 = ∂x 3 (∆x )3 Diminta: Buktikan persamaan tersebut di atas!
Jawab: Dari deret Taylor dapat disusun persamaan sebagai berikut,
Ahmad Zakaria
f (x + 2∆x) = f (x) +
∂f 2∆x ∂2 f (2∆x) ∂3 f (2∆x) ∂n f (2∆x) + 2. + 3. +K+ n . . ∂x 1! ∂x 2! 3! n! ∂x ∂x
f (x + ∆x) = f (x) +
∂f ∆x ∂2 f (∆x) ∂3 f (∆x) ∂n f (∆x) + 3. +K+ n . . + 2. ∂x 1! ∂x 2! ∂x 3! ∂x n!
2
3
2
3
n
(1)
n
(2)
f (x − ∆x) = f (x) −
∂f ∆x ∂2 f (∆x) ∂3 f (∆x) ∂n f (∆x) − 3. +K+ n . . + 2. ∂x 1! ∂x 2! ∂x 3! n! ∂x
f (x − 2∆x) = f (x) −
∂f 2∆x ∂2 f (2∆x) ∂3 f (2∆x) ∂n f (2∆x) + 2. − 3. +K+ n . . ∂x 1! ∂x 2! 3! n! ∂x ∂x
2
3
2
3
n
(3)
n
(4)
25
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Substitusi persamaan (2) dan (3) didapat persamaan (A) berikut,
(2) – (3)
∂f ∂ 3 f (∆x ) f ( x + ∆x ) − f ( x − ∆x ) ≈ 2∆x . + 2 3 . ∂x 3! ∂x
3
(A)
Substitusi persamaan (1) dan persamaan (4) didapat persamaan (B),
(1) – (4) ∂f ∂ 3 f (2∆x ) f (x + 2∆x ) − f ( x − 2∆x ) ≈ 4∆x . + 2 3 . ∂x 3! ∂x
3
(B)
Substitusi persamaan (A) dan (B) didapat persamaan berikut,
2(A ) − (B) ∂ 3 f (∆x ) . ∂x 3 3 !
3
2 f ( x + ∆x ) − 2 f ( x − ∆x ) − f (x + 2∆x ) + f ( x − 2∆x ) ≈ (4 − 16)
2 f ( x + ∆x ) − 2 f ( x − ∆x ) − f ( x + 2∆x ) + f (x − 2∆x ) ≈ −2(∆x )
3
∂3 f . ∂x 3
2(∆x )
∂3 f ≈ − f ( x − 2∆x ). + 2 f (x − ∆x ) − 2 f ( x + ∆x ) + f (x + 2∆x ) ∂x 3
2(∆x )
∂3 f ≈ − f i −2 + 2 f i −1 − 2 f i +1 + f i + 2 ∂x 3
3
3
Ahmad Zakaria
26
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
∂ 3 f − f i −2 + 2 f i −1 − 2 f i +1 + f i + 2 ≈ 3 ∂x 3 2(∆x )
∂ 3 f − 12 . f i −2 + 1. f i −1 − 1. f i +1 + 12 . f i + 2 ≈ ∂x 3 (∆x )3
∴Terbukti bahwa pendekatan beda hingga untuk turunan ⎛ ∂3 f ketiga ⎜⎜ 3 ⎝ ∂x
⎞ ⎟⎟ adalah sebagai berikut, ⎠
∂ 3 f − 12 . f i −2 + 1. f i −1 − 1. f i +1 + 12 . f i + 2 ≈ ∂x 3 (∆x )3
2.
Dari Tabel 2 diketahui bahwa pendekatan beda hingga
untuk turunan orde dua dengan akurasi orde empat adalah sebagai berikut,
12.(∆x )
2
∂2 f ≈ −1 f i −2 + 16 f i −1 − 30 f i + 16 f i +1 − 1 f i + 2 ∂x 2
∂ 2 f − 1 f i − 2 + 16 f i −1 − 30 f i + 16 f i +1 − 1 f i + 2 ≈ 2 ∂x 2 12.(∆x )
Diminta: Buktikan persamaan tersebut di atas! Jawab: Dari deret Taylor dapat disusun persamaan sebagai berikut, ∂f 2∆x ∂2 f (2∆x) ∂3 f (2∆x) ∂4 f (2∆x) ∂n f (2∆x) + 3. + 4. +K+ n . f (x + 2∆x) = f (x) + . + 2 . ∂x 1! ∂x 2! ∂x 3! ∂x 4! n! ∂x 2
Ahmad Zakaria
3
4
n
(1)
27
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
∂f ∆x ∂2 f (∆x) ∂3 f (∆x) ∂4 f (∆x) ∂n f (∆x) f (x + ∆x) = f (x) + . + 2 . + 3. + 4. +K+ n . ∂x 1! ∂x 2! ∂x 3! ∂x 4! ∂x n! 2
3
n
4
(2)
∂f ∆x ∂2 f (∆x) ∂3 f (∆x) ∂4 f (∆x) ∂n f (∆x) f (x − ∆x) = f (x) − . + 2 . − 3. + 4. +K+ n . ∂x 1! ∂x 2! ∂x 3! ∂x 4! n! ∂x
(3)
∂f 2∆x ∂2 f (2∆x) ∂3 f (2∆x) ∂4 f (2∆x) ∂n f (2∆x) − 3. + 4. +K+ n . f (x −2∆x) = f (x) − . + 2 . ∂x 1! ∂x 2! ∂x 3! ∂x 4! n! ∂x
(4)
2
3
2
n
4
3
4
n
Substitusikan persamaan (2) dan (3),
(2) + (3) ∂ 2 f (∆x) ∂ 4 f (∆x) f ( x + ∆x) + f (x − ∆x) ≈ 2. f ( x) + 2. 2 . +2 4 . 2! 4! ∂x ∂x 2
4
(A)
Substitusikan persamaan (1) dan (4),
(1) + (4) f (x + 2∆x) + f (x −2∆x) ≈ 2. f (x) + 2.
∂2 f (2∆x) ∂4 f (2∆x) . 2 . + ∂x2 2! ∂x4 4! 2
4
(B)
Substitusi persamaan (A) dan (B),
16.(A ) − (B) 16 f ( x + ∆x ) + 16 f (x − ∆x ) − f (x + 2∆x ) − f (x − 2∆x ) ≈
(16.2 − 2) f (x ) + (16 − 4). ∂
2
f
∂x 2
.(∆x ) + (16 − 16 ).2 2
∂ 4 f (∆x ) . ∂x 4 4 !
4
∂2 f 2 16 f ( x + ∆x ) + 16 f ( x − ∆x ) − f (x + 2∆x ) − f ( x − 2∆x ) ≈ 30 f ( x ) + 12 2 .(∆x ) ∂x
Ahmad Zakaria
28
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
12
∂2 f 2 .(∆x ) ≈ − f (x − 2∆x ) + 16 f ( x − ∆x ) − 30 f ( x ) + 16 f ( x + ∆x ) − f (x + 2∆x ) 2 ∂x
∂ 2 f − f ( x − 2∆x ) + 16 f (x − ∆x ) − 30 f (x ) + 16 f (x + ∆x ) − f ( x + 2∆x ) ≈ 2 ∂x 2 12.(∆x )
∴Terbukti bahwa pendekatan beda hingga untuk turunan ⎛ ∂2 f kedua ⎜⎜ 2 ⎝ ∂x
⎞ ⎟⎟ untuk akurasi orde empat adalah sebagai berikut, ⎠
∂ 2 f − f i − 2 + 16 f i −1 − 30 f i + 16 f i +1 − f i + 2 ≈ 2 ∂x 2 12.(∆x )
Ahmad Zakaria
29
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
4.
Pemodelan Numerik Pemodelan Numerik dalam bidang Teknik biasanya merupakan pemodelan dari fenomena alam atau kejadian alam yang diformulasikan ke dalam bentuk persamaan Differensial. Sehingga pendekatan yang dilakukan merupakan pendekatan persamaan differensial, yang dasumsikan sebagai persamaan yang menggambarkan kejadian atau fenomena yang mau disimulasikan. Bentuk persamaan diferensial yang didekati biasanya merupakan persamaan diferensial parsial. Secara umum bentuk persamaan difernsial parsial orde 2 dan 2 dimensi dapat digambarkan sebagai berikut,
a.
∂ 2η ∂ 2η ∂ 2η ∂η ∂η + + + d. + e. b . c + f .η + g = 0 2 2 ∂x.∂y ∂x ∂y ∂x ∂y
Dimana: a, b, c, d, e, f, dan g merupakan fungsi dari variabel x, y dan variabel η. Secara umum persamaan diferensial parsial dapat dibedakan dalam 3 tipe persamaan sbb,
4.1.
1.
Persamaan Ellips,
2.
Persamaan Parabola, apabila b2 – 4ac = 0
3.
Persamaan Hiperbola, apabila b2 – 4ac > 0
apabila b2 – 4ac < 0
Persamaan Ellips Persamaan Poisson dan persamaan Laplace merupakan
persmaaan Ellips. Untuk persamaan 2 dimensinya dapat digambarkan sebagai berikut, Persamaan Poisson: ∂ 2η ∂ 2η + +g =0 ∂x 2 ∂y 2
Ahmad Zakaria
30
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
Persamaan Laplace:
∂ 2η ∂ 2η + =0 ∂x 2 ∂y 2
Persamaan Ellips biasanya dipergunakan untuk mensimulasikan masalah-masalah yang berhubungan dengan keseimbangan yang bersifat steady karena di dalam persamaan ini tidak ada variabel waktunya, seperti aliran air tanah, defleksi plat karena adanya pembebanan.
4.2.
Persamaan Parabola Persamaan parabola
mensimulasikan
biasanya
perambatan
panas
dipergunakan untuk dan
difusi
polutan.
Persamaan Parabola 2 dimensi (2-D) ini dapat ditulis sebagai berikut,
⎧ ∂ 2T ∂ 2T ⎫ ∂T = K .⎨ 2 + 2 ⎬ ∂t ∂y ⎭ ⎩ ∂x
Dimana: T adalah temperatur atau konsentrasi polutan, K adalah koefisien konduktivitas atau koefisien difusi turbulen, t merupakan variabel waktu, x dan y merupakan variabel jarak. Tujuan dari penyelesaian persamaan parabola di atas adalah untuk mencari perubahan temperatur atau konsentrasi polutan pada waktu dan lokasi yang berbeda.
4.3.
Persamaan Hiperbola Persamaan Hiperbola biasanya dipergunakan untuk
mensimulaskan pergerakan gelombang. Persamaan gelombang 2 dimensi (2-D) dapat dipresentasikan sebagai berikut,
Ahmad Zakaria
31
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran 2 ∂2P ∂2P ⎫ 2 ⎧∂ P C . = + ⎨ ⎬ 2 ∂t 2 ∂y 2 ⎭ ⎩ ∂x
Dimana:
P merupakan variabel tekanan atau displacement
pada lokasi x, y dan waktu t. C merupakan cepat rambat gelombang.
4.4.
Skema Penyelesaian Persamaan Penyelesaian
terdahulu,
yaitu
persamaan
diferensial
merupakan
penyelesaian
sudah
dibahas
dengan
cara
pendekatan yang menggunakan metode beda hingga atau yang sering disebut Metode Finite-Differences. Dalam menyelesaikan pendekatan persamaan differensial parsial sebenarnya ada tiga metode dasar yang dapat dipergunakan yaitu, 1. Skema Eksplisit 2. Skema Implisit 3. Skema Crank-Nicolson Dari ketiga skema di atas, dapat dibuat skema umumnya. Misalkan suatu persamaan differensial
∂T ∂ 2T = K 2 . Persamaan ∂t ∂x
ini dapat diselesaikan sebagai berikut,
⎧ T n +1 − 2Ti n +1 + Ti +n1+1 Ti n+1 − Ti n Ti −n1 − 2Ti n + Ti +n1 ⎫ ( ) = K .⎨ϕ i −1 + − ϕ 1 . ⎬ ∆t ∆x 2 ∆x 2 ⎩ ⎭ Dimana: ϕ adalah koefisien tipe dari skema. Harga dari koefisien ϕ adalah sebagai berikut, Skema adalah Explicit apabila
ϕ = 1
Skema adalah Implicit apabila
ϕ = 0
Skema Crank-Nicolson apabila
ϕ = 0.5
Pada pelatihan ini hanya akan dibahas Skema Explicit FD. Ahmad Zakaria
32
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
4.5.
Penyelesaian Persamaan Differensial Dari ketiga tipe persamaan differensial, persamaan Ellips,
persamaan Parabola dan persamaan Hiperbola, dan dengan menggunakan pendekatan beda hingga seperti yang sudah dibahas terdahulu, dapat dibuat pendekatan beda hingga metode Explicit sebagai berikut. Persamaan Ellips,
∂ 2η ∂ 2η + =0 ∂x 2 ∂y 2
η i −1 − 2η i + η i +1 ∆x
2
+
η j −1 − 2η j + η j +1 ∆y 2
=0
Dimana: i dan j menunjukkan nomor grid ke arah sumbu x dan y. ∆x dan ∆y merupakan lebar grid arah sumbu x dan y. η dapat dimisalkan sebagai tinggi muka air tanah pada suatu aliran air tanah 2 dimensi (2-D) dan akurasi dimensi ruang orde 2. Persamaan Parabola,
⎧ ∂ 2T ∂ 2T ⎫ ∂T = K .⎨ 2 + 2 ⎬ ∂t ∂y ⎭ ⎩ ∂x
Ti ,nj+1 − Ti ,nj ∆t
⎧⎪Ti −n1, j − 2Ti ,nj + Ti +n1, j Ti ,nj −1 − 2Ti ,nj + Ti ,nj +1 ⎫⎪ = K .⎨ + ⎬ ∆x 2 ∆y 2 ⎪⎩ ⎪⎭
Dimana: i dan j menunjukkan nomor grid ke arah sumbu x dan y. ∆x dan ∆y merupakan lebar grid arah sumbu x dan y. n menunjukkan nomor grid waktu dan ∆t merupakan lebar grid
Ahmad Zakaria
33
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
waktu. K menunjukkan koefisien perambatan panas atau koefisien difusi turbulen. T menunjukkan variabel perubahan panas pada lokasi (x, y) dan waktu (t) tertentu dari persamaan parabola 2 dimensi (2-D) dan akurasi dimensi ruang orde 2. Persamaan Hiperbola,
2 ∂2P ∂2P⎫ 2 ⎧∂ P = + C . ⎨ 2 ⎬ ∂t 2 ∂y 2 ⎭ ⎩ ∂x
Pi ,nj+1 − 2 Pi ,nj + Pi ,nj−1 ∆t 2
⎧⎪ Pi −n1, j − 2 Pi ,nj + Pi +n1, j Pi ,nj −1 − 2 Pi ,nj + Pi ,nj +1 ⎫⎪ = C .⎨ + ⎬ ∆x 2 ∆y 2 ⎪⎭ ⎪⎩ 2
Dimana: i dan j menunjukkan nomor grid ke arah sumbu x dan y. ∆x dan ∆y merupakan lebar grid arah sumbu x dan y. n menunjukkan nomor grid waktu dan ∆t merupakan lebar grid waktu. C merupakan koefisien cepat rambat gelombang. P menunjukkan perubahan tekanan gelombang pada lokasi (x, y) dan waktu tertentu. Persamaan ini merupakan persamaan Hiperbola 2 dimensi (2-D) dengan akurasi orde 2.
Ahmad Zakaria
34
Pelatihan Pemrograman Numerik Dengan Menggunakan Bahasa Fortran
DAFTAR PUSTAKA Triatmodjo, Bambang, 1992, Metode Numerik, Beta Offset, Yokyakarta.
Etter, D.M., 1986, Fortran 77 Terstruktur, Bina Aksara, Jakarta.
Djojodihardjo, H., Sudarmo, M.S., 1985, Pengantar Pemrograman Dengan Bahasa Fortran IV, Gramedia, Jakarta.
Ahmad Zakaria
35