Vous êtes sur la page 1sur 3

KUIS Akhir – Kelompok Wakil Ketua Kelas

Pemodelan Teknik Kimia S2 – 20/03/2019


(Batch: Wakil Ketua Kelas)
[Waktu: 70 menit]

Program FORTRAN-77 untuk Soal No. 2

Di bawah ini diberikan LISTING (coding) Program FORTRAN-77 yang dapat digunakan
untuk melakukan komputasi harga-harga x dari suatu SPANL menggunakan Metode
Newton-Raphson:
Program SPANL_3_Persamaan

PARAMETER (NEQ = 5)

INTEGER ITER,ITMAX,I,N
REAL*8 Aij(NEQ,NEQ)
REAL*8 FX(NEQ),DX(NEQ),X(NEQ)
LOGICAL Solved,Converged,ItMaxReached
REAL*8 FTOL,TOL,NV,NormVect

OPEN(8,FILE='Nama_File')
READ(8,*) N
READ(8,*) (X(I), I=1,N)
READ(8,*) ITMAX
READ(8,*) FTOL,TOL
CLOSE(8)

WRITE(*,17) 'Jumlah Persamaan: ',N


DO I = 1,N
WRITE(*,18) 'X0[',I,']= ',X(I)
END DO

WRITE(*,17) 'Iterasi Maksimum: ',ITMAX,' (Data)'


WRITE(*,19) 'Tolerasi Fungsi: ',FTOL
WRITE(*,19) 'Toleransi Harga X: ',TOL

17 FORMAT(A,I3,A)
18 FORMAT(A,I1,A,G12.6)
19 FORMAT(A,G12.6)
22 FORMAT(A,I1,A,G12.6)

WRITE(*,*)
WRITE(*,'(A,$)') 'Tekan ENTER untuk melanjutkan.. '
READ(*,*)
WRITE(*,'(A)') '-------------------------------'

C Menghitung harga norma fungsi SPANL


CALL FSPANL(X,FX,N)
NV = NormVect(FX,N)
ITER = 0

If (NV .LT. FTOL) then


C memeriksa harga norma fungsi SPANL
WRITE(*,*) 'TERJAWAB: Norma Vektor lebih kecil dari TOLeransi'
STOP
EndIf

10 CONTINUE
ITER = ITER + 1

CALL JACSPANL(X,Aij,N)
CALL EGAUSS(Aij,DX,FX,N)
Do I= 1,N
X(I) = X(I) + DX(I)
EndDo

CALL FSPANL(X,FX,N)
Solved = (NormVect(FX,N) .LT. FTOL)
If (.NOT. Solved) CALL FSPANL(X,FX,N)

Converged = (NormVect(DX,N) .LT. TOL)


ItMaxReached = (ITER .GE. ITMAX)
IF (.NOT. (Solved .OR. Converged .OR. ItMaxReached)) GO TO 10

IF (.NOT. ItMaxReached) then


Write(*,'(A)') 'Vektor jawab X adalah:'
Do I = 1,N
write(*,22) ' X[',I,']= ',X(I)
EndDo
Do I = 1,N
write(*,22) ' DX[',I,']= ',DX(I)
EndDo
Do I = 1,N
write(*,22) ' FX[',I,']= ',FX(I)
EndDo
Write(*,17) 'Jumlah Iterasi: ',ITER,' (ok)'
Else
Write(*,17) 'Tak ada KONVERGENSI setelah ',ITMAX,
* ' Iterasi terlampaui'
EndIf

STOP
END

Subroutine EGAUSS (A,x,b,noe)


INTEGER noe
REAL*8 A(noe,*),x(*),b(*)
INTEGER i,j,k
REAL*8 pivot,mult,top

Do j=1,noe-1
C {Triangularisasi}
pivot = a(j,j)
Do i=j+1,noe
mult = a(i,j)/pivot
Do k = j+1,noe
a(i,k) = a(i,k)- mult*a(j,k)
b(i) = b(i) - mult*b(j)
EndDo
EndDo
EndDo
C {Triangularisasi}

C *---Substitusi Balik---*
x(noe) = b(noe)/a(noe,noe)
Do i = noe-1,1,-1
top = b(i)
Do k = i+1,noe
top = top - a(i,k)*x(k)
x(i) = top/a(i,i)
EndDo
EndDo

RETURN
END

Subroutine FSPANL (x,f,noe)


C Fungsi vektorial dari SPANL
INTEGER noe,i
REAL*8 x(noe),f(noe), fx(noe)

fx(1) = x(1)**2 - x(2)*x(3) + x(1) + A


fx(2) = -x(2)**2 + x(1)*x(3) + 2*x(2) - B
fx(3) = x(3)**2 + x(1)*x(2) - 3*x(3) - C
Do i = 1,noe
f(i) = -fx(i)
EndDo

RETURN
END

Subroutine JACSPANL(x,A,noe)
C Matriks JACOBI dari Fungsi SPANL
INTEGER noe
REAL*8 x(*),A(noe,*)

A(1,1) = -dicari-
A(1,2) = -dicari-
A(1,3) = -dicari-
A(2,1) = -dicari-
A(2,2) = -dicari-
A(2,3) = -dicari-
A(3,1) = -dicari-
A(3,2) = -dicari-
A(3,3) = -dicari-

RETURN
END

Function NormVect(x,n)
INTEGER n,i
REAL*8 NormVect,x(*)
REAL*8 sum

sum = 0.0
Do i = 1,n
sum = sum + x(i)**2
EndDo
NormVect = SQRT(sum)

RETURN
END

Catatan:
Harga-harga P, Q, dan R dari fungsi FSPANL dapat dilihat pada kertas soal..!

Vous aimerez peut-être aussi