Friday, April 12, 2013

Pengertian, Algoritma, Source Code Metode Regula Falsi


metode regula falsi
Hai Sobat bloger. Bagaimana kabarnya? Semoga masih diberi kesehatan. Aamiin. Jadwal hari ini adalah berbagi tentang Metode Regula Falsi. Metode Regula Falsi adalah salah satu metode numerik yang digunakan untuk mencari akar dari suatu persamaan dengan memanfaatkan kemiringan dan selisih tinggi dari dari dua titik batas range. Sebenarnya metode ini hampir sama dengan Metode Biseksi, tapi titik pendekatan yang digunakan pada metode ini berbeda dengan Metode Biseksi. Rumus titik pendekatan tersebut adalah :
            C = (f(b) * a – f(a)*b) / f(b) – f(a)
Berikut adalah algoritma dari Metode Regula Falsi
  1. Inisialisasi fungsi f(x) = e – x;
  2. Inisialisasi n = 1;
  3. Inisialisasi e = 0.00001;
  4. Tentukan batas atas (xa) dan bats bawah (xb);
  5. Tentukan banyak iterasi (n);
  6. Tentukan fa(xa), f(xb), f(xc);
  7. Tentukan nilai xc = (f(xb) * xa – f(xa)*xb) / f(xb) – f(xa);
  8. Tentukan nilai absolut f(xc);
  9. Cetak xa, xb, xc, f(xa), f(xb), f(xc);
  10. Jika f(xa) * (xb) > =0;
  11. Ya : xa = xc;
  12. Tidak : xb = xc;
  13. tambah nilai n dengan 1;
  14. Jika absolt f(xc)< e atau n >=10;
  15. Ya : keluar dari perulangan;
  16. Tidak : kembali ke 5;
  17. Cetak xa, xb, xc, f(xa), f(xb), f(xc);
Keterangan :    n merupakan jumlah seberapa banyak kita mengulang proses / biseksi.
                       e merupakan nilai error

Perhatikan indeks 7 , itu yang  membedakan Metode Regula Falsi dan Metode Biseksi.



Listing :

#include

#include

#include

double fungsi (double);
double regulafalsi (double, double, double);

main(){
       double x1=0, x2=1, fx1, fx2, indeks, a, temp, e=0.0001;
       int n=10, i=1, cek =0;

       puts("\t\t     >>>> METODE BISEKSI dan TABEL <<<<");
       puts("\t\t\t\tf(x)=e ^x - x ");
       printf("  Masukan batas bawah : ");
       scanf("%lf", &x1);
       printf("  Masukan batas atas  : ");
       scanf("%lf", &x2);
       printf("  Masukan banyak iterasi : ");
       scanf("%d", &n);
       printf("  Masukan nilai error : ");
       scanf("%lf", &e);
       puts("  ==========================================================================");
       puts("\t\t\t\tMETODE TABEL");

       a = (x2 - x1) / n;
       fx1 = fungsi(x1);
       fx2 = fungsi(x2);
      
       temp = x1;
       puts("  ==========================");
       puts("  | no |   x\t |    fx   |");
       puts("  ==========================");
       do{
              fx1 = fungsi(temp);
              fx2 = fungsi(temp+a);
              printf("  |%3d |%9lf|%9lf|\n",i,temp, fx1);
              if (fx1*fx2<=0){
                     indeks = temp;
                     cek = 1;
              }
              if (i==n && fx1 *fx2>=0 && cek ==0){
                     printf("  Perkiraan nilai batas bawah dan batas atas Anda salah\n");
                     printf("  ");
                     exit(0);
              }
              fx1 = fx2;
              temp = temp + a;
              i++;
       }while(i<=n);
       puts("  ==========================");

       printf("  Hasil berada diantara %5lf dan %.5lf\n\n",indeks, indeks+a );

       regulafalsi(indeks,indeks+a, e);
      
}
double fungsi (double a){
       double hasil;
       hasil =exp(-a)- a;
       return hasil;
}

double regulafalsi (double a, double b, double e){
       double c, fa,fb, fc, abs1;
       int no=1;
       puts("\t\t\t\tMETODE REGULA FALSI");
       puts("  ============================================================================");
       printf("  | no |     a   |    b    |     c   |     fa  |     fb  |     fc  |    abs  |\n");
       puts("  ============================================================================");
       for(;;no++){
              fa = fungsi(a);
              fb = fungsi(b);
              c = (fb*a - fa*b)/(fb-fa);
              fc = fungsi(c);
              abs1 = fc;
              if (fc <0 data-blogger-escaped-o:p="">
                     abs1 = -1*fc;       

              printf("  |%3d |%9lf|%9lf|%9lf|%9lf|%9lf|%9lf|%9lf|\n",no, a,b,c,fa,fb,fc, abs1);
              if (fa*fc>=0)
                     a = c;
              else
                     b=c;
              if (abs1<0 data-blogger-escaped-.00001="" data-blogger-escaped-o:p="">
                           printf("  |%3d |%9lf|%9lf|%9lf|%9lf|%9lf|%9lf|%9lf|\n",no+1, a,b,c,fa,fb,fc, abs1);
                           puts("  ============================================================================");
                     break;
              }     
       }
       printf("  | Nilai x mendekati : %53lf|\n  | Nilai fungsi      : %53f|\n  | Nilai absolut     : %53lf|\n ",c,fc, abs1);
       puts(" ============================================================================");
       printf("  ");
       return(0);
}
Keterangan : Listing program atau source code merupakan gabungan dari Metode Tabel dan Regula Falsi
Output :
metode regula falsi

Kelebihan dan Kekurangan Metode Regula Falsi : Kelebihannya membutuhkan lebih sedikit iterasi daripada Metode Biseksi. Kekurangannya  tidak bisa mencari bilangan imaginer / kompleks dan jika terdapat lebih dari satu akar harus dicari secara satu persatu.
Referensi : Modul Metode Numerik Pens
Sekian untuk post hari ini, semoga bermanfaat sobat. Budayakan untuk berbagi karena berbagi itu menyenangkan J.
Sekilas motivasi :
Orang yang ragu-ragu tetapi melakukan masih lebih baik daripada orang yang tidak ragu-ragu tetapi tidak melakukan~M E Angier


4 comments: