Contoh-Contoh Teknik Pemrograman VBA,
Pascal, dan FORTRAN
(Epsilon Machine, Interpolasi dan Eliminasi Gauss)
Contoh
Contoh
-
-
Contoh Teknik Pemrograman VBA,
Contoh Teknik Pemrograman VBA,
Pascal, dan FORTRAN
Pascal, dan FORTRAN
(Epsilon Machine, Interpolasi dan Eliminasi Gauss)
(Epsilon Machine, Interpolasi dan Eliminasi Gauss)
Setijo Bismo
Setijo Bismo
Departemen Teknik Kimia FTUI
Departemen Teknik Kimia FTUI
06 Oktober 2015
Perlu untuk SELALU DIINGAT!
Cara-Cara Membuka Editor Macros (“VBA”)
Ö
Ingat:
+
, dapat dipakai untuk:
•
Run Macro
•
Edit Macro
•
Delete Macro
•
Options Macro
Ö
Ingat:
+
, dapat digunakan untuk:
•
Open Macro Editor
•Edit a Macro (VBA)
Pemrograman
VBA Macros
untuk Epsilon Machine (#1):
Skematis Pemrograman dan
Skematis Pemrograman dan
“
“
keterkaitan
keterkaitan
-
-
letak
letak
”
”
Pemrograman
VBA Macros
untuk Epsilon Machine (#2):
Sub
Sub
-
-
Program: Scripting atau
Program: Scripting atau
“
“
Listing Out
Listing Out
”
”
Sub CalcMachineEpsMS(ByRef Eps4 As Single, Iter As Integer)
Eps4 = 1#
Iter = 1
Do While (Eps4 + 1#) > 1#
Eps4 = Eps4 / 2
Iter = Iter + 1
Loop
End Sub
Sub CalcMachineEpsMD(ByRef Eps8 As Double, Iter As Integer)
Eps8 = 1#
Iter = 1
Do While (Eps8 + 1#) > 1#
Eps8 = Eps8 / 2
Iter = Iter + 1
Loop
End Sub
Pemrograman
VBA Macros
untuk Epsilon Machine (#3):
Main
Main
-
-
Program: Scripting atau
Program: Scripting atau
“
“
Listing Out
Listing Out
”
”
Sub EpsMachine()
Dim Iter As Integer
Dim Eps4 As Single
Dim Eps8 As Double
' Komputasi "Machine Epsilon" dalam SINGLE PRECISION
Call CalcMachineEpsMS(Eps4, Iter)
' Hasil komputasi:
Cells(3, 3) = Eps4
Cells(3, 4) = Iter
' Komputasi "Machine Epsilon" dalam DOUBLE PRECISION
Call CalcMachineEpsMD(Eps8, Iter)
' Hasil komputasi:
Cells(4, 3) = Eps8
Cells(4, 4) = Iter
End Sub
Pemrograman PASCAL untuk Epsilon Machine (#1):
Software Dolphin Bay
Pemrograman PASCAL untuk Epsilon Machine (#2):
Varian lain dalam EZY PASCAL
Varian lain dalam EZY PASCAL
Pemrograman PASCAL untuk Epsilon Machine (#3):
“
Pemrograman FORTRAN untuk Epsilon Machine (#1):
Menggunakan FORTRAN
Pemrograman FORTRAN untuk Epsilon Machine (#2):
Menggunakan FORTRAN
Pemrograman FORTRAN untuk DERET TAYLOR:
Komputasi untuk rutin:
Komputasi untuk rutin:
“
“
Sin(x)
Sin(x)
”
”
C Menghitung harga sin(x) dengan DERET TAYLOR
Program Sinus
Implicit NONE
Real*8 faktor,x,sum,NUM,DEN Integer N,I,IG,J
Write(*,'(A,$)') 'INPUT harga x sebagai ''nilai argumen'' : ' Read(*,*) x
Write(*,'(A,$)') 'INPUT harga N sebagai ''jumlah suku'' : ' Read(*,*) N faktor = 1 sum = x Do I = 1,N IG = 2*I + 1 NUM = 1.0 DEN = 1.0 faktor = -1*faktor Do J = 1,IG NUM = NUM*x DEN = DEN*J EndDo
sum = sum + faktor*(NUM/DEN) EndDo
Write(*,*) 'Harga NUMERIS : ',sum Write(*,*) 'Harga ANALITIS : ',sin(x) Read(*,*)
Stop End
Pemrograman PASCAL untuk DERET TAYLOR:
Komputasi untuk rutin:
Komputasi untuk rutin:
“
“
Sin(x)
Sin(x)
”
”
{ Menghitung harga sin(x) dengan DERET TAYLOR } Program Sinus; Var faktor,x : Extended; sum,NUM,DEN : Extended; N,I,IG,J : Integer; Begin
Write('INPUT harga x sebagai ''nilai argumen'' : '); Readln(x); Write('INPUT harga N sebagai ''jumlah suku'' : '); Readln(N); faktor := 1; sum := x; For I := 1 to N do Begin IG := 2*I + 1; NUM := 1.0; DEN := 1.0; faktor := -1*faktor; For J := 1 to IG do Begin NUM := NUM*x; DEN := DEN*J; End;
sum := sum + faktor*(NUM/DEN); End;
Writeln('Harga NUMERIS : ',sum); Writeln('Harga ANALITIS : ',sin(x)); Readln;
Pemrograman VBA untuk DERET TAYLOR:
Komputasi untuk rutin:
Komputasi untuk rutin:
“
“
Sin(x)
Sin(x)
”
”
{ Menghitung harga sin(x) dengan DERET TAYLOR } Program Sinus; Var faktor,x : Extended; sum,NUM,DEN : Extended; N,I,IG,J : Integer; Begin
Write('INPUT harga x sebagai ''nilai argumen'' : '); Readln(x); Write('INPUT harga N sebagai ''jumlah suku'' : '); Readln(N); faktor := 1; sum := x; For I := 1 to N do Begin IG := 2*I + 1; NUM := 1.0; DEN := 1.0; faktor := -1*faktor; For J := 1 to IG do Begin NUM := NUM*x; DEN := DEN*J; End;
sum := sum + faktor*(NUM/DEN); End;
Writeln('Harga NUMERIS : ',sum); Writeln('Harga ANALITIS : ',sin(x)); Readln;
Pemrograman PASCAL untuk SPAL (Bab IV) [#1]:
Program untuk Komputasi:
Program untuk Komputasi:
“
“
Eliminasi Gauss
Eliminasi Gauss
”
”
Program Eliminasi_Gauss; Const
NofEqn = 5; Type
RVector = Array[1..NofEqn] of Real;
RMatrix = Array[1..NofEqn,1..NofEqn] of Real; { === PROGRAM UTAMA === } Var A : RMatrix; b,x : RVector; I,J,K,N : Integer; Diag,FMul,Sum : Real; Begin
{ ---> Seksi ELIMINASI GAUSS <--- }
{INPUT N => Masukkan Jumlah Persamaan} N := 3;
{AKHIR dari INPUT N}
{INPUT A => Masukkan harga komponenen MATRIKS A}
A[1,1] := 6; A[1,2] := 3; A[1,3] := 2; A[2,1] := 3; A[2,2] := 5; A[2,3] := 7; A[3,1] := 2; A[3,2] := 4; A[3,3] := 3; {AKHIR dari INPUT A}
{INPUT b => Masukkan harga komponenen VEKTOR b}
b[1] := 26; b[2] := 26; b[3] := 17;
{AKHIR dari INPUT b}
{ ---> Pembentukan MATRIKS DIAGONAL ATAS <---} For I:=1 to N-1 do Begin Diag := A[I,I]; For J:=I+1 to N do Begin FMul := A[J,I]/Diag;
For K:=I to N do A[J,K] := A[J,K] - A[I,K]*FMul; b[J] := b[J] - b[I]*FMul;
End; End;
Pemrograman PASCAL untuk SPAL (Bab IV) [#2]:
Program untuk Komputasi:
Program untuk Komputasi:
“
“
Eliminasi Gauss
Eliminasi Gauss
”
”
DIAGONAL ATAS <--- }
{ ---> Backsubstitution <--- } x[N] := b[N]/A[N,N];
For I:=N-1 downto 1 do Begin
Sum := 0.0;
For J:=N downto I+1 do Sum := Sum + A[I,J]*x[J]; x[I] := (b[I] - Sum)/A[I,I];
End;
{ ---> AKHIR dari Backsubstitution <--- } { ---> AKHIR dari Seksi Eliminasi GAUSS <--- }
Writeln('Matriks DIAGONAL ATAS dan VEKTOR RUAS KANAN:');
For I:=1 to N do Begin For J:=1 to N do write(A[I,J]:1:4,' '); writeln(b[I]:1:4); End; Writeln;
Writeln('HASIL, berupa VEKTOR JAWAB:'); For I:=1 to N do Writeln('x[',I,'] = ',x[I]:1:6); End.
Pemrograman FORTRAN untuk
Pemrograman FORTRAN untuk
“
“
Regresi Linier
Regresi Linier
”
”
[#1]
[#1]
C Regresi Persamaan POLINOMIAL order 2 menggunakan C Netode Eliminasi Gauss-Jordan untuk Solusi SPAL C (Sistem Persamaan Aljabar Linier)
C
C --- C Deklarasi Jenis dan Variabel: C --- IMPLICIT NONE CHARACTER*12 NamaFile INTEGER iarg,NDAT PARAMETER (iarg = 7) PARAMETER (NDAT = 25) INTEGER i,j,ND,neq REAL*8 A(iarg,iarg) REAL*8 b(iarg),x(iarg) REAL*8 Xi(NDAT),Yi(NDAT)
DOUBLE PRECISION SumXX(0:4),SumXY(3) CALL system('cls')
WRITE(*,7) 'Enter Nama FILE (12 karakter maks.) : ' 7 FORMAT(A,$)
READ(*,*) NamaFile
OPEN (9,FILE=NamaFile) READ(9,*) ND
Pemrograman FORTRAN untuk
Pemrograman FORTRAN untuk
“
“
Regresi Linier
Regresi Linier
”
”
[#2]
[#2]
DO I=0,4 SumXX(I) = 0.0 END DO DO I=1,3 SumXY(I) = 0.0 END DO SumXX(0) = ND DO J=1,ND READ(9,*) Xi(J),Yi(J)
SumXX(1) = SumXX(1) + Xi(J) SumXX(2) = SumXX(2) + Xi(J)**2 SumXX(3) = SumXX(3) + Xi(J)**3 SumXX(4) = SumXX(4) + Xi(J)**4 SumXY(1) = SumXY(1) + Yi(J)
SumXY(2) = SumXY(2) + Xi(J)*Yi(J) SumXY(3) = SumXY(3) + Xi(J)**2*Yi(J) END DO
C Pengolahan DATA menjadi Koefisien MATRIKS: DO I=1,3 DO J=1,3 A(I,J) = SumXX(6-I-J) END DO B(I) = SumXY(4-I) END DO
Pemrograman FORTRAN untuk
Pemrograman FORTRAN untuk
“
“
Regresi Linier
Regresi Linier
”
”
[#3]
[#3]
C Proses Pemasukan JUMLAH PERSAMAAN: C --- neq = 3
C Proses Pemanggilan Subprogram Eliminasi Gauss-Jordan: C --- CALL EGAUSS(neq,A,x,b)
C Pemaparan/penyajian Hasil Perhitungan: C --- DO i = 1,neq
WRITE(*,40) 'x(',i,') = ',x(i) ENDDO
40 FORMAT (5X,A,I1,A,F12.7) STOP
Pemrograman FORTRAN untuk
Pemrograman FORTRAN untuk
“
“
Regresi Linier
Regresi Linier
”
”
[#3]
[#3]
SUBROUTINE EGAUSS(n,A,x,b)
C ---C SUBROUTINE ELIMINASI GAUSS (tanpa "PIVOTING"):
C Solusi SISTEM Persamaan Aljabar Linier (SPAL) dengan C format pers. matriks: [A].[x] = [b], dengan rincian sbb: C n = jumlah persamaan aljabar linier (dimensi SPAL)
C A = matriks bjr sangkar nxn yang berisi koef. Pers., C x = vektor variabel pers. yang akan dicari harganya C b = VRK yang berisi harga-harga persamaan tunggal | C ---C Deklarasi Variabel: C --- INTEGER n REAL*8 A(7,7),b(n),x(n) INTEGER i,j,k REAL*8 PIVOT,MULT,TOP
C Proses solusi: (a) Substitusi dan Eliminasi C ---
Pemrograman FORTRAN untuk
Pemrograman FORTRAN untuk
“
“
Regresi Linier
Regresi Linier
”
”
[#3]
[#3]
PIVOT = A(j,j) DO i = j+1,n
MULT = A(i,j)/PIVOT DO k = j+1,n
A(i,k) = A(i,k) - MULT*A(j,k) ENDDO
b(i) = b(i) - MULT*b(j) ENDDO
ENDDO
C Proses solusi: (b) Substitusi Balik C --- x(n) = b(n)/A(n,n)
DO i = n-1,1,-1 TOP = b(i) DO k = i+1,n
TOP = TOP - A(i,k)*x(k) ENDDO
x(i) = TOP/A(i,i) ENDDO
RETURN END