LAPORAN Pemrograman
Komputer
Percobaan : Akar Persamaan Non Linier
Pelaksanaan Praktikum
Hari : Senin Tanggal : 2 Maret 2015 Jam : 5-6
Oleh :
Nama : Mei Budi Utami
Nim : 081211332009
Dosen Pembimbing
: Endah Purwanti, S.Si., M.T.
LABORATORIUM Komputer
UNIVERSITAS AIRLANGGA
SURABAYA
A. TUJUAN
1. Agar Mahasiswa bisa menyelesaian persamaan non linier menggunakan metode bisection, Newton, dan Secant
B. DASAR TEORI
Bisection merupakan dasar dari teori persamaan non linear. Persamaan ini dapat diselesaikan dengan 3 cara, yaitu metode Bisection, Newton Raphson, dan Secant. Berikut adalah penjelasannya :
METODE BISECTION ( metode membagi dua)
Metode bisection ini didasarkan pada teorema nilai antara fungsi kontinyu, yaitu bahwa suatu selang [a,b] harus mengandung f(x) = 0, bila f(a) dan f(b) berlawanan tanda. Proses dilakukan dengan pengulangan membagi selang [a,b] menjadi dua dan dalam setiap langkah diambil setengah selang yang memenuhi persyaratan tersebut. Proses ini diulang sampai didapatkan ketelitian yang sama dengan interval [a,b] terakhir. Metode ini memiliki kelemahan yaitu: kecepatannya dalam mencapai divergensi. Dan juga memiliki kelebihan yaitu: kepastian atau jaminannya dalam menuju konvergensi.
Gambar 1. Grafik Bisection
METODE NEWTON RAPHSON
Metode newton - raphson merupakan salah satu metode terbuka untuk menentukan solusi akar dari persamaan nonlinear
Metode NR mudah untuk mendapatkan nilai yang konvergen, terutama bila literasi dimulai jauh dari akar yang dicari. contoh : diketahui sebuah fungsi f(x) dan turunannya f'(x) kita memulai dengan tebakan pertama x0. dan nilai x1 yang lebih baik adalah dengan
Gambar2. Grafik metode newton rapshon.
Fungsi f ditunjukkan pada garis biru dan garis singgung dalam warna merah. kita dapat lihat nilai xn-1 adalah nilai pendekatan yang lebih baik daripada xn untuk akar x dari fungsi f.
METODE SECANT
Metode secant merupakan perbaikan dari metode regula-falsi dan newton-raphson dimana kemiringan dua titik dinyatakan sacara diskrit, dengan mengambil bentuk garis lurus yang melalui satu titik. Berbeda dengan metode Newton Raphson, pada metode secant tidak diperlukan turunan pertama dari fungsi non liniernya, tetapi diperlukan dua buah nilai awal.
Proses Iterasi akan berhenti apabila memenuhi kondisi berikut .
Metode ini memiliki kelebihan yaitu merupakan fungsi berkelanjuhan (continue). Namun, juga memiliki kekurangan yaitu analisis turunan.
C. ANALISIS DAN PEMBAHASAN
1. Tentukan penyelesaian dari f(x) = x2 – x – 6 dengan menggunakan metode bisection
Berikut ini flowchart dari penyelesaian diatas.
Setelah membuat flowchart, dilanjutkan pembuatan Kedua yaitu membuat coding/ script programnya. Berikut ini hasilnya :
Inti kodingan dari program di atas adalah :
procedure TForm1.Button1Click(Sender: TObject); var a,b,c,fb,fc,clama,ralat:real; n,i:integer; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); clama:=a; i := 1; repeat begin StringGrid1.Cells[1,i]:=FloatToStr(a); StringGrid1.Cells[2,i]:=FloatToStr(b); c:=(a+b)/2; StringGrid1.Cells[3,i]:=FloatToStr(c); ralat:=abs((clama-c)/c); StringGrid1.Cells[6,i]:=FloatToStr(ralat); fb:=b*b-b-6; StringGrid1.Cells[4,i]:=FloatToStr(fb); fc:=c*c-c-6; StringGrid1.Cells[5,i]:=FloatToStr(fc); if ((fb*fc)<=0) then begin a:=c; end else begin b:=c; end;
if (a<>c) then begin clama:=b; end else begin clama:=a; end; end; StringGrid1.Cells[0,i]:=FloatToStr(i); i := i +1 ; until ralat < 0.001 ; StringGrid1.RowCount := i + 1; end;
procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0]:='n'; StringGrid1.Cells[1,0]:='a'; StringGrid1.Cells[2,0]:='b'; StringGrid1.Cells[3,0]:='c'; StringGrid1.Cells[4,0]:='f(b)'; StringGrid1.Cells[5,0]:='f(c)'; StringGrid1.Cells[6,0]:='error'; end; end. end; end.
dari hasil running, diperoleh akar dari persamaan diatas adalah 3 dan 3,003125 dengan error sebesar 0,52%.
Variable-variable yang digunakan dalam script diatas yaitu variable : A : untuk nilai A;
B : untuk nilai B ; C : untuk nilai C ; Fb : untuk fungsi x = b; Fc : untuk fungsi x = c; Clama: nilai c lama; Ralat : untuk nilai error
Pada script diatas , ada variable clama. clama:=a;
Variable Clama adalah nilai awal bernilai sama dengan nilai a(nilai pada edit1.text) yang digunakan untuk perintah looping(repeat until) dibawahnya.
Selanjutnya fungsi Repeat
repeat begin StringGrid1.Cells[1,i]:=FloatToStr(a); StringGrid1.Cells[2,i]:=FloatToStr(b); c:=(a+b)/2; StringGrid1.Cells[3,i]:=FloatToStr(c);
Repeat adalah fungsi looping yang mengulang suatu perintah hingga batas tertentu.
Stringgrid1.cells[1,i] := floattostr(a) yaitu pemdeklarasian nilai pada cell kolom1 baris ke-I di stringgrid1 yaitu bernilai a.
Selanjutnya ada perintah ralat. ‘ralat:=abs((clama-c)/c);’
Perintah ralat adalah perintah agar nilai hasil dalam kurung bernilai absolut (mutlak).
Pembahasan : jika f(b)*f(c) bernilai negative, maka nilai a sama dengan c, jika tidak maka b sama dengan c. jika a tidak sama dengan c maka clama bernilai sama dengan b dan jika a sama dengan c maka clama sama dengan a.
StringGrid1.Cells[0,i]:=FloatToStr(i); // untuk nomer banyaknya looping i := i +1 ;// agar looping I bernilai integer ( i = 1,2,3…dst)
until ralat < 0.001 ; // batas perintah repeat until.
StringGrid1.RowCount := i + 1;// jumlah row nya sesuai dengan jumlah i ditambah1. end;
2. Tentukan penyelesaian persamaan dengan metode Newton Rapshon Berikut flowchart dari penyelesaian persamaan diatas
procedure TForm1.Button1Click(Sender: TObject); var x,fx,f1x,xn,xn1,galat : real ; i : integer ; begin xn:=strtofloat (edit1.Text); x := xn ; i := 1; repeat begin fx:=x+ (exp(x)*cos(x))-2 ; stringgrid1.Cells[0,i] := floattostr(x); f1x:= 1-exp (-x)*cos(x)-exp(-x)*sin(x); xn1 :=x+fx/f1x; StringGrid1.Cells[1,i] := floattostr(xn1); galat := abs((x-xn1)/xn1); StringGrid1.Cells[2,i] := floattostr(galat); i := i +1; x := xn1; end; until galat <= 0.001 ; StringGrid1.RowCount := i + 1 ; end;
procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0] := 'Xn' ; StringGrid1.Cells[1,0] := 'Xn+1' ; StringGrid1.Cells[2,0] := 'Error' ; end; end. .
Dari hasil running diperoleh akar dari persamaan tersebut adalah -17,1425(simetris) dengan error 0%.
3. Untuk menyelesaikan permasalahan tersebut, pertama adalah membuat flowchart. Berikut adalah flowchart dari penyelesaian
Gambar1. Komponen delphi
Selanjutnya membuat scriptnya, dapat dilihat pada gambar procedure TForm1.Button1Click(Sender: TObject); var fx,fx1,fx2,xn1,xn2,xn,eror,x0,x1:real; i:integer; begin x0:= 0.5; x1 :=1; xn :=x0; xn1 :=x1; i:= 1; repeat begin stringgrid1.cells[0,i]:=floattostr (xn); stringgrid1.cells[1,i]:=floattostr (xn1); fx :=exp(xn)-5*sqr(xn); stringgrid1.Cells[3,i] := floattostr(fx); fx1 :=exp(xn1)-(5*sqr(xn1)); stringgrid1.Cells[4,i] := floattostr(fx1); xn2 := xn1 + fx1*(xn1-xn)/(fx1-fx); StringGrid1.Cells[2,i] := FloatToStr(xn2) ; fx2 :=exp(xn2)-(5*sqr(xn2)); StringGrid1.Cells[5,i] := FloatToStr(fx2) ; eror := abs((xn2-xn1)/xn2); StringGrid1.Cells[6,i] := FloatToStr(eror) ; xn :=xn1; xn1 := xn2 ; i := i +1 ; end; until eror < 0.01 ;
StringGrid1.RowCount := i +1 ; end; procedure TForm1.FormCreate(Sender: TObject); begin stringgrid1.Cells[0,0]:='xn-1'; stringgrid1.Cells[1,0]:='xn'; stringgrid1.Cells[2,0]:='xn+1'; stringgrid1.Cells[3,0]:='fxn-1'; stringgrid1.Cells[4,0]:='fxn'; stringgrid1.Cells[5,0]:='fxn+1'; stringgrid1.Cells[6,0]:='error'; end; end.
Berikut penjelasan Codingnya :
var
fx,fx1,fx2,xn1,xn2,xn,eror,x0,x1:real; i:integer;
pembahasan :
fx : fungsi untuk variable Xo, fx1 : fungsi untuk variable X1, fx2 : fungsi untuk variable Xn+1 Xn : variable Xn-1 Xn1 : variable Xn Xn2 : variable Xn+1 X0 : nilai Xo X1 : nilai X1 Eror : error repeat begin stringgrid1.cells[0,i]:=floattostr (xn);// menampilkan
nilai Xn-1 di cell stringgrid
stringgrid1.cells[1,i]:=floattostr (xn1); //
menampilkan nilai Xn di cell stringgrid
fx :=exp(xn)-5*sqr(xn); stringgrid1.Cells[3,i] := floattostr(fx); fx1 :=exp(xn1)-(5*sqr(xn1)); stringgrid1.Cells[4,i] := floattostr(fx1); xn2 := xn1 + fx1*(xn1-xn)/(fx1-fx); // fungsi Xn+1 metode Secant StringGrid1.Cells[2,i] := FloatToStr(xn2) ; fx2 :=exp(xn2)-(5*sqr(xn2)); StringGrid1.Cells[5,i] := FloatToStr(fx2) ;
eror := abs((xn2-xn1)/xn2); fungsi error metode
Secant StringGrid1.Cells[6,i] := FloatToStr(eror) ; xn :=xn1; xn1 := xn2 ; i := i +1 ; end; until eror < 0.01 ;
Dari hasil running diperoleh akar dari persamaan tersebut adalah x1= 642,01 ; x2 = 648,5 ; x3 = 654,997 dengan error 0,99 %.
Permasalahan yang ditemukan ketika menggunakan metode Secant adalah, perhitungan error terjadi floating point overflow, sehingga nilai error dikurangi menjadi 0,01 saja karena 0,001 juga terjadi floating point overflow.