You are on page 1of 4

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;

{MATTRIK SISI KANAN}


for j:=n+1 to n+n do
begin
i:=j-n;
a[i,j]:=1;
end;
for j:=n+1 to n+n do
begin
for i:=1 to n do
if i<>j-n then a[i,j]:=0;
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;
{PENJUMLAHAN KESATU BARIS ELEMENT}
for l:=1 to n do
begin
if i<>l then
begin
for j:=i+1 to n+n do
begin
a[l,j]:=a[l,j]-(a[i,j]*a[l,i]);
end;
end;
end;
{PEMBUATAN NOL DISEKITAR MATRIKS KIRI}
for k:=1 to n do
begin
if i<>k then
begin
a[k,i]:=0;
end;
end;
end;
{----------menyusun matriks invers akhir-----------}
for i := 1 to baris do
begin
for j := 1+kolom to kolom+kolom do
begin
jacinv[i,j] := a[i,j];
end;
end;
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.

You might also like