Kamis, 08 Desember 2011

Metoda Regula false dengan PHP


Seperti telah dijelaskan pada modul terdahulu,  Metode Bisection memiliki kelemahan pokok, yaitu: kecepatannya dalam mencapai divergensi; maka beberapa ahli matematika telah berusaha menyempunakan metode tersebut. Namun demikian, metode ini
memiliki kelebihan yaitu: kepastian atau jaminannya dalam menuju konvergensi.
Dalam modul ini akan dibahas suatu metode solusi baru yang memodifikasi metode bisection, yang kinerjanya lebih cepat dalam mencapai konvergensi, namun masih tetap memiliki kepastian atau jaminan menuju konvergensi.

Solusi akar (atau akar-akar) dengan menggunakan Metode RegulaFalsi merupakan modifikasi dari Metode Bisection dengan cara memperhitungkan ‘kesebangunan’ yang dilihat pada kurva berikut:
gambar :  Representasi grafis metode Regula-False

Perhatikan kebangunan 2 segitiga  Pcb dan  PQR di atas, sehingga persamaan berikut dapat digunakan:
Persamaan di atas disebut sebagai  persamaan rekursif dari Metode Regula Falsi.
Kecepatan atau laju konvergensi dari Metode Regula-Falsi sama dengan Metode Bisection, yaitu ‘konvergensi linier’, namun dengan faktor pengali (konstanta) yang lebih besar dari  1 2 (faktor pengali berkisar antara 1 2 … 1).
Algoritma :
Asumsi awal yang harus diambil adalah sama seperti pada Metode Bisection, yaitu: ‘menebak’ interval awal [a,b] dimana  f(x) adalah kontinu padanya, demikian pula interval tersebut harus terletak ‘mengapit’ (secara intuitif) nilai akar a, sedemikian rupa sehingga:
f (a) . f (b) < 0
Meskipun pada algoritma berikut masih mengandung beberapa kelemahan, namun secara umum masih sangat menguntungkan untuk dipakai. Perbaikan dan modifikasi secara numeris dilakukan oleh Brent (Atkinson, 1978), untuk algoritma tersebut.



Flowchart :

Form Perhitungan pencarian Akar dengan Metode Regula False :

Script PHP :
<?php
$b=$_POST['xupper'];
$a=$_POST['xlower'];
$tol=$_POST['tol'];
$max=$_POST['max'];
$x1=$xupper;
$x2=$xlower;
//fungsi yang akan dicari akarnya
function f($x){
$f1=sin($x)/cos($x)-$x-0.5 ;
return $f1;
}
echo"<h1><center>Pencarian akar dengan Metode Regula False</h1>";
echo"Nilai penaksiran (a) : $a <br>";
echo"Nilai penaksiran (b) : $b <br>";
echo"Toleransi : $tol <br>";
echo"Maksimum Iterasi : $max <br>";

$Fa=f($a);
$Fb=f($b);

if($Fa*$Fb>0){
echo"f(a) x f(b) > 0<br>Ulangi Penginputan<br><input type=button value=kembali onclick=history.back()>";
}
else{
echo"
<table border=1 width=100% id=table1 cellspacing=0>
<tr>
<td width=46 align=center bgcolor=#C0C0C0><b>
<font face=Verdana size=2>Iterasi</font></b></td>
<td width=123 align=center bgcolor=#C0C0C0><b>
<font face=Verdana size=2>a</font></b></td>
<td align=center bgcolor=#C0C0C0><b><font face=Verdana size=2>b</font></b></td>
<td align=center bgcolor=#C0C0C0><b><font face=Verdana size=2>m</font></b></td>
<td width=160 align=center bgcolor=#C0C0C0><b>
<font face=Verdana size=2>f(a)</font></b></td>
<td width=130 align=center bgcolor=#C0C0C0><b>
<font face=Verdana size=2>f(b)</font></b></td>
<td width=113 align=center bgcolor=#C0C0C0><b>
<font face=Verdana size=2>abs[f(a)-fb)]/2</font></b></td>
</tr>
";
$i=0;
$epsilon=$tol+1;
//while ((it<=max_iter) and (epsilon>tol))
while(($i<=$max) and ($epsilon>$tol)){
$i=$i+1;
$m=$a-$Fa*($b-$a)/($Fb-$Fa);
$Fm=f($m);
$epsilon=abs($m-$a);
echo"<tr>
<td width=46><font face=Verdana size=2>$i</font></td>
<td width=123><font face=Verdana size=2>$a</font></td>
<td><font face=Verdana size=2>$b</font></td>
<td><font face=Verdana size=2>$m</font></td>
<td width=160><font face=Verdana size=2>$Fa</font></td>
<td width=130><font face=Verdana size=2>$Fb</font></td>
<td width=113><font face=Verdana size=2>$epsilon</font></td>
</tr>
";
if($Fa*$Fm<=0){
$b=$m;
$Fb=$Fm;
}
else{
   $a=$m;
$Fa=$Fm;
}

}
echo"</table>";
if($i<$max){
echo"<h2>Iterasi Terpenuhi</h2>Hasil Akhir : $m";
}
else{
echo"Toleransi tidak terpenuhi";
}
}
?>


Hasil Perhitungan :

Pencarian akar dengan Metode Regula False

Nilai penaksiran (a) : -2 
Nilai penaksiran (b) : 5 
Toleransi : 0.00001 
Maksimum Iterasi : 20 
Iterasiabmf(a)f(b)abs[f(a)-fb)]/2
1-250.0528563450410073.6850398632615-8.88051500624662.052856345041
2-20.052856345041007-0.192383635888173.6850398632615-0.499950721697271.8076163641118
3-2-0.19238363588817-0.409261018995943.6850398632615-0.502409139233851.5907389810041
4-2-0.40926101899594-0.607461137999273.6850398632615-0.524491889857261.3925388620007
5-2-0.60746113799927-0.798995730635233.6850398632615-0.587685345557021.2010042693648
6-2-0.79899573063523-0.997251067180673.6850398632615-0.728576011764151.0027489328193
7-2-0.99725106718067-1.21974025661033.6850398632615-1.05078025508670.78025974338971
8-2-1.2197402566103-1.49519645122393.6850398632615-2.01081600990070.50480354877607
9-2-1.4951964512239-1.88294730451893.6850398632615-12.2071289818030.11705269548111
10-1.8829473045189-1.4951964512239-1.77881721238764.481792730257-12.2071289818030.10413009213127
11-1.7788172123876-1.4951964512239-1.68518045171846.0164856616966-12.2071289818030.093636760669185
12-1.6851804517184-1.4951964512239-1.600151833429.8894910293743-12.2071289818030.085028618298395
13-1.60015183342-1.4951964512239-1.522247382241935.155525078115-12.2071289818030.077904451178152
14-1.60015183342-1.5222473822419-1.550096477857235.155525078115-19.5593372236720.050055355562886
15-1.60015183342-1.5500964778572-1.578798068834235.155525078115-47.252534667520.021353764585851
16-1.5787980688342-1.5500964778572-1.5579222802766126.04891737193-47.252534667520.020875788557638
17-1.5787980688342-1.5579222802766-1.5658140566097126.04891737193-76.6134416487330.012984012224526
18-1.5787980688342-1.5658140566097-1.573773030268126.04891737193-199.644241494480.0050250385661821
19-1.573773030268-1.5658140566097-1.568774899366337.01487547523-199.644241494480.0049981309020206
20-1.573773030268-1.568774899366-1.5717451558479337.01487547523-493.630477541940.0020278744200939
21-1.5717451558479-1.568774899366-1.56972167601751055.0020571783-493.630477541940.0020234798304466
Toleransi tidak terpenuhi


Demikian Pencarian nilai akar dengan metode Regulafalse


Metode Bisection dengan PHP


Metode biseksi ini adalah metode untuk mencari akar-akar dari sebuah fungsi dengan cara menghitung nilai fungsi f(x) dari 2 nilai X : (X1,X2) yang diberikan, dan diharapkan nilai f(X1).f(X2)< xmid="(X1+X2)/2." baru =" (Xmid">
Metode numerik untuk mendapatkan harga x untuk f(x) = 0 seperti uraian di pasal 2.1 disebut METODE BISECTION. Tahap pertama proses adalah menetapkan nilai sembarang a dan b sebagai batas segmen nilai fungsi yang dicari. Batasan a dan b memberikan harga bagi fungsi f(x) untuk x = a dan x = b. Langkah selanjutnya adalah memeriksa apakah f(a)×f(b) <>
Dengan rumusan m = (a+b)/2, diperiksa apakah nilai mutlak f(m) <>-6 (batas simpangan kesalahan). Jika benar, nilai x = m adalah solusi yang dicari. Jika tidak terpenuhi, ditetapkan batasan baru dengan mengganti nilai b = m apabila f(a)*f(m) < a =" m"> 0; proses menemukan m baru dilakukan seperti prosedur yang telah dijelaskan.
Metode Bisection adalah salah satu kelas metode Pengelompokan, karena prosedur untuk mendapatkan nilai x untuk f(x) = 0 dilakukan melalui pendekatan kelompok akar. Metode ini tidak sepenuhnya memanfaatkan data f(x) bagi penentuan nilai x. Misalnya, tidak digunakannya ukuran relatif f(a) dan f(b), karena umumnya jika f(a) <>
Penetapan m ini dikenal dengan cara REGULA FALSI dan algoritmanya sama seperti metode Bisection, kecuali mengganti penentuan m dengan rumusan : m =a-[(b-a)x f(b)/f(b)-f(a)
Metode Bisection ini paling sederhana dan paling intractif dari metode pendekatan berturut-turut untuk melokalisasi sebuah persamaan akar f(x) = 0 dalam selang [a,b].
Metode ini didasrkan pada teorema nilai antara untuk fungsi kontinu., yang menyatakan pada suatu selang [a,b] sedemikian sehingga titik-titik ujung f berlawanan tanda, missal f(a) <> 0, harus mengandung suatu akar. Metode ini merupakan pengulangan pembagiduaan selang yang memenuhi teorema di atas. Oleh karena itu metode ini disebut metode bagi dua.
Algoritma Metode Bisection
Asumsi awal yang harus diambil adalah: ‘menebak’ interval awal
[a,b] dimana f(x) adalah kontinu padanya, demikian pula harus
terletak ‘mengapit’ (secara intuitif) nilai akar a, sedemikian rupa
sehingga:
(a× (b£ 0
Algoritma BISECT(f,a,b,akar,e,iter,itmax,flag)
1. Tebak harga interval [a,b]; tentukan e; dan    itmax
2. Set f0 = f(a); iter = 0; flag = 0;
3. Tentukan atau hitung akar := (b)/2;    iter iter + 1;
4. Jika f(af(c£ 0 maka jika tidak c    dan f0 = f(a);
5. Jika (– a£ maka flag = 1 jika iter >itmax maka flag = 2;
6. Jika flag = 0 ulangi ke nomor 3;
7. Akar persamaan adalah: akar = (b)/2,sebagai akar terbaru;
8. Selesai.

Flow chart Metode Bisection

Form dengan menggunakan HTML :

Target Script PHP :
<?php
$xupper=$_POST['xupper'];
$xlower=$_POST['xlower'];
$x1=$xupper;
$x2=$xlower;
//fungsi yang akan dicari akarnya
function f1($x){
$f1=-0.9*$x*$x+1.7*$x+2.5 ;
return $f1;
}
echo"<h1><center>Pencarian akar dengan Metode Bisection</h1>";
echo"Nilai penaksiran Xlower : $xlower <br>";
echo"Nilai penaksiran Xupper : $xupper <hr>";
//Pengecekan langkah 1
$a=f1($xlower);
$b=f1($xupper);
$c=$a * $b;
if($c>0){
echo" $a dan $b <br>";
echo"Nilai f(Xlower) . f(Xupper) > 0<br>Silakan lakukan penginputan Ulang";
}
else{
$k=1;
$xr=($xlower+$xupper)/2;

$t1=f1($xlower);
$t2=f1($xr);
$hasil=$t1*$t2;
if($hasil==0){
$akar=$xr;
echo"hasil akar adalah $akar";
}
else{
//header tabel
echo"
<table border=1 width=100% id=table1 style=border-width: 0px>
<tr>
<td width=35 style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>No</font></b></td>
<td width=141 style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>Xlower</font></b></td>
<td width=199 style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>Xupper</font></b></td>
<td width=185 style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>Xr</font></b></td>
<td style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>F(xlower)</font></b></td>
<td style=border-style: none; border-width: medium bgcolor=#00FF00 align=center>
<b><font size=2 face=Verdana>F(xupper)</font></b></td>
</tr>

";
while($hasil<>0){
//langkah 2 :bagi dua 
$xr=($xlower+$xupper)/2;
//langkah 3 pengecekan 
$t1=f1($xlower);
$t2=f1($xr);
$hasil=$t1*$t2;
if($hasil<0){
$xupper=$xr;
   }
  else{
$xlower=$xr;
   }
   echo"
   <tr>
<td width=35 style=border-style: none; border-width: medium>
<font face=Verdana size=2>$k</font></td>
<td width=141 style=border-style: none; border-width: medium>
<font face=Verdana size=2>$xlower</font></td>
<td width=199 style=border-style: none; border-width: medium>
<font face=Verdana size=2>$xupper</font></td>
<td width=185 style=border-style: none; border-width: medium>
<font face=Verdana size=2>$xr</font></td>
<td style=border-style: none; border-width: medium>
<font face=Verdana size=2>$t1</font></td>
<td style=border-style: none; border-width: medium>
<font face=Verdana size=2>$t2</font></td>
</tr>

   ";
  $k++;
}
echo"</table>";
}
}
//Kesimpulan hasil iterasi
$k1=$k-1;
echo"
<table border=1 width=100% id=table1 cellspacing=0 height=166>
<tr>
<td colspan=2 align=center height=33 bgcolor=#00FF00><b>
<font face=Verdana size=6>Kesimpulan Metode Bisection</font></b></td>
</tr>
<tr>
<td width=34%><font face=Verdana>Nilai Taksiran Atas</font></td>
<td width=64%><font face=Verdana>&nbsp;$x1</font></td>
</tr>
<tr>
<td width=34%><font face=Verdana>Nilai Taksiran Bawah</font></td>
<td width=64%><font face=Verdana>&nbsp;$x2</font></td>
</tr>
<tr>
<td width=34%><font face=Verdana>Jumlah Iterasi</font></td>
<td width=64%><font face=Verdana>&nbsp;$k1</font></td>
</tr>
<tr>
<td width=34%><font face=Verdana>Nilai Akar yang ditemukan</font></td>
<td width=64%><font face=Verdana>&nbsp;$xr</font></td>
</tr>
</table>
";
?>


Hasil Dari Percobaan :
NoXlowerXupperXrF(xlower)F(xupper)
12.532.52.31.125
22.7532.751.1250.36875
32.752.8752.8750.36875-0.051562499999999
42.81252.8752.81250.368750.162109375
52.843752.8752.843750.1621093750.056152343749999
62.8593752.8752.8593750.0561523437499990.0025146484374989
72.8593752.86718752.86718750.0025146484374989-0.024468994140626
82.8593752.863281252.863281250.0025146484374989-0.010963439941407
92.8593752.8613281252.8613281250.0025146484374989-0.0042209625244141
102.8593752.86035156252.86035156250.0025146484374989-0.00085229873657156
112.859863281252.86035156252.859863281250.00251464843749890.00083138942718453
122.859863281252.8601074218752.8601074218750.00083138942718453-1.0401010513306E-5
132.85998535156252.8601074218752.85998535156250.000831389427184530.00041050761937989
142.86004638671882.8601074218752.86004638671880.000410507619379890.0002000566571958
152.86007690429692.8601074218752.86007690429690.00020005665719589.4828661530322E-5
162.86009216308592.8601074218752.86009216308599.4828661530322E-54.2214035055999E-5
172.86009979248052.8601074218752.86009979248054.2214035055999E-51.5906564657442E-5
182.86010360717772.8601074218752.86010360717771.5906564657442E-52.7527901700353E-6
192.86010360717772.86010551452642.86010551452642.7527901700353E-6-3.8241068986977E-6
202.86010360717772.86010456085212.86010456085212.7527901700353E-6-5.3565754676299E-7
212.86010408401492.86010456085212.86010408401492.7527901700353E-61.1085665159172E-6
222.86010432243352.86010456085212.86010432243351.1085665159172E-62.8645453564735E-7
232.86010432243352.86010444164282.86010444164282.8645453564735E-7-1.2460149179105E-7
242.86010438203812.86010444164282.86010438203812.8645453564735E-78.0926525036773E-8
252.86010438203812.86010441184042.86010441184048.0926525036773E-8-2.183748382123E-8
262.86010439693932.86010441184042.86010439693938.0926525036773E-82.9544520607772E-8
272.86010440438992.86010441184042.86010440438992.9544520607772E-83.8535201696277E-9
282.86010440438992.86010440811512.86010440811513.8535201696277E-9-8.9919804935334E-9
292.86010440438992.86010440625252.86010440625253.8535201696277E-9-2.5692319383097E-9
302.86010440532122.86010440625252.86010440532123.8535201696277E-96.4214411565899E-10
312.86010440532122.86010440578682.86010440578686.4214411565899E-10-9.6354302314694E-10
322.86010440532122.8601044055542.8601044055546.4214411565899E-10-1.6069900965476E-10
332.86010440543762.8601044055542.86010440543766.4214411565899E-102.4072122073449E-10
342.86010440549582.8601044055542.86010440549582.4072122073449E-104.0012437807491E-11
352.86010440549582.86010440552492.86010440552494.0012437807491E-11-6.0344618191266E-11
362.86010440549582.86010440551042.86010440551044.0012437807491E-11-1.0166978370307E-11
372.86010440550312.86010440551042.86010440550314.0012437807491E-111.4922285629382E-11
382.86010440550672.86010440551042.86010440550671.4922285629382E-112.3776536295372E-12
392.86010440550672.86010440550852.86010440550852.3776536295372E-12-3.8937741919653E-12
402.86010440550672.86010440550762.86010440550762.3776536295372E-12-7.5850437042391E-13
412.86010440550722.86010440550762.86010440550722.3776536295372E-128.1090689718621E-13
422.86010440550742.86010440550762.86010440550748.1090689718621E-132.6645352591004E-14
432.86010440550742.86010440550752.86010440550752.6645352591004E-14-3.6681768733615E-13
442.86010440550742.86010440550752.86010440550752.6645352591004E-14-1.6964207816272E-13
452.86010440550742.86010440550742.86010440550742.6645352591004E-14-7.283063041541E-14
462.86010440550742.86010440550742.86010440550742.6645352591004E-14-2.3092638912203E-14
472.86010440550742.86010440550742.86010440550742.6645352591004E-148.8817841970013E-16
482.86010440550742.86010440550742.86010440550748.8817841970013E-16-1.1546319456102E-14
492.86010440550742.86010440550742.86010440550748.8817841970013E-16-4.4408920985006E-15
502.86010440550742.86010440550742.86010440550748.8817841970013E-16-8.8817841970013E-16
512.86010440550742.86010440550742.86010440550748.8817841970013E-160




Kesimpulan Metode Bisection
Nilai Taksiran Atas 3
Nilai Taksiran Bawah 2
Jumlah Iterasi 51
Nilai Akar yang ditemukan 2.8601044055074