#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define e 2.718281828
#define error_limit 0.00000000000001
using namespace std;
void X_baru (float& x)
{
x=(pow(e,-x));
}
void Y_baru (float& x)
{
x=x-(pow(e,-x)-x)/(-1*pow(e,x)-1);
}
float f(float x)
{
return (pow(e,-x)-x);
}
int main ()
{
float galat,d,a,as;
float galat_2,b,bs;
FILE *regula_falsi, *regula_x;
double fx1, fx2, fx3,x1, x2, x3,x10, x20, f1f2,x, dx, y1, y2, dy;
int k;
char lagi, belum;
FILE *stream;
int i, j,y[100];
int pilihan;
cout<<"============== Program mencari akar persamaan Y=e^-X-X ================"<<endl;
cout<<"================= macam macam metode ========================="<<endl;
cout<<endl;
cout<<"masukkan pilihan anda"<<endl;
cout<<"1. untuk metode iterasi titik sederhana"<<endl;
cout<<"2. untuk metode newton raphson"<<endl;
cout<<"3. untuk metode grafik biasa tanpa iterasi"<<endl;
cout<<"4. untuk metode grafik dengan iterasi"<<endl;
cout<<"5. untuk metode regulasi false"<<endl;
cout<<"6. untuk metode bagi dua"<<endl;
cout<<"7. untuk metode secant"<<endl;
lagi :
cout<<"pilihan anda : ";
cin>>pilihan;
switch (pilihan)
{
case 1:
{
cout<<"========================================"<<endl;
cout<<"Program mencari akar persamaan dengan "<<endl;
cout<<"Metoda iterasi titik sederhana Y=2e^X-X-3 "<<endl;
cout<<"========================================"<<endl;
cout<<endl<<endl;
cout<<"masukkan nilai awal (Xo) = ";
cin>>a;
cout<<endl;
cout<<"Masukkan batas toleransi e =";
cin>>d;
cout<<endl;
cout<<"Tabulasi data : "<<endl;
cout<<"|-------------|"<<endl;
cout<<"| i | Xi |"<<endl;
cout<<"|-------------|"<<endl;
do
{
static i = 1;
as=a;
X_baru (a);
galat = fabs (a - as);
cout.setf(ios::left|ios::showpoint);
cout<<"|";
cout.width(3);
cout<<i;
cout<<"|";
cout.width(9);
cout<<a;
cout<<"|";
i = i + 1;
cout<<endl;
} while (galat > d);
cout<<"|------------|"<<endl<<endl;
cout<<"Maka solusi akar persamaannya adalah : "<<a<<endl;
cout<<"cari dengan metode lain"<<endl;
}
break;
case 2:
{
cout<<"========================================"<<endl;
cout<<"Program mencari akar persamaan dengan "<<endl;
cout<<"Metoda Newton - Raphson Y=2e^X-X-3 "<<endl;
cout<<"========================================"<<endl;
cout<<endl<<endl;
cout<<"masukkan nilai awal (Xo) =";
cin>>b;
cout<<endl;
cout<<"Masukkan batas toleransi e =";
cin>>d;
cout<<endl;
cout<<"Tabulasi data : "<<endl;
cout<<"|-------------|"<<endl;
cout<<"| i | Xi |"<<endl;
cout<<"|-------------|"<<endl;
do
{
static i = 1;
bs=b;
Y_baru (b);
galat_2 = fabs (b - bs);
cout.setf(ios::left|ios::showpoint);
cout<<"|";
cout.width(3);
cout<<i;
cout<<"|";
cout.width(9);
cout<<b;
cout<<"|";
i = i + 1;
cout<<endl;
} while (galat_2 > d);
cout<<"|------------|"<<endl<<endl;
cout<<"Maka solusi akar persamaannya adalah : "<<b<<endl;
cout<<"cari dengan metode lain"<<endl;
}
break;
case 3:
{
cout<<"metode grafik sederhana "<<endl;
cout<<"masukkan batas bawah anda :";
cin>>i;
cout<<"masukkan batas atas anda :";
cin>>j;
for (int x=i;x<=j;x++)
{
y[x]=pow(e,x)-x;
}
cout<<"hasil plot grafik"<<endl;
for ( x=i;x<=j;x++)
{
cout<<"y"<<"["<<x<<"]="<<y[x]<<"\t";
cout<<"\n";
}
cout<<"nilai akar anda berada saat nilai fungsi sama dengan nol "<<endl;
cout<<"atau disekitar x saat nilai fungsinya mendekati nol"<<endl;
cout<<"cari dengan metode lain"<<endl;
}
break;
case 4:
{
stream = fopen("grafik.txt", "w+");
cout << "Metode Grafik\n";
cout << "-------------\n\n";
cout<<"//persamaan awal Y=e^-X-X"<<endl;
cout<<"//y1 = e^-x, y2 = x"<<endl;
cout << "Maksimum Iterasi = ";
cin >>j;
cout<< "Berapa Nilai Awal x = ";
cin >> x;
cout<< "Berapa Nilai Interval x = ";
cin >> dx;
printf("\n\t------------------------------------------------\n");
printf("\tIterasi ke-\tx\ty1\ty2\tSelisih\n");
printf("\t------------------------------------------------\n\n");
fprintf(stream, "\n\t------------------------------------------------\n");
fprintf(stream, "\tIterasi ke-\tx\ty1\ty2\tSelisih\n");
fprintf(stream, "\t------------------------------------------------\n\n");
for(i = 0; i < j; i++)
{
y1 = pow(e,-x);
y2 = x;
dy = y1 - y2;
printf("\t\t%d\t%.2f\t%.2f\t%.2f\t%.2f\n", i+1, x, y1, y2, dy);
fprintf(stream,"\t\t%d\t%.2f\t%.2f\t%.2f\t%.2f\n", i+1, x, y1, y2, dy);
x += dx;
}
printf("\t------------------------------------------------\n\n");
fprintf(stream, "\t------------------------------------------------\n\n");
fclose(stream);
cout<<"ketika selisih nya bernilai nol maka nilai x tersebut adalah akarnya "<<endl;
cout<<"atau sekitar x ketika fungsi mendekati nol"<<endl;
cout<<"cari dengan metode lain"<<endl;
}
break;
case 5:
{
do
{
j = 0;
regula_falsi = fopen("regula_falsi.txt", "w+");
regula_x = fopen("cross_regula.txt", "w+");
do
{
cout << "Metode Regula-Falsi\n";
cout << "===================\n\n";
cout<<"//Persamaan utama dan persamaan untuk mencari titik potongnya"<<endl;
cout << "Y=e^X-X\n\n";
cout << "y1 = e^-x dan y2 = x\n\n";
cout << "Mencari Titik Potong terdekat\n";
cout << "-----------------------------\n\n";
cout << "Berapa Nilai awal x = ";
cin >> x;
cout << "\nBerapa Nilai Interval x = ";
cin >> dx;
cout << "\nBerapa kali Iterasi = ";
cin >> k;
printf("\n\t-------------------------------------------------\n");
printf("\tIterasi ke-\tx\ty1\ty2\tselisih\n");
printf("\t-------------------------------------------------\n\n");
fprintf(regula_x,"\n\t-------------------------------------------------\n");
fprintf(regula_x,"\tIterasi ke-\tx\ty1\ty2\tselisih\n");
fprintf(regula_x,"\t-------------------------------------------------\n\n");
for (i = 0; i < k; i++)
{
y1 = pow(e,-x);
y2 = x;
dy = y1 - y2;
printf("\t\t%d\t%.1f\t%.2f\t%.2f\t%.2f\n", i+1, x, y1, y2, dy);
fprintf(regula_x, "\t\t%d\t%.1f\t%.2f\t%.2f\t%.2f\n", i+1, x, y1,y2,dy);
x += dx;
}
printf("\n\t-------------------------------------------------\n\n");
fprintf(regula_x, "\t-------------------------------------------------\n\n");
fclose(regula_x);
cout << "\nApakah Titik Potong telah ditemukan (y/t) ? ";
cin >> belum;
}while(belum != 'y');
cout << "\nMencari Titik Potong sebenarnya\n";
cout<<"catatan : saat selisih sama dengan nol maka nilai x itulah akarnya "<<endl;
cout << "===============================\n\n";
cout << "Masukkan Nilai x1 = ";
cin >> x1;
x10 = x1;
fx1 = pow(e,-x1) -x1;
do
{
cout << "\nMasukkan Nilai x2 = ";
cin >> x2;
fx2 = pow(e,-x2) -x2;
x20 = x2;
f1f2 = fx1*fx2;
}while(f1f2 >= 0.0);
printf("\n----------------------------------------------------------------------------\n");
printf("Iterasi ke-\tx3\tfx3\t\tfx3 (16 digit) Error Aproksimasi\n");
printf("----------------------------------------------------------------------------\n\n");
fprintf(regula_falsi,"\n----------------------------------------------------------------------------\n");
fprintf(regula_falsi,"Iterasi ke-\tx3\tfx3\t\tfx3 (16 digit) ErrorAproksimasi\n");
fprintf(regula_falsi, "----------------------------------------------------------------------------\n\n");
do
{
j++;
x3 = (x1*fx2 - x2*fx1)/(fx2 - fx1);
fx3 = pow(e,-x3) -x3;
printf("\t%d\t%.3f\t%.6f\t%.16f\n", j, x3, fx3, fabs(fx3));
fprintf(regula_falsi,"\t%d\t%.3f\t%.6f\t%.16f\n", j, x3, fx3,fabs(fx3));
if(fx1*fx3 < 0)
{
x2 = x3;
fx2 = fx3;
}
else
{
x1 = x3;
fx1 = fx3;
}
}while(fabs(fx3) > error_limit);
printf("\n----------------------------------------------------------------------------\n");
fprintf(regula_falsi,"\n----------------------------------------------------------------------------");
printf("\n\nDengan Nilai awal x1 = %.2f dan x2 = %.2f", x10, x20);
printf("\n\nDiperoleh Akar Persamaan x = %.3f", x3);
printf("\n\nDengan Error sebesar = %.16f", fabs(fx3));
fprintf(regula_falsi,"\n\nDengan Nilai awal x1 = %.2f dan x2 = %.2f", x10,x20);
fprintf(regula_falsi,"\n\nDiperoleh Akar Persamaan x = %.3f", x3);
fprintf(regula_falsi,"\n\nDengan Error sebesar = %.16f", fabs(fx3));
fclose(regula_falsi);
cout << "\n\nTekan Enter untuk melanjutkan .........";
getch();
cout << "\n\nCoba lagi dengan x dan y berbeda (y/t) ? ";
cin >> lagi;
}while(lagi != 't');}
break;
case 6:
{
float x0,x1,d;
float xr,xr1,toleransi;
int i;
cout<<"\tPROGRAM NUMERIK METODE BAGI DUA"<<endl;
cout<<endl;
cout<<"\tpersamaannya adalah : "<<endl;
cout<<"\tf(x) = e^-x -x"<<endl;
cout<<endl;
cout<<"masukan tebakan pertama = ";
cin>>x0;
cout<<"masukan tebakan kedua = ";
cin>>x1;
cout<<"masukan batas toleransi = ";
cin>>d;
cout<<endl;
cout<<"tabulasi data"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
cout<<"it f(x0) f(x1) f(x0)*f(x1) error nilai akar "<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
i=0;
if(f(x0)*f(x1)>0)
cout<<"akar tidak terdapat pada rentang batas yg anda masukan"<<endl;
else
{
for(toleransi=0;toleransi<=d;toleransi++)
{
x_baru:
i++;
xr=(x0+x1)/2;
if(f(xr)*f(x0)<0)
{
x1=xr;
xr1=(x0+x1)/2;
}
else
{
x0=xr;
xr1=(x0+x1)/2;
}
toleransi=fabs((xr1-xr)/xr1);
cout.setf(ios::left|ios::showpoint);
cout.width(1);
cout<<i<<"\t";
cout.width(8);
cout<<f(x0)<<"\t";
cout.width(13);
cout<<f(x1);
cout.width(13);
cout<<f(x0)*f(x1);
cout.width(10);
cout<<toleransi<<"\t";
cout.width(2);
cout<<xr1;
cout<<endl;
if (toleransi<=d)
{
xr1=xr1;
break;
}
else
{
goto x_baru;
}
}
cout<<endl;
cout<<"akar persamaan = "<<xr1;
cout<<endl;
cout<<"pada iterasi ke = "<<i;
cout<<endl;
}
}
break;
case 7:
{
int it;
float xr,x0,toleransi;
cout<<endl;
cout<<"\tPROGRAM NUMERIK METODE SECANT "<<endl;
cout<<endl;
cout<<"persamaannya adalah f(x) = (e^-x -x)"<<endl;
cout<<endl;
cout<<"penyelesaiannya adalah :\n\n";
cout<<"masukan batas pertama = ";
cin>>x0;
cout<<"masukan batas kedua = ";
cin>>x1;
cout<<"masukan batas tolerasi = ";
cin>>d;
cout<<endl;
cout<<endl;
cout<<"tabulasi data"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
cout<<"iterasi f(x0) f(x1) error nilai akar "<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
it=0;
{
for(toleransi=0;toleransi<=d;toleransi++)
{
awal:
{
it++;
xr = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
toleransi=fabs((xr-x1)/xr);
{
cout.setf(ios::left|ios::showpoint);
cout.width(1);
cout<<it<<"\t";
cout.width(8);
cout<<f(x0)<<"\t";
cout.width(13);
cout<<f(x1);
cout.width(15);
cout<<toleransi<<"\t";
cout.width(10);
cout<<xr;
cout<<endl;
}
if(toleransi<=d)
{
xr=xr;
}
else
{
x0=x1;
x1=xr;
goto awal;
}
}
}
}
cout<<endl;
cout<<"akar persamaan \t\t\t= "<<xr<<endl;
cout<<"didapatkan pada iterasi ke \t= "<<it<<endl;
}
break;
default :
cout<<" pilihan anda salah";
}
cout<<endl;
cout<<endl;
goto lagi;
}
Tidak ada komentar:
Posting Komentar