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.
Gambar 3. Grafik metode Secant
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.
Hasil running Delphi :
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
Berikut script kodingan dan programnya
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. .
Berikut hasil programnya
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.