Exploring the Ocean of Science

Aplikasi Persamaan Linier Simultan dengan C++ (Metode Iterasi Gauss-Seidel)

Sebelum membuat pemrograman untuk menyelesaikan persamaan linear simultan dengan iterasi gauss seidell ini, ada baiknya kita mengenal sedikit tentang apa dan bagaimana Penyelesaian persamaan linier Simultan dengan Gauss Seidel.

Metode interasi Gauss-Seidel adalah metode yang menggunakan proses iterasi hingga diperoleh nilai-nilai yang berubah. Bila diketahui persamaan linier simultan:

Berikan nilai awal dari setiap xi (i=1 s/d n) kemudian persamaan linier simultan diatas dituliskan menjadi:

Dengan menghitung nilai-nilai xi (i=1 s/d n) menggunakan persamaan-persamaan di atas secara terus-menerus hingga nilai untuk setiap xi (i=1 s/d n) sudah sama dengan nilai xi pada iterasi sebelumnya maka diperoleh penyelesaian dari persamaan linier simultan tersebut. Atau dengan kata lain proses iterasi dihentikan bila selisih nilai xi (i=1 s/d n)
dengan nilai xi pada iterasi sebelumnya kurang dari nilai tolerasi error yang ditentukan.

Catatan:
Hati-hati dalam menyusun sistem persamaan linier ketika menggunakan metode iterasi Gauss-Seidel ini. Perhatikan setiap koefisien dari masing-masing xi pada semua persamaan di diagonal utama (aii). Letakkan nilai-nilai terbesar dari koefisien untuk setiap xi pada diagonal utama. Masalah ini adalah ‘masalah pivoting’ yang harus benar – benar diperhatikan, karena penyusun yang salah akan menyebabkan iterasi menjadi divergen dan tidak diperoleh hasil yang benar.

Contoh Program sederhana Persamaan Linier Simultan dengan Metode Iterasi Gauss Seidell dengan bahasa Pascal :

PROGRAM GAUSID(INPUT,OUTPUT);uses crt;

CONST

MAXR=8;

MAXC=8;

TYPE
ARY=ARRAY[1..MAXR]OF REAL;
ARYS=ARRAY[1..MAXC]OF REAL;
ARY2S=ARRAY[1..MAXR,1..MAXC]OF REAL;

VAR
Y : ARY;
COEF : ARYS;
A : ARY2S;
N,M : INTEGER;
ERROR :BOOLEAN;

PROCEDURE GET_DATA(VAR A :ARY2S;
VAR Y: ARY;
VAR N,M :INTEGER);
VAR
I,J :INTEGER;

BEGIN
WRITELN;
REPEAT
WRITE(‘BERAPA PERSAMAAN?’);
READLN(N)
UNTIL N< MAXR; M :=N; IF N>1 THEN
BEGIN
FOR I :=1 TO N DO
BEGIN
WRITELN;
WRITELN(‘PERSAMAAN’,I:3);
FOR J:=1 TO N DO
BEGIN
WRITE(J:3,’:’);
READ(A[I,J]);
END;
WRITE(‘C:’);
READ(Y[I]);

READLN;
END;
WRITELN;

FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO M DO
WRITE(A[I,J]:7:4,”);
WRITELN(‘:’,Y[I]:7:4);
END;
WRITELN;

END;

IF N< 0 THEN N:= -N;
M :=N
END;

PROCEDURE WRITE_DATA;
VAR
I :INTEGER;
BEGIN
FOR I:= 1 TO M DO
WRITE(COEF[I]:9:5);
WRITELN;
END;

PROCEDURE SEID(A : ARY2S;
Y : ARY;
VAR COEF :ARYS;
NCOL :INTEGER;
VAR ERROR :BOOLEAN);

CONST
TOL =1.0E-4;
MAX =100;
VAR
DONE : BOOLEAN;
I,J,K,L,N : INTEGER;
NEXTC,HOLD,SUM,LAMBDA,AB,BIG :REAL;

BEGIN
REPEAT
WRITE(‘FACTOR RELAXASI?’);
READLN(LAMBDA);
UNTIL(LAMBDA<2.0) AND (LAMBDA>0.0);
ERROR:=FALSE;
N :=NCOL;
FOR I:=1 TO N-1 DO
BEGIN
BIG:=ABS(A[I,I]);
L:=I;
FOR J:=I+1 TO N DO
BEGIN
AB:=ABS(A[J,I]);
IF AB>BIG THEN
BEGIN
BIG:=AB;
L:=J;
END;
END;
IF BIG=0.0 THEN ERROR:=TRUE
ELSE
BEGIN
IF L<> I THEN
BEGIN
FOR J:=1TO N DO
BEGIN
HOLD:=A[L,J];
A[L,J]:=A[I,J];
A[I,J]:=HOLD;
END;
HOLD :=Y[L];
Y[L]:=Y[I];
Y[I]:=HOLD;
END;
END;
END;

IF A[N,N]= 0.0 THEN ERROR:=TRUE
ELSE
BEGIN
FOR I:=1 TO N DO
COEF[I]:=0.0;
I:=I+1;
DONE:=TRUE;
FOR J:=1 TO N DO
BEGIN
SUM :=Y[J];
FOR K :=1 TO N DO
IF J<> K THEN
SUM :=SUM- A[J,K]*COEF[K];
NEXTC:=SUM/A[J,J];
IF ABS(NEXTC-COEF[J]) > TOL THEN
BEGIN
DONE:=FALSE;
IF NEXTC*COEF[J]<0.0 THEN
NEXTC:=(COEF[J]+NEXTC)/2
END;
COEF[J]:=LAMBDA*NEXTC+(1.0-LAMBDA)*COEF[J];
WRITELN(I:4,’,COEF(‘,J,’)=’,COEF[J]);
END;

END;
IF I>MAX THEN ERROR:=TRUE;
IF ERROR THEN WRITELN(‘ERROR:MATRIX SINGULER’);
END;

BEGIN(*MAIN PROGRAM*)
clrscr;
WRITELN;
WRITELN(‘PENYELESAIAN SIMULTAN PERSAMAAN LINIER GAUSS SIEDEL’);
REPEAT
GET_DATA(A,Y,N,M);
IF N>1 THEN
BEGIN
SEID(A,Y,COEF,N,ERROR);
IF NOT ERROR THEN WRITE_DATA;
END;
UNTIL N<2
END.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: