Saturday, August 4, 2012

Program Gauss Jordan dengan Fortran

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

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)

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 (*,*)

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

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
IF ((I+ORDO) .EQ. J) THEN
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

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

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

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