Program Gauss Jordan dengan Fortran
c Contoh program
Gauss Jordan
INTEGER ORDO
REAL M(10,10), MB(10,10)
C ********** I N P U T M A T R I K S **********
WRITE (*,'(24(/))')
WRITE (*,'(''BANYAK ORDO MATRIKS = '',\)')
READ (*,'(I4)') ORDO
WRITE (*,*)
DO 6 I = 1, ORDO
DO 5 J = 1, ORDO
WRITE (*,'(2X,''ELEMEN ('',I1,'','',I2,'') = '',\)') I, J
READ (*, *) M(I,J)
5 CONTINUE
6 CONTINUE
INTEGER ORDO
REAL M(10,10), MB(10,10)
C ********** I N P U T M A T R I K S **********
WRITE (*,'(24(/))')
WRITE (*,'(''BANYAK ORDO MATRIKS = '',\)')
READ (*,'(I4)') ORDO
WRITE (*,*)
DO 6 I = 1, ORDO
DO 5 J = 1, ORDO
WRITE (*,'(2X,''ELEMEN ('',I1,'','',I2,'') = '',\)') I, J
READ (*, *) M(I,J)
5 CONTINUE
6 CONTINUE
C ******* M A T R I K S G A B U N G A N ********
DO 9 I = 1, ORDO
DO 8 J = 1, ORDO*2
IF (J.LT.(ORDO+1)) THEN
MB(I,J) = M(I,J)
ELSE
IF ((I+ORDO) .EQ. J) THEN
MB(I,J) = 1
ELSE
MB(I,J) = 0
END IF
END IF
8 CONTINUE
9 CONTINUE
C **** M A T R I K S S E G I T I G A A T A S ****
DO 30 I = 1, ORDO
SD = MB(I, I)
DO 31 J = 1, (2*ORDO)
31 MB(I, J) = MB(I, J) / SD
DO 32 K = (I+1), ORDO
R = MB(K, I)
DO 33 J = 1, (2*ORDO)
33 MB(K, J) = MB(K, J) - R * MB(I, J)
32 CONTINUE
30 CONTINUE
C ******** M A T R I K S D I A G O N A L ********
DO 40 I = ORDO, 2, -1
DO 41 K = (I-1), 1, -1
R = MB(K, I)
DO 42 J = I, (2*ORDO)
42 MB(K, J) = MB(K, J) - R * MB(I, J)
41 CONTINUE
40 CONTINUE
C ********** C E T A K H A S I L **********
WRITE (*,'(/,A,/)') 'MATRIK INVERS DENGAN METODA GAUSS-JORDAN'
DO 55 I = 1, ORDO
DO 56 J = (ORDO+1), (2*ORDO)
WRITE (*,'(F8.2,\)') MB(I, J)
56 CONTINUE
WRITE (*,*)
55 CONTINUE
END
LOGIKA PROGRAM :
c
Contoh program Gauss Jordan
Merupakan
suatu baris komentar yang memberitahukan bahwa program ini adalah program Gauss
Jordan. Dalam prosesnya baris komentar ini tidak akan dieksekusi/diproses.
INTEGER
ORDO
REAL M(10,10), MB(10,10)
REAL M(10,10), MB(10,10)
Blok
program ini digunakan untuk menginisialisasikan variabel ORDO sebagai sebuah
tipe data integer serta variabel M dan MB sebagai suatu array yang
masing-masing variabel tersebut dapat menampung nilai untuk baris dan kolomnya
adalah 10 dan bertipe data real.
C
********** I N P U T M A T R I K S **********
WRITE (*,'(24(/))')
WRITE (*,'(''BANYAK ORDO MATRIKS = '',\)')
READ (*,'(I4)') ORDO
WRITE (*,*)
WRITE (*,'(24(/))')
WRITE (*,'(''BANYAK ORDO MATRIKS = '',\)')
READ (*,'(I4)') ORDO
WRITE (*,*)
Blok program ini digunakan untuk menginput banyaknya matriks yang akan dibuat. Disini akan mencetak satu baris kosong dan mencetak kata BANYAK ORDO MATRIKS = “, kemudian user menginput banyaknya matriks yang dibuat kemudian akan disimpan dalam variabel ORDO dengan tipe data integer. Lalu program akan mencetak satu baris kosong.
DO
6 I = 1, ORDO
DO 5 J = 1, ORDO
WRITE (*,'(2X,''ELEMEN ('',I1,'','',I2,'') = '',\)') I, J
READ (*, *) M(I,J)
5 CONTINUE
6 CONTINUE
DO 5 J = 1, ORDO
WRITE (*,'(2X,''ELEMEN ('',I1,'','',I2,'') = '',\)') I, J
READ (*, *) M(I,J)
5 CONTINUE
6 CONTINUE
Selanjutnya terdapat suatu perulangan dimana program akan menuju baris ke 6 yaitu suatu proses continue yaitu dimana program akan melanjutkan ke program berikutnya hingga kondisi pada perulngan ini terpenuhi, dimana kondisi yang diberikan adalah nilai awal dari variabel I = 1 dan akan melakukan perulangan hingga nilai dari variabel ORDO terpenuhi. Kemudian menuju baris ke 5 sama logikanya seperti sebelumnya yaitu suatu perulangan dimana nilai awal dari J = 1 dan akan melakukan perulangan sebanyak nilai yang terdapat pada variabel ORDO.
C
******* M A T R I K S G A B U N G A N ********
DO 9 I = 1, ORDO
DO 8 J = 1, ORDO*2
IF (J.LT.(ORDO+1)) THEN
MB(I,J) = M(I,J)
ELSE
DO 9 I = 1, ORDO
DO 8 J = 1, ORDO*2
IF (J.LT.(ORDO+1)) THEN
MB(I,J) = M(I,J)
ELSE
IF
((I+ORDO) .EQ. J) THEN
MB(I,J) = 1
ELSE
MB(I,J) = 0
END IF
END IF
8 CONTINUE
9 CONTINUE
MB(I,J) = 1
ELSE
MB(I,J) = 0
END IF
END IF
8 CONTINUE
9 CONTINUE
Blok program ini digunakan untuk membuat matrk gabungan. Hal yang pertama kali dilakukan dalam blok program ini adalah suatu perulangan dimana blok program akan menuju line number 9 yang perintahnya adlah continue yaitu mengeksekusi baris selanjutnya hingga perulangan selesai dimana kondisi yang diberikan adalah nilai awal dari I =1 dan lakukan sebanyak nilai yang terdapat pada variabel ORDO, kemudian lanjut ke statement berikutnya yaitu menuju line number 8 yang perintahnya adalah continue juga dan merupakan suatu perulangan, logikanya sama seperti perulangan sebelumnya kondisi yang diberikan adalah nilai awal dari variabel J=1 dan nilai dari ORDO dikali 2. Selanjutnya terdapat suatu statement kondisi IF dimana jika nilai J lebih kecil dari nilai variabel ORDO ditambah 1 maka program akan mengeksekusi statement selanjutnya yaitu menyamakan nilai variabel MB(I,J) yang merupakan array dengan variabel M(I,J) yang merupakan suatu array juga. Namun jika kondisi yang diberikan tidak memenuhi maka program akan menjalankan statement yang berada pada blok selanjutnya yaitu suatu kondisi jika nilai dari variabel I ditambah dengan ORDO sama/equlivalen dengan J maka nilai dari variabel (I,J) = 1 jika kondisi yang diberikan tidak memenuhi maka program menjalankan statement yang berada pada blok program else dimana nilai dari variabel MB(I,J) = 0. Untuk mengakhiri Kondisi IF dalam gunakan perintah END IF, perintah END IF juga digunakan untuk mengkahiri kondisi terluar.
C **** M A T R I
K S S E G I T I G A A T A S ****
DO 30 I = 1, ORDO
SD = MB(I, I)
DO 31 J = 1, (2*ORDO)
31 MB(I, J) = MB(I, J) / SD
DO 32 K = (I+1), ORDO
R = MB(K, I)
DO 33 J = 1, (2*ORDO)
33 MB(K, J) = MB(K, J) - R * MB(I, J)
32 CONTINUE
30 CONTINUE
DO 30 I = 1, ORDO
SD = MB(I, I)
DO 31 J = 1, (2*ORDO)
31 MB(I, J) = MB(I, J) / SD
DO 32 K = (I+1), ORDO
R = MB(K, I)
DO 33 J = 1, (2*ORDO)
33 MB(K, J) = MB(K, J) - R * MB(I, J)
32 CONTINUE
30 CONTINUE
Blok
program selanjutnya digunakan untuk membuat matriks segitiga atas. Dimana akan
dilakukan juga suatu perulangan. Program akan menuju keline number 30 yaitu
statement continue kemudian perulangan dilakukan dengan kondisi nilai awal dari
I = 1 dan akan melakukan perulangan sebanyak nilai yang terdapat pada variabel
ORDO. Kemudian nilai dari variabel SD sama dengan nilai yang terdapat pada
variabel MB(I,I). Menuju ke line 31 yaitu nilai MB(I,J) yang baru sama dengan
nilai MB(I,J) dibagi dengan nilai pada variabel SD, perulangan dilakukan dengan
nilai awal dari j=1 dan 2 dikalikan dengan nilai ORDO. Menuju ke line number 32
yaitu suatu perulangan dengan continue dimana
nilai dari K = (I+1) dan dilakukan sebanyak nilai pada variabel ORDO,
selanjutnya menyamakan nilai R dengan MB(K, I). Menuju ke line number 33 dimana
nilai baru dari MB(K,J) adalah nilai MB(K, J) yang lama dikurangi dengan nilai
R dikali nilai MB(I,J) dan akan terus melakukan perulangan dengan kondisi K =
(I+1), hingga nilai ORDO terpenuhi.
C
******** M A T R I K S D I A G O N A L ********
DO 40 I = ORDO, 2, -1
DO 41 K = (I-1), 1, -1
R = MB(K, I)
DO 42 J = I, (2*ORDO)
42 MB(K, J) = MB(K, J) - R * MB(I, J)
41 CONTINUE
40 CONTINUE
DO 40 I = ORDO, 2, -1
DO 41 K = (I-1), 1, -1
R = MB(K, I)
DO 42 J = I, (2*ORDO)
42 MB(K, J) = MB(K, J) - R * MB(I, J)
41 CONTINUE
40 CONTINUE
Blok
program ini digunakan untuk membuat suatu matriks diagonal. Program akan ke
line number 40 yaitu suatu statement continue yang berarti menjalankan perintah
selanjutnya dan merupakan suatu perulangan dimana nilai awal I = ORDO dengan
penambahan perulangan sebanyak 2 dan setiap perulangan nilai ordo dikurangi 1.
Berlanjut ke statement senjutnya yaitu menuju line number 41 yang merupakan
continue dan perulangan juga dimana nilai dari K sama dengan nilai dari
variabel I dikurangi 1 kemudian step dari perulangan akan bertambah 1 dan setiap
perulangan nilai dari I akan dikurangi 1. Kemduian nilai variabel R sama dengan
MB(K, I). Selanjutnya ke line number 42 yaitu menyamakan nilai MB(K, J) sama
dengan MB(K ,J) dikurangi dengan nilai dari variabel R dikali dengan MB(I, J),
kemudian kembali ke perulangan nilai awal J=1 dan 2 dikali dengan nilai pada
ORDO.
C
********** C E T A K H A S I L **********
WRITE (*,'(/,A,/)') 'MATRIK INVERS DENGAN METODA GAUSS-JORDAN'
DO 55 I = 1, ORDO
DO 56 J = (ORDO+1), (2*ORDO)
WRITE (*,'(F8.2,\)') MB(I, J)
56 CONTINUE
WRITE (*,*)
55 CONTINUE
END
WRITE (*,'(/,A,/)') 'MATRIK INVERS DENGAN METODA GAUSS-JORDAN'
DO 55 I = 1, ORDO
DO 56 J = (ORDO+1), (2*ORDO)
WRITE (*,'(F8.2,\)') MB(I, J)
56 CONTINUE
WRITE (*,*)
55 CONTINUE
END
Blok
program yang terakhir digunakan untuk mencetak hasil dari matriks. Dimana pada
layar output akan tercetak kalimat MATRIK INVERS DENGAN METODA GAUSS-JORDAN.
Kemudian ke line number 56 yaitu perintah continue yang digunakan untuk
mengeksekusi statement selanjutnya dengan kondisi yang diberikan adalah nilai
I=1 dan lakukan perulangan sebanyak ORDO. Kemudian ke line number 56 perintah
continue juga dengan kondisi perulangan yaitu
J sama dengan nilai dari variabel ORDO+1 dan 2 dikali dengan ORDO. Lalu
akan mencetak nilai dari variabel MB(I, J) yang merupakan suatu array. Lalu
akan mencetak satu baris kosong. Untuk mengakhiri seluruh program ini gunakan
perintah END.
OUTPUT PROGRAM :
No comments:
Post a Comment