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


Tidak ada komentar: