Upload
meidinasekarnadisti
View
246
Download
0
Embed Size (px)
DESCRIPTION
komputasi numerik SPAL pr
Citation preview
PR KOMPUTASI NUMERIK
“SPAL”
Anggota Kelompok :
Fikri Averous / 1406607792
Meidina Sekar Nadisti / 1406553045
Nadya Saarah Amelinda / 1406552824
Naufal Syafiq Maro / 1406607981
Rana Rezeki Najeges / 1406553026
UNIVERSITAS INDONESIA
DEPOK
2015
Sistem Persamaan Aljabar Tak Linear
Metode Newton Rhapson
Cara Eksak
Coding SPAL
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.