Professional Documents
Culture Documents
Program SPANL;
type
array1 = array[1..100,1..100] of real;
array2 = array[1..100,1..100] of real;
var
x,f, delta : array1;
fh,jac,jacinv : array2;
i,j,k,l,iter : integer;
const
baris = 2;
kolom = 2;
h = 0.001;
eps = 0.001;
itermax = 100;
n = 2;
{---------------------------------------------Fungsi------------------------------------------------}
procedure fungsi(y: array1);
begin
f[1,1] := (y[1,1])*(y[1,1])-(y[2,1])-1;
f[2,1] := (y[2,1])*(y[2,1])-(y[1,1]);
end;
{---------------------------------------------Fungsi------------------------------------------------}
procedure fungsih(y: array1);
begin
fh[1,1] := (y[1,1]+h)*(y[1,1]+h)-(y[2,1])-1;
fh[1,2] := (y[1,1])*(y[1,1])-(y[2,1]+h)-1;
fh[2,1] := (y[2,1])*(y[2,1])-(y[1,1]+h);
fh[2,2] := (y[2,1]+h)*(y[2,1]+h)-(y[1,1]);
end;
{-----------------------------------------Matriks Jacobi-------------------------------------------}
procedure jacobi(y: array1);
var
i,j: integer;
begin
fungsi(y);
fungsih(y);
for i:=1 to baris do
begin
for j:=1 to kolom do
begin
jac[i,j] := (fh[i,j]-f[i,1])/h;
end;
end;
end;
{-----------------------------------------Matriks inverse-----------------------------------------}
procedure inverse(a: array2);
var
q: array2;
i,j,k,l : integer;
ratio: real;
begin
for i:=1 to n do
begin
for j:=1 to n do
write (' ',a[i,j]:8:2);
writeln;
end;
{PROSES PENGINVERSAN}
for i:=1 to n do
begin
for j:=1 to n+n do
begin
if i<>j then a[i,j]:=a[i,j]/a[i,i];
end;
for j:=1 to n+n do
begin
if i=j then a[i,j]:=1;
end;
{---------------------------------program utama------------------------------------------}
begin
for i := 1 to baris do
begin
for j := 1 to 1 do
begin
write('Input data x',i,j,' = ');readln(x[i,j]);
end;
end;
fungsi(x);
for i := 1 to baris do
begin
write('F',i,j,' = ');writeln(F[i,j]:8:3);
end;
fungsih(x);
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write('Fh',i,j,' = ');writeln(fh[i,j]:8:3);
end;
end;
jacobi(x);
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write('jac',i,j,' = ');writeln(jac[i,j]:8:3);
end;
end;
inverse(jac);
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write('invjac',i,j,' = ');writeln(jacinv[i,j]:8:3);
end;
end;
{program newton}
begin
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
delta[i,j] := 0;
end;
end;
end;
for i := 1 to baris do
begin
for j := 1 to 1 do
begin
for k := 1 to kolom do
begin
delta[i,1] := delta[i,1] + jacinv[i,k+kolom]*f[k,j];
end;
end;
x[i,j] := x[i,j] - delta[i,j];
end;
begin
iter := 2;
repeat
write ('iterasi : '); writeln(iter);
for i := 1 to baris do
begin
for j := 1 to 1 do
begin
write('Input data x',i,j,' = ');writeln(x[i,j]);
end;
end;
fungsi(x);
for i := 1 to baris do
begin
write('F',i,j,' = ');writeln(F[i,1]:8:3);
end;
fungsih(x);
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write('Fh',i,j,' = ');writeln(fh[i,j]:8:3);
end;
end;
jacobi(x);
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
write('jac',i,j,' = ');writeln(jac[i,j]:8:3);
end;
end;
inverse(jac);
for i := 1 to baris do
begin
for j := 1 to kolom+kolom do
begin
write('invjac',i,j,' = ');writeln(jacinv[i,j]:8:3);
end;
end;
{program newton}
begin
for i := 1 to baris do
begin
for j := 1 to kolom do
begin
delta[i,j] := 0;
end;
end;
end;
for i := 1 to baris do
begin
for j := 1 to 1 do
begin
for k := 1 to kolom do
begin
delta[i,1] := delta[i,1] + jacinv[i,k+kolom]*f[k,j];
end;
end;
x[i,j] := x[i,j] - delta[i,j];
end;
iter := iter + 1;
until abs (delta[1,1]) < eps
end;
write(' Jumlah iterasi : ');writeln(iter);
for i := 1 to baris do
begin
write('f',i,1,' = ');writeln(f[i,1]:8:3);
write('x',i,1,' = ');writeln(x[i,1]:8:3);
end;
end.
TUGAS PERMODELAN TEKNIK KIMIA
PROGRAM FORTRAN PADA SISTEM PERSAMAAN ALJABAR NON LINEAR
Program Contoh_SPANL_2Pers
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
17 FORMAT(A,$)
18 FORMAT(A,I1,A,$)
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)
STOP
END
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
INTEGER noe,i
REAL*8 x(noe),f(noe), fx(noe)
RETURN
END
Subroutine JACSPANL(x,A,noe)
C Matriks JACOBI dari Fungsi SPANL
INTEGER noe
REAL*8 x(*),A(noe,*)
A(1,1) = -11.0
A(1,2) = 0.0
A(2,1) = 1.0
A(2,2) = -10.0 - 0.2*x(2)
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 = sum
RETURN
END