Tuesday, October 30, 2018

Metode Regula Fasli Dalam Program c++

Artikel anakit kali ini membahas program metode regula falsi dalam bahasa c++/c, dimana metode regula falsi adalah bagian dari pembelajaran motede numerik. Metode regula falsi sendiri memiliki 9 langkah penyelesaian. Sperti dibawah ini
1. Definiskan Fungsi x
2. Tentukan Batas bawah (a) dan atas (b)
3. Tentukan toleransi error (e) dan iterasi maximum (n)
4. Hitung f(a) dan f(b)
5. Jika f(a)*f(b) < 0, langkah selanjutnya bisa dijalankan
6. Cari x ( x=f(b).a-f(a).b/f(b)-f(a)
7. Hitung fx
8. Hitung error = |f(x)|, jika error > e lanjut langkah 9
9. Hitung f(a)*f(x), jika < 0 maka b=x dan f(b)=f(x), jika tidak a=x dan f(a)=f(x).

Diatas adalah langkah-langkah dalama menyeleasikan metode regula falsi secara umum dan manual. Disini anakit mencoba meimplementasikan metode regula falsi tersebut dalam program c++. Tentunya secara umum sebenarnya alur dan langkah-langkahnya sama saja. Perhatikan script Metode Regula Falsi dibawah ini.


#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

using namespace std;
//Yesaya Twin Situmorang
//1610031802118
//Metode Numerik
//2x^2+5x-3=0
void gotoxy(int x, int y){
            COORD coord;
            coord.X = x;
            coord.Y = y;
            SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

int main () {
menu: 
double a,b,e,x,error=1;
int n;
cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
cout<<" |                                                   Metode Regula Falsi                                                   | \n";
cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";

cout<<" Masukkan Batas Atas       : ";cin>>a;
cout<<" Masukkan Batas Bawah      : ";cin>>b;
cout<<" Masukkan Toleransi Error  : ";cin>>e;
cout<<" Masukkan Iterasi Maximum  : ";cin>>n;

double Fa=(2.0*pow(a,2.0))+(5.0*a)-(3.0);
double  Fb=(2.0*pow(b,2.0))+(5.0*b)-(3.0);


if (Fa*Fb>0)
{
            gotoxy(2,9);cout<<"F(a)*F(b)         :"<<Fa*Fb;
            gotoxy(2,10);cout<<"Tidak ada akar di antara kedua batas persamaan \n";
            system("pause");
            system("cls");
            goto menu;
           
} else {
                                                //           10        20        30        40        50        60        70        80        90        100       110       120
                        //  123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
gotoxy(2,10);cout<<"----------------------------------------------------------------------------------------------------------------------------- \n";
gotoxy(2,11);cout<<"|Literasi|       a       |      b      |      x      |       f(x)      |      f(a)      |        f(b)      |      Error     | \n";
gotoxy(2,12);cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";

for(int iterasi=1;iterasi<=n;iterasi++){
           
x=(Fb*a-Fa*b)/(Fb-Fa);
double fx=(2.0*pow(x,2.0))+(5.0*x)-(3.0);
error=fx*-1;
gotoxy(2,12+iterasi);cout<<"|";
gotoxy(6,12+iterasi);cout<<iterasi;
gotoxy(11,12+iterasi);cout<<"|";
gotoxy(13,12+iterasi);printf("%1.10f",a);
gotoxy(27,12+iterasi);cout<<"|";
gotoxy(29,12+iterasi);printf("%1.10f",b);
gotoxy(41,12+iterasi);cout<<"|";
gotoxy(43,12+iterasi);printf("%1.10f",x);
gotoxy(55,12+iterasi);cout<<"|";
gotoxy(57,12+iterasi);printf("%1.10f",fx);
gotoxy(73,12+iterasi);cout<<"|";
gotoxy(75,12+iterasi);printf("%1.10f",Fa);
gotoxy(90,12+iterasi);cout<<"|";
gotoxy(92,12+iterasi);printf("%1.10f",Fb);
gotoxy(109,12+iterasi);cout<<"|";
gotoxy(111,12+iterasi);printf("%1.10f",error);
gotoxy(126,12+iterasi);cout<<"|";


if(Fa*fx<0){
            b=x;
            Fb=fx;
}else{
            a=x;
            Fa=fx;
}

if (error < e){
gotoxy(1,13+iterasi);cout<<"------------------------------------------------------------------------------------------------------------------------------ \n";
iterasi=n+1;

}}}}


Bedah program;
Program ini sudah diset sesuai kasus soal 2x^2+5x-3=0, jadi jika anda ingin merubahnya dengan soal anda,  tinggal pada bagian  


  • double fx=(2.0*pow(x,2.0))+(5.0*x)-(3.0); rubah sesuai dengan kasus soal anda
  • double Fa=(2.0*pow(a,2.0))+(5.0*a)-(3.0);  mengikuti dengan yang atas
  • double  Fb=(2.0*pow(b,2.0))+(5.0*b)-(3.0); mengikuti dengan yang atas


intinya anda hanya merubah ketiga ketentuan yang diatas. Sebagai contoh soal lainnya 6x^2-3+5, maka =(6.0*pow(x,2.0))-(3.0)+(5.0), semoga mengerti sampai disini.

Dalam program c++ regula falsi ini saya menambahkan sebuah fungsi gotoxy agar tampilannya rapi. Seperti
gotoxy(1,13+iterasi);
Baca Juga : Menerapkan GoToXy di C++ Untuk Merapikan Tampilan Program

Tentunya dalam metode regula falsi ada peratuan pada langkah 5 bahwa f(a)*f(b) harus bernilai minus atau dibawah 0. Ini sangat tergantung dari batas bawah (a) dan batas atas (b). Jika hasilnya diatas > 0. Maka dalam program akan mengulang kembali pada bagian untuk memasukkan a,b,e, dan n (keawal program). Ini bisa diperiksa pada bagian program 

if (Fa*Fb>0)
{
gotoxy(2,9);cout<<"F(a)*F(b)         :"<<Fa*Fb;
gotoxy(2,10);cout<<"Tidak ada akar di antara kedua batas persamaan \n";
system("pause");
system("cls");
goto menu;
} else 

Perhatikan kata “goto menu;” ini maksudnya pergi atau kembali pada “menu”. Anda bisa mencarinya tepat diatas variable-variable dideklarasikan. Tapi jika F(a)*F(b) < 0 ,  lanjut pada bagian elsenya.       

Program metode regula falsi ini akan

  1. berhenti apabila iterasi (perulangan) mencapai maximum yaitu nilai dari variable “n” yang dinputkan.
  2. Atau jika error (|f(x)| < e;


Nah untuk yang pertama, anakit menggunakan for(int iterasi=1;iterasi<=n;iterasi++) untuk membatasi perulangannya sesuai angka maximum. Dan untuk yang kedua

if (error < e){
iterasi=n+1;
}

Jika error < e, disini saya set agar variable iterasi langsung bernilai nilai maximum+1. Agar pada perulangan for langsung tidak terpenuhi karena batas maximum sudah terlewati. Dengan otomatis program langsung berhenti. Anda bisa memodaifikasi sesuai keinginan anda. 

Pada program metode regula falsi ini absolute atau “ |f(x)|” anakit ganti dengan error=fx*-1;

Yaitu merubah negatif menjadi positif.

Perhatikan program yang bertulisan printf("%1.10f",b) dan lainnya yang identik “printf”.

%1 , ini berfungsi agar didepan koma hanya 1 digit,
10f , ini berfungsi agar hanya 10 digit dibelakang koma
b, ini adalah varibalenya.

Kan biasanya anda untuk menampilkannya seperti dibawah ini;
Cout<<b;

Jika menggunakan seperti itu, jumlah digit diblekang koma tidak karuan, dan sangat berantakan. So itu adalah aternatif dari anakit untuk memperbaiki tampilan tanpa merubah nilainya.

So. Sudah banyak anakit jelaskan tentang bedah program metode regulasi falsi diatas. Jika di compile atau dirankan. Maka tampilan program Metode Regula Fasli C++ seperti gambar dibawah ini. 


Gambar contoh program metode regula falsi dalam c++

Baiklah. Demikianlah penjelasan tentang metode regula falsi dalam c++, semoga artikel ini bermanfaat bagi teman-teman yang membutuhkan baik sebagai referensi maupun untuk memenuhi tugas dan lain sebagainya.


EmoticonEmoticon