Anda di halaman 1dari 10

TUGAS METODE NUMERIK

DISUSUN OLEH :
1.
2.
3.
4.

JASON KURNIAWAN
KURNIA RAMADANI
ILHAM SULAKSONO
DHAYU ANGGI SETYOKO

(13/347220/PA/15176)
(13/347256/PA/15184)
(13/347352/PA/15198)
(13/348707/PA/15470)

UNIVERSITAS GADJAH MADA YOGYAKARTA


TAHUN AJARAN 2014/2015

I.

DASAR TEORI
Eliminasi Gauss adalah suatu metode untuk mengoperasikan nilai-nilai di dalam matriks

sehingga menjadi matriks yang lebih sederhana lagi. Dengan melakukan operasi baris sehingga
matriks tersebut menjadi matriks yang baris. Ini dapat digunakan sebagai salah satu metode
penyelesaian persamaan linear dengan menggunakan matriks. Caranya dengan mengubah persamaan
linear tersebut ke dalam matriks teraugmentasi dan mengoperasikannya. Setelah menjadi matriks
baris, lakukan substitusi balik untuk mendapatkan nilai dari variabel-variabel tersebut.

1)

Kelebihan dan Kekurangan


Metode ini digunakan dalam analisis numerik untuk meminimalkan mengisi selama eliminasi,
dengan beberapa tahap
Keuntungan :

a.

menentukan apakah sistem konsisten.

b.

menghilangkan kebutuhan untuk menulis ulang variabel setiap langka.

c.

lebih mudah untuk memecahkan


Kelemahan :

a.

memiliki masalah akurasi saat pembulatan desimal

Melakukan pertukaran baris untuk menghindari pivot yang bernilai nol adalah cara pivoting
yang sederhana (simple pivoting). Masalah ini dapat juga timbul bila elemen pivot sangat dekat ke
nol, karena jika elemen pivot sangat kecil dibandingkan terhadap elemen lainnya, maka galat
pembulatan dapat muncul.
Ada dua macam tata-ancang pivoting, yaitu:
a.

Pivoting sebagian (partial pivoting)


Pada tata-ancang pivoting sebagian, pivot dipilih dari semua elemen pada kolom p yang

mempunyai nilai mutlak terbesar, Lalu pertukarkan baris k dengan baris ke p. Untuk operasi baris
kedua, carilah elemen x pada baris kedua, dimulai dari baris ke-2 sam pai baris ke-4, yang nilai
mutlaknya terbesar, lalu pertukarkan barisnya dengan baris ke-2
perhatikanlah bahwa teknik pivoting sebagian juga sekaligus menghindari pemilihan pivot = 0
(sebagaimana dalam simple pivoting) karena 0 tidak akan pernah menjadi elemen dengan nilai
mutlak terbesar, kecuali jika seluruh elemen di kolom yang diacu adalah 0. Apabila setelah
melakukan pivoting sebagian ternyata elemen pivot = 0, itu berarti system persamaan linier tidak
dapat diselesaikan (singular system).
a.

Pivoting Lengkap (complete pivoting)


Jika disamping baris, kolom juga dikutkan dalam pencarian elemen terbesar dan kemudian

dipertukarkan, maka tata-ancang ini disebut pivoting lengkap. Pivoting lengkap jarang dipakai dalam
program sederhana karena pertukaran kolom mengubah urutan suku x dan akibatnya menambah
kerumitan program secara berarti

II.

PENGIMPLEMENTASIAN PADA PROGRAM DAN PEMBAHASAN

Untuk menerapkan metode Eliminasi Gaus , kali ini kami mengimplementasikannya


dalam bahasa C++ .
Dalam source code C++ di bawah ini , kami menggunakan dua program, yaitu
program sebagai file input masukkan dan program untuk mengimplementasikan Metode
Eliminasi Gaus dan di program ini kami menggunakan metode Pivoting Sebagian .
Program untuk File Inputan

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<time.h>
using namespace std;

int main () {
ofstream myfile;
int n;
char *filename;
srand(time(NULL));
cout<<"Masukkan jumlah data! n = ";
cin>>n;
myfile.open ("example.txt");
myfile<<n<<endl;
for(int i=0;i<n;i++){
myfile<<double(rand())<<endl;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
myfile<<i<<" "<<j<<" "<<double(rand())<<endl;

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
myfile<<i<<" "<<j<<" "<<double(rand())<<endl;
}
}
myfile.close();
cout<<"Data saved on example.txt";
return 0;
}

Program di atas akan membuat sebuah file yang bernama example.txt yang berisi data
yang nilainya random dan jumlahnya sesuai dengan input yang kita masukkan (n) . Berikut
ini adalah tampilan program yang telah di-compile dan isi dari file example.txt :

Kemudian berikut ini adalah program implementasi metode Eliminasi Gaus dengan Pivoting
Sebagian , kami menyimpan data ke dalam array , berikut adalah source codenya :
#include<fstream>
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;

double abs(double n){


if(n<0)return(-1*n);
else return n;
}
int main(){
srand(time(NULL));
int n;
cout<<"Processing input from file \n";
fstream file;
char *filename;
//cin>>filename;
file.open("example.txt");
file>>n;
double arrayb[n],*array[n];
for(int i=0;i<n;i++){
array[i]=new double[n];
}
for(int i=0; i<n; i++){
file>>arrayb[i];
}

int row,coloumn; double data;


for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
file>>row>>coloumn>>data;
array[row][coloumn]=data;
}
}
file.close();
cout<<"Starting Elimination Process \n";

for(int i=0;i<n-1;i++){
double max=array[i][i];
int maxrow;
for(int k=i;k<n;k++){
if(abs(array[k][i])>max){
max=array[k][i];
maxrow= k;
}
}
int m=i+1;
if(maxrow!=m){
//swap array A
double temp;
for(int k=0;k<n;k++){
temp=array[m][k];
array[m][k]=array[maxrow][k];
array[maxrow][k]=temp;
}

temp=arrayb[m];
arrayb[m]=arrayb[maxrow];
arrayb[maxrow]=temp;
}
for(int j=i+1;j<n;j++){
//Subtraction
double multiplier=array[j][i]/array[i][i];
for(int l=0;l<n;l++){
array[j][l]= array[j][l]-array[i][l]*multiplier;
}
arrayb[j]=arrayb[j]-arrayb[i]*multiplier;
}
}
cout<<"Substituing \n";
double arrayx[n];
for(int x=0; x<n; x++)arrayx[x]=0;
for(int i=n-1; i>=0; i--){
int j=n-1;
while(j>=1){
arrayb[i]=arrayb[i]-(array[i][j]*arrayx[j]);
j--;
}
arrayx[i]=arrayb[i]/array[i][i];
}
ofstream fileout;
fileout.open("solution.txt");
fileout<<"Solution

:"<<endl;

for(int i=0;i<n;i++){
fileout<<arrayx[i]<<endl;
}
fileout.close();
cout<<"Process Finished. Solution saved on solution.txt \n";
}

Program di atas akan membuat sebuah file yang bernama solution.txt yang berisi solusi
dari matriks yang telah dibuat pada file example.txt . Berikut ini adalah tampilan program
yang telah di-compile dan isi dari file solusi.txt :

Pada syntax :
for(int i=0;i<n-1;i++){
double max=array[i][i];
int maxrow;
for(int k=i;k<n;k++){
if(abs(array[k][i])>max){
max=array[k][i];
maxrow=k;
}
}
Syntax ini digunakan untuk memulai Forward Elimination dan mencari data maksimum dari
satu kolom pada matriks ( nilai yang terbesar) .Kemudian pada syntax :
if(maxrow!=m){
double temp;
for(int k=0;k<n;k++){
temp=array[m][k];
array[m][k]=array[maxrow][k];
array[maxrow][k]=temp;
}
temp=arrayb[m];
arrayb[m]=arrayb[maxrow];
arrayb[maxrow]=temp;
}
Syntax ini digunakan untuk mensubtitusi array ( baris pada kolom matriks ) sehingga
substraksi dapat dilakukan . Subtraksi akan dilakukan pada syntax berikut :

for(int j=i+1;j<n;j++){
double multiplier=array[j][i]/array[i][i];
for(int l=0;l<n;l++){
array[j][l]= array[j][l]-array[i][l]*multiplier;
}
arrayb[j]=arrayb[j]-arrayb[i]*multiplier;
}
}
Setelah langkah Forward Elimination selesai ( tidak ada baris yang dapat disubtitusi lagi dan
matriks segitiga atas telah terbentuk ). Maka langkah selanjutnya adalah Backward
Elimination.

Berikut ini adalah syntax yang digunakan untuk Backward Elimination :

double arrayx[n];
for(int x=0; x<n; x++)arrayx[x]=0;
for(int i=n-1; i>=0; i--){
int j=n-1;
while(j>=1){
arrayb[i]=arrayb[i]-(array[i][j]*arrayx[j]);
j--;
}
arrayx[i]=arrayb[i]/array[i][i];
}

Setelah langkah Backward Elimination selesai , solusi akan disimpan pada file yang akan
dibuat dan bernama Solution.txt :

ofstream fileout;
fileout.open("solution.txt");
fileout<<"Solution

:"<<endl;

for(int i=0;i<n;i++){
fileout<<arrayx[i]<<endl;
}
fileout.close();

III.

KESIMPULAN

Metode Eliminasi Gauss dapat digunakan untuk mengoperasikan nilai-nilai di dalam matriks
sehingga menjadi matriks yang lebih sederhana lagi dengan melakukan operasi baris sehingga matriks
dapat digunakan sebagai salah satu metode penyelesaian persamaan linear. Metode Eliminasi Gauss
dapat digunakan untuk mengetahui efek dari error yang disebabkan pada sebuah sistem persamaan
linear . Metode pivoting parsial dapat digunakan untuk memodifikasi Metode Eliminasi Gauss untuk
menghindari pitfall dari metode Eliminasi Gauss .