Sabtu, 17 Maret 2012

Metode Regulasi Falsi

Sebelumnya Postingan yang diangkat mengenai Bisection telah kita pahami secara baik, sekarang ada lagi metoda selain metoda Bisection yaitu Metoda yang dinamakan Regulasi Falsi.
Perbedaan yang tidak begitu jauh dibandingkan dengan Bisection, hanya mengubah sedikit algoritma saja :

1.  Tentukan nilai XL, XR
      Syarat : f(XR) != F(XR) --> beda tanda
2.  Tentukan Errornya berapa,,contoh E = 0.01
3.  Dapatkan nilai XT (X tengah ) = XR - (F(XR) *(XL-XR))/(F(XL)-F(XR))
4.  Hitung F(XT) dengan memasukan Nilai XT pada persamaan X2 – 6X + 8 = 0
5.  Cek kondisi apakah nilai Mutlak hasil fungsi F(XT) kurang dari atau sama dengan Error 
     Jika Ya , maka Solusi adalah XT
     Jika Tidak, maka lakukan pengecekan ulang apakah tanda dari fungsi F(XL) sudah sama dengan 
     fungsi F(XT).
                       Jika Ya , maka tukar nilai XL = XR dan XR = XR
                       Jika Tidak, Tukar nilai XR = XT dan XL = XL
            Setelah itu lanjutkan loop ke langkah nomor 3, hingga Solusi ditemukan dengan semua kondisi terpenuhi maka pencarian selesai.
Contoh dengan kasus yang sama : XL = 3, XL = 6, E = 0.01 dengan float 4 desimal










Solusi sama dengan metode bisection, cuma pada metode ini sedikit lebih lambat dibandingkan dengan metode bisection karena terjadi lebih 1 kali iterasi.

Source Code :
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
//XP-Emergency
void main()
{
    float XL,XR,E,FXL,FXR,XT,FXT;
    XL=3; XR=6;  E=0.01;
   int n=1;
   FXT=fabs(FXT);
   printf("\nE = %1.4f\n\n",E);
   printf("No. |  XL   |    XR  |  F(XL)  |  F(XR) |   XT   |   F(XT) |  |F(XT)|<= E\n\n");
   why:
    FXL=pow(XL,2)-6*(XL)+8;
    FXR=pow(XR,2)-6*(XR)+8;

    XT=XR-((FXR*(XL-XR))/(FXL-FXR));
    FXT=pow(XT,2)-6*(XT)+8;


  printf("%d.   %1.4f,  %1.4f,  %1.4f,  %1.4f,  %1.4f,  %1.4f\n",n,XL,XR,FXL,FXR,XT,FXT);


 if (    (FXL*FXR) < 0 ) //agar 1 positif dan 1 negatif
 {
   if ( fabs(FXT) <= E )
     {
         printf("\nSolusi (XT)= %1.4f",XT);
     }

   else
     {
       if ( (FXL*FXT) > 0 )
          {
              XL = XT; XR = XR
              n=n+1;
              goto why;
          }.
       else
          {
             XR = XT; XL = XL;
             n=n+1;
             goto why;
          }
     }
 }.

 else
 {
     cout<<"\nTidak Memenuhi Persyaratan";
 }
    getch()
//fernando-emergency.blogspot.com
}

Tidak ada komentar:

Posting Komentar