Contoh-Contoh Pemrograman Lanjut: VBA/MS-Excel, PASCAL, dan FORTRAN (Epsilon Machine, Interpolasi dan Metode Newton-Raphson) Prof. Dr. Ir. Setijo Bismo, DEA. Departemen Teknik Kimia FTUI 09 Oktober 2015
JANGAN LUPA dan HARUS SELALU DIINGAT! 2 (DUA) Cara Membuka Editor Macros ( VBA )
Pemrograman VBA Macros untuk Epsilon Machine (#1): Skematis Pemrograman dan keterkaitan-letak Perhatikan POSISI: A1, B1, C1, A3, B3, C3, D3, A4, B4, C4, D4
Pemrograman VBA Macros untuk Epsilon Machine (#2): Sub-Program: Scripting atau Listing Out Macro List#1 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-Program: Scripting atau Listing Out Macro List#2 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 EZY PASCAL EpsM Variant#1
Pemrograman PASCAL untuk Epsilon Machine (#2): Varian lain dalam EZY PASCAL EpsM Variant#2
Pemrograman PASCAL untuk Epsilon Machine (#3): SINGLE dan DOUBLE Precision dalam EZY PASCAL EpsM Variant#3
Pemrograman FORTRAN untuk Epsilon Machine (#1): Menggunakan FORTRAN Silverfrost - PLATO
Pemrograman FORTRAN untuk Epsilon Machine (#2): Menggunakan FORTRAN Silverfrost - PLATO
Pemrograman FORTRAN untuk DERET TAYLOR: Komputasi untuk rutin: 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: 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; End.
Pemrograman VBA untuk DERET TAYLOR: Komputasi untuk rutin: Sin(x)
Pemrograman PASCAL untuk SPAL (Bab IV) [Hal#1]: Program untuk Komputasi: 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; { ---> AKHIR dari Pembentukan MATRIKS
DIAGONAL ATAS <--- } { ---> Backsubstitution <--- } x[n] := b[n]/a[n,n]; For I:=N-1 downto 1 do Begin Sum := 0.0; Pemrograman PASCAL untuk SPAL (Bab IV) [Hal#2]: Program untuk Komputasi: Eliminasi Gauss 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. { === AKHIR dari Program Utama === }
Pemrograman FORTRAN untuk Regresi Linier [Hal#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 Regresi Linier [Hal#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 Regresi Linier [Hal#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 END
Pemrograman FORTRAN untuk Regresi Linier [Hal#4] 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 ------------------------------------------- DO j = 1,n-1
Pemrograman FORTRAN untuk Regresi Linier [#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