Contoh Spanl Untuk Proyek

10
Contoh #1: Berikut adalah program Ezy PASCAL untuk solusi SPANL dengan 2 buah persamaan berikut: Matrik JACOBI dari SPANL di atas adalah sbb: Dengan menggunakan Metode Newton-Raphson untuk solusi SPANL di atas, dan dengan menggunakan harga-harga awal dan maka akan diperoleh solusinya sbb: Jumlah iterasi yang dibutuhkan adalah antara 25 – 30 untuk harga-harga FTOL = 1.0E-8 dan XTOL = 1.0E-8. Pelajarilah contoh ini agar supaya saudara dapat menyelesaikan Tugas PROYEK yang diberikan ! Program Contoh_SPANL01; Const NEQ = 3; 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

Transcript of Contoh Spanl Untuk Proyek

Page 1: Contoh Spanl Untuk Proyek

Contoh #1: Berikut adalah program Ezy PASCAL untuk solusi SPANL dengan 2 buah persamaan berikut:

Matrik JACOBI dari SPANL di atas adalah sbb:

Dengan menggunakan Metode Newton-Raphson untuk solusi SPANL di atas, dan

dengan menggunakan harga-harga awal dan maka akan diperoleh

solusinya sbb:

Jumlah iterasi yang dibutuhkan adalah antara 25 – 30 untuk harga-harga FTOL =

1.0E-8 dan XTOL = 1.0E-8.

Pelajarilah contoh ini agar supaya saudara dapat menyelesaikan Tugas PROYEK yang

diberikan !

Program Contoh_SPANL01;

Const NEQ = 3;

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---*) x[noe] := b[noe]/a[noe,noe];

Page 2: Contoh Spanl Untuk Proyek

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] := 10*x[1] + 3*Sqr(x[2]) - 3.0; fx[2] := x[1]*x[1] - exp(x[2]) - 2.0; 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] := 10; A[1,2] := 6*x[2]; A[2,1] := 2*x[1]; A[2,2] := -exp(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;

{--- The following is 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/variabel: '); Readln(N); Writeln('Harga-harga awal untuk 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 harga norma fungsi SPANL} FSPANL(X,FX,N); NV := NormVect(FX,N); ITER := 0; If (NV > FTOL)then {memeriksa harga norma fungsi SPANL}

Page 3: Contoh Spanl Untuk Proyek

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 terlampaui');End.

Page 4: Contoh Spanl Untuk Proyek

Contoh #2: Berikut adalah contoh kedua dari program Ezy PASCAL untuk solusi SPANL dengan

2 buah persamaan juga sbb:

Matrik JACOBI dari SPANL di atas adalah sbb:

Dengan menggunakan Metode Newton-Raphson untuk solusi SPANL di atas, dan

dengan menggunakan harga-harga awal dan maka akan diperoleh

solusinya sbb:

Jumlah iterasi yang dibutuhkan adalah berkisar antara 2 – 10 untuk harga-harga FTOL

= 1.0E-8 sampai dengan 1.0E-11 dan demikian juga untuk XTOL.

Pelajarilah juga contoh kedua ini agar supaya saudara dapat menyelesaikan Tugas

PROYEK yang diberikan !

Program Contoh_SPANL02;

Const NEQ = 5;

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;

Page 5: Contoh Spanl Untuk Proyek

End; {Triangularisasi} (*---Substitusi Balik---*) 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] := 2*Sqr(x[1]) + x[2]*x[2] - 6; fx[2] := x[1] + 2*x[2] - 3.5; 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] := 4*x[1]; A[1,2] := 2*x[2]; A[2,1] := 1.0; A[2,2] := 2.0;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;

{--- The following is 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/variabel: '); Readln(N); Writeln('Harga-harga awal untuk 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 harga norma fungsi SPANL} FSPANL(X,FX,N); NV := NormVect(FX,N); ITER := 0;

Page 6: Contoh Spanl Untuk Proyek

If (NV > FTOL)then {memeriksa harga norma fungsi SPANL} 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 terlampaui');End.

Page 7: Contoh Spanl Untuk Proyek

Contoh #3: Berikut adalah contoh ketiga dari program Ezy PASCAL untuk solusi SPANL dengan

3 buah persamaan yang bentuknya sbb:

Matrik JACOBI dari SPANL di atas adalah sbb:

Dengan menggunakan Metode Newton-Raphson untuk solusi SPANL di atas, dan

dengan menggunakan harga-harga awal dan maka akan diperoleh

solusinya sbb:

Jumlah iterasi yang dibutuhkan adalah berkisar antara 2 – 10 untuk harga-harga FTOL

= 1.0E-10 sampai dengan 1.0E-20 dan demikian juga untuk XTOL.

Pelajarilah dengan seksama contoh ketiga ini agar supaya kalian dapat menyelesaikan

Tugas PROYEK yang diberikan !

Program Contoh_SPANL03;{From: Gilberto E. Urroz}

Const NEQ = 5;

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

Page 8: Contoh Spanl Untuk Proyek

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] := Sqr(x[1]) - x[2]*x[2] + Sqr(x[3]) - 11.0E0; fx[2] := x[1]*x[3] - 2*Sqr(x[2]) + 10.0E0; fx[3] := Sqrt(x[1]*x[2]*x[3] - 8.0E0) - 4.0E0; 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] := 2*x[1]; A[1,2] := -2*x[2]; A[1,3] := 2*x[3]; A[2,1] := x[3]; A[2,2] := -4*x[2]; A[2,3] := x[1]; A[3,1] := 0.5/Sqrt(x[1]*x[2]*x[3] - 8.0E0)*x[2]*x[3]; A[3,2] := 0.5/Sqrt(x[1]*x[2]*x[3] - 8.0E0)*x[1]*x[3]; A[3,3] := 0.5/Sqrt(x[1]*x[2]*x[3] - 8.0E0)*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;

{--- The following is MAIN Program ---} Var ITER, ITMAX : Integer; I,N : Integer; Aij : RMatriks; FX,DX,X : RVektor; Solved,Converged,ItMaxReached : Boolean; FTOL,TOL,NV : Real;

Page 9: Contoh Spanl Untuk Proyek

Begin Write('Jumlah persamaan/variabel: '); Readln(N); Writeln('Harga-harga awal untuk 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 harga norma fungsi SPANL} FSPANL(X,FX,N); NV := NormVect(FX,N); ITER := 0; If (NV > FTOL)then {memeriksa harga norma fungsi SPANL} 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 terlampaui');End.