Anda di halaman 1dari 14

Tugas Metode Numerik

Menentukan Akar Persamaan dengan Metode Bagi Dua

Disusun oleh:
Wahyu Tanada (08011381823066)
Nopita Sari (08011381621072)

Dosen Pembimbing :
Anita Desiani, S.Si, M.Kom

Jurusan Matematika
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Sriwijaya
2020
Buatlah program menentukan akar dengan metode bagi dua untuk menyelesaikan
persamaan berikut ini
ax 3 e−bx +cos ( x2 ) + cx+ d=0
Dengan a = 3
b=2
c=5
d=7
Metode Bagi Dua
a) Program

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <cmath>
#include <iomanip>
#include <windows.h>
#define cek 16
using namespace std;
float k1,k2,k3,k4;
float a,b,c,e,i,r,p,q,A,B,C,D,E,lebar,z;
float f(float x)
{
return (((k1*pow(x,3))*exp(-k2*x))+(cos(pow(x,2)))+(k3*x)+k4);
}
int main( )
{
float epsilon;
int i=0 , pilih,pil,n;
char lagi,choose;
satu:
{
char metnum[]="\n\n*******\n* METODE NUMERIK *\n* PROGRAM SISTEM
PERSAMAAN LINEAR *\n* METODE BAGI DUA *\n* *\n* -----------
DISUSUN OLEH:-------*\n* Wahyu Tananda (08011381823066) *\n* Nopita Sari
(08011381621072) *\n* *\n* DOSEN PENGAJAR : ANITA DESIANI, S.Si.,
M.Kom *\n***********\n\n\n\n\n\n E N T E R =>\n\n";
cout<<endl<<endl<<endl;
for(int k=0;metnum[k]!=NULL;k++)
{
cout<<("%c",metnum[k]);

Pada tahap penulisan program di sini gunakan masing-masing Header yang di


butuhkan dalam program ini supaya dapat dijalankan . Selanjutnya mendeklarasikan dan
mendefinisikan apa saja yang akan kita masukkan seperti k1,k2,k3,k4; kemudian
a,b,c,e,i,r,p,q,A,B,C,D,E,lebar,z dengan tipe data float. P ada output program persamaan yang akan
kita hitung adalah ax^3*e^(-bx)+cos(x^2)+(cx)+d.

for(float l=0;l<=900000;l++)
{

}
}
getch();
system("cls");
atas:
cout<<" Metode Bagi Dua"<<endl;
cout<<"f(x) = ax^3*e^(-bx)+cos(x^2)+(cx)+d"<<endl;
cout << endl;
cout<<" Masukkan nilai a = "; cin>>k1;
cout<<" Masukkan nilai b = "; cin>>k2;
cout<<" Masukkan nilai c = "; cin>>k3;
cout<<" Masukkan nilai d = "; cin>>k4;
cout <<"Batas Pertama : ";
cin >>a;
cout <<"Batas Kedua : ";
cin >>b;
pilihan:
cout<<endl<<" ---------------------------"<<endl;
cout<< "| Pilihan : |"<<endl;
cout<< "| 1. Iterasi | 2. Epsilon |"<<endl;
cout<< " ---------------------------"<<endl;
cout<< " Masukkan pilihan (1/2) : ";
cin>>pil;
switch(pil)
{
case 1 :
{
cout<<" ----------------------------------------------------"<<endl;
cout<<"| METODE BAGI DUA |"<<endl;
cout<<" ----------------------------------------------------"<<endl;
cout<<" f(x) =" <<k1<<"x^3*e^("<<-k2<<"x)+cos(x^2)+("<<k3<<"x)+"<<k4 <<endl;
cout<<" ----------------------------------------------------"<<endl<<endl;

{
cout<<" Masukkan Jumlah Iterasi : ";cin>>i;cout<<endl;
cout<<" Tabel Lelarannya sebagai berikut :"<<endl;
cout<<" ============================="<<endl;

Disini kita kan memasukkan nilai a,b,c,d, batas pertama, bats kedua. Perlu di ingat
bahwa nilai yang di pilih untuk batas perama haruslah bernilai positif negatif ataupun
sebaliknya supaya hasil yang di dapat adalah konvergen. Selanjut pada output kita
diperintahkan untuk memilih batasan apakah iterasi atau epsilon.
cout<<setw(5)<<"r"<<setw(14)<<"a"<<setw(16)<<"c"<<setw(15)<<"b"<<setw(20)<<"f(a)"<<s
etw(20)<<"f(c)"<<setw(18)<<"f(b)"<<setw(18)<<"Selang
Baru"<<setw(15)<<"Lebarnya"<<endl;
cout<<" ======================================="<<endl<<endl;
do
{ for(r=0;r<i;r++)
{ c=(a+b)/2;
f(c);
if(f(a)*f(c)<0)
{
cout<<setw(5)<<r<<setw(cek)<<a<<setw(cek)<<c<<setw(cek)<<b<<setw(19)<<f(a)<<setw(19)
<<f(c)<<setw(19)<<f(b)<<setw(14)<<"[a,c]";
b=c;
lebar= abs(b-a);
cout<<setw(18)<<lebar<<endl<<endl;
}
else
{
cout<<setw(5)<<r<<setw(cek)<<a<<setw(cek)<<c<<setw(cek)<<b<<setw(19)<<f(a)<<setw(19)
<<f(c)<<setw(19)<<f(b)<<setw(14)<<"[c,b]";
a=c;
lebar= abs(b-a);
cout<<setw(18)<<lebar<<endl<<endl;
}
}}
while(lebar>i);
cout<<" =========================="<<endl<<endl;
cout<<" Jadi, hampiran akarnya adalah x = "<<c<<" dan dibutuhkan minimal "<<r<<" kali
lelaran"<<endl<<endl;
}
cout<<"\n\n Tekan [1] untuk menghitung lagi atau tekan [2] untuk menutup program =
";cin>>pilih;
if(pilih==1)
{
system("cls");
goto atas;
}
if(pilih==2)
{
system("cls");
for(int i=0; i<=100; i++)
{cout<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<"\t\t\t Loading..."<<i<<"%"<<endl; system("cls"); }
cout<<endl<<endl<<endl<<endl<<endl;
break;
}
case 2 :
cout <<"Epsilon : ";
cin >>epsilon;
cout <<endl <<endl;
if (f(a)*f(b)>0)
{
cout<<"Maaf batas yang Anda masuki tidak memenuhi persamaan"<<endl;
getch( );
system("cls");
goto satu;
}
else
{
cout<<setw(5)<<"i"<<setw(15)<<"a"<<setw(20)<<"b"<<setw(20)<<"c"<<
setw(20)<<"f(a)"<<setw(20)<<"f(b)";
cout<<setw(20)<<"f(c)"<<setw(20)<<"Selang Baru"<<setw(20)<<"lebar"<<endl;
do
{
c=(a+b)/2;
f(c);
if(f(a)*f(c)<0)
{
cout<<setw(5)<<i<<setw(15)<<a<<setw(20)<<b<<setw(20)<<c<<setw(20)<<f(a)
<<setw(20);
cout<<f(b)<<setw(20)<<f(c)<<setw(20)<<"[A,C]";
b=c;
lebar= abs(b-a);
cout<<setw(20)<<lebar<<endl;
cout<<endl;
}
else
{
cout<<setw(5)<<i<<setw(15)<<a<<setw(20)<<b<<setw(20)<<c<<setw(20)<<f(a)
<<setw(20);
cout<<f(b)<<setw(20)<<f(c)<<setw(20)<<"[C,B]";
a=c;
lebar= abs(b-a);
cout<<setw(20)<<lebar<<endl;
cout<<endl;
}
i++;
}
while( (lebar > epsilon) );
}
cout<<" ----------------------------------------------------"<<endl;
cout<<"| METODE BAGI DUA |"<<endl;
cout<<" ----------------------------------------------------"<<endl;
cout<<" f(x) =" <<k1<<"x^3*e^("<<-k2<<"x)+cos(x^2)+("<<k3<<"x)+"<<k4 <<endl;
cout<<" ----------------------------------------------------"<<endl<<endl;
cout<<"Hampiran Akarnya = "<<c<<endl;
cout<<"Banyaknya Literasi : "<<i<<endl<<endl;

cout<<"\n\n Tekan [1] untuk menghitung lagi atau tekan [2] untuk menutup program = ";cin>>pilih;
if(pilih==1)
{
system("cls");
goto atas;
}
if(pilih==2)
{
system("cls");
for(int i=0; i<=100; i++)
{cout<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<"\t\t\t Loading..."<<i<<"%"<<endl; system("cls"); }
cout<<endl<<endl<<endl<<endl<<endl;
char thx[]="\t\t THANK YOU ^_^";
cout<<endl<<endl;
cout<<"\t >> Press Any Key To Exit << "<<endl;
return(0);

}}}}}

Program di atas adalah kondisi perulangan iterasi jika r=0;r<i maka program akan
terus melakukan perhitungan. Untuk mendapat selang baru(c) di gunkan rumus c=(a+b)/2.
Nilai akan masuk pada f(c) jika terpenuhi f(a)*f(c)<0. Nilai b = c artinya b masuk ke b dengan b dalah
selang baru. Kemudian di hitung lebarnya dengan rumus lebar= abs(b-a). kondisi lain a = c artiny ac
masuk ke a dengan a adalah selang baru. Jika dipilih batasan berdasarkan iterasi kondisi kan berhenti
ketika lebar > i jika berdasarkan epsilon ketika lebar > epsilon. Kondisi lain ouput akan keluar maaf
bats yang Anda masuki tidak memenuhi persamaan ketika f(a)*f(b)>0.
b. Hasil Program
Jika di pilih berdasarkan iterasi dengan a = 3, b = 2, c = 5, d = 7, dan banyak iterasi 19.
Hampiran akarnya adalah = -0,70648
b) Hitung Menggunakan Geogebra
Dengan menggunakan GeoGebra Kita peroleh hasil akar sejati adalah -0,78. dari
persamaan ax 3 e−bx +cos ( x2 ) + cx+ d=0
Dengan a=3
b=2
c=5
d=7
diperoleh akar adalah -0,71

2. Metode Leleran untuk Menyelesaikan SPL dengan Menggunakan Gauss-Seidel


A. Program

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <cmath>
#include <iomanip>
#include <windows.h>
#define cek 16
using namespace std;
int main( )
{
float epsilon;
char lagi,choose;
satu:
atas:
cout.precision(4);
cout.setf(ios::fixed);
int n,i,j,k,flag=0,count=0,pil,pilih,iter;
cout<<"masukkan banyak persamaan = ";
cin>>n;
cout<<endl<<endl;
double a[n][n+1];
double x[n];
double eps,y;
cout<<"elemen-elemen dari baris matriks yang diperluas"<<endl;
for (i=0;i<n;i++)
for (j=0;j<=n;j++)
cin>>a[i][j];
cout<<"masukkan dugaan awal="<<endl;
for (i=0;i<n;i++)
cin>>x[i];

Pertama yang di lakukan dalam melakukan coding adalah membuat Header supaya
program yang di buat dapat berjalan sesuai dengan fungsinya masing-masing. Kemudian
deklarasikan epsilon dengan tipe data float dan lagi,choose dengan tipe data char dan n,i,j,k
dengan tipe data integer. eps,y dengan tipe data doubel. Inputkan n untuk memasukkan banyaknya
persamaan yang akan di hitung. for (i=0;i<n;i++) dan (j=0;j<=n;j++) menunjukkan perulangan i dan
j.

pilihan:
cout<<endl<<" ---------------------------"<<endl;
cout<< "| Pilihan : |"<<endl;
cout<< "| 1. Epsilon | 2. Iterasi |"<<endl;
cout<< " ---------------------------"<<endl;
cout<< " Masukkan pilihan (1/2) : ";
cin>>pil;
switch(pil)
{
case 1 :
Output pilihan batasan Epsilon atau iterasi dengan menginputkan pil. Perhitungan berdasarkan
epsilon ataupun iterasi sampai kondisi terpenuhi sesuai dengan batasan epsilon lebih kecil
atau sama dengan epsilon atapun berdasarkan iterasi, perulangan akan berhenti jika lebih kecil
dari iterasi.

y=x[i];
x[i]=a[i][n];
for (j=0;j<n;j++)
{
if (j!=i)
x[i]=x[i]-a[i][j]*x[j];
}
x[i]=x[i]/a[i][i];
if (abs(x[i]-y)<=eps)
flag++;
cout<<x[i]<<setw(20);

Coding di atas adalah


perhitungan untuk mendapatkan nilai x[i], input y akan sama dengan x[i] dengan perhitungan
x[i] ]=a [i][n]. Jika nilai mutlak dari (x[i]-y) lebih kecil atau sama dengan epsilon maka nilai x[i] akan
muncul pada output.

while(count<iter);
cout<<"sehingga didapatkan solusi seperti berikut:";
for (i=0;i<n;i++)

{
system("cls");
goto atas;
Ini adalah coding perulangan akan berhenti ketika kondisi hasil perhitungan lebih
kecil dari iterasi. Sehingga solusi dari setiap variabel dari persamaan akan muncul di output.

b. Hasil Program

Persamaan yang kita coba hitung adalah 2 x0 +3 x 1= 2 dan 3 x 0+4 x1= 2 dengan batasan
epsilon sebesar 0.0002.
Hasil yang di peroleh dari persamaan 2 x0 +3 x 1= 2 dan 3 x 0+4 x1 = 2 dengan batasan
epsilon sebesar 0.0002. adalah x 0= -2,0002 dan x 1= 2,0001

c. Perhitungan menggunakan I Do Maths


cont

Anda mungkin juga menyukai