kelompok 3 kompnum
DESCRIPTION
TUGAS KOMPUTASI NUMERIKTRANSCRIPT
TUGAS KOMPUTASI NUMERIK
KELOMPOK 3
Adam M. Fadhan (1406552959)
Barneus Wanglie (1406607760)
Eufrat Erardi (1406552995)
Ghassan Tsabit Rivai (1406552976)
Thareq Kemal Habibie (1406552963)
PROGRAM PASCAL :
program SPANLsolveit;
Const
NEQ = 6;
Type
Real = Extended;
RVektor = Array[1..NEQ] of Real;
RMatriks = Array[1..NEQ] of RVektor;
Procedure EGAUSS (A : RMatriks;
var x : RVektor;
b : RVektor;
noe : Integer);
var
i,j,k : integer;
pivot, mult,top: Real;
k1,k2,k3,k4: extended;
Begin
For j:= 1 to noe-1 do
Begin {Triangularisasi}
pivot := a[j,j];
for i := j+1 to noe do
begin
mult := a[i,j]/pivot;
for k := j+1 to noe do
a[i,k] := a[i,k]-mult*a[j,k];
b[i] := b[i]-mult*b[j];
End;
End; {Triangularisasi}
(*---Substitusi Balik---*)
writeln('a[i,i] = ',a[noe,noe]);
x[noe] := b[noe]/a[noe,noe];
For i := noe-1 downto 1 do
Begin
top := b[i];
For k:= i+1 to noe do
top := top-a[i,k]*x[k];
x[i] := top/a[i,i]
End;
End;
Procedure FSPANL (x: RVektor;
var f: RVektor;
noe: Integer);
{Fungsi vektorial dari SPANL}
Var i: Integer;
fx: RVektor;
Begin
fx[1]:=3*x[1]*x[1]-x[2]*x[2] ;
fx[2]:=3*x[1]*x[2]*x[2]+x[1]*x[1]*x[1]-1;
For i := 1 to noe do f[i] := fx[i];
End;
Procedure JACSPANL (x : RVektor;
var A : RMatriks;
noe : Integer);
{Matriks JACOBI dari Fungsi SPANL}
Begin
A[1,1] := 6*x[1];
A[1,2] := -2*x[2];
A[2,1] := 3*x[2]*x[2]-3*x[1]*x[1];
A[2,2] := 6*x[1]*x[2];
End;
Function NormVect (x : RVektor; n : Integer) : Real;
Var
sum: Real;
i: Integer;
Begin
sum := 0.0;
For i := 1 to n do sum := sum + sqr(x[i]);
NormVect := sum;
End;
{--- Main Program---}
Var
ITER, ITMAX : Integer;
I,N : Integer;
Aij : RMatriks;
FX,DX,X : RVektor;
Solved, Converged, ItmaxReached : Boolean;
FTOL, TOL, NV : Real;
Begin
write('Jumlah persamaan/variable: ');
readln(N);
writeln('Harga awal x: ');
for I:=1 to N do
Begin
write ('X0[' ,I, ']= ');
Readln(x[I]);
End;
write('ITMAX: '); readln(ITMAX);
write('FTOL: '); readln(FTOL);
write('XTOL: '); readln(TOL);
{Menghitung fungsi SPANL}
FSPANL(x,FX,N);
NV := NormVect (FX,N);
ITER := 0;
if (NV>FTOL)then
{memeriksa nilai}
Repeat
inc(ITER);
JACSPANL(X, Aij, N);
EGAUSS(Aij, DX, FX, N);
for I:=1 to N do X[I] := X[I] - DX[I];
FSPANL(x,FX,N);
Solved := NormVect(FX,N)<FTOL;
IF NOT SOLVED THEN FSPANL(X, FX,N);
Converged := NormVect (DX,N)<TOL;
ItMaxReached := Iter >= Itmax;
Until solved or converged or ItMaxReached;
if not ItMaxReached then
Begin
writeln('Vektor jawab x adalah :');
for I:= 1 to N do writeln('X[',I,']=',X[I]);
for I:= 1 to N do writeln('DX[',I,']=',DX[I]);
for I:= 1 to N do writeln('FX[',I,']=',FX[I]);
writeln('Jumlah iterasi:',ITER);
End else
writeln('Tak ada konvergensi setelah ', ITMAX,'Iterasi terlampai');
End.