Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

Tugas Permodelan Teknik Kimia

Oleh :

Jupiter Eresta Jaya Teknik Kimia 1206230183 Kelompok 12 Departemen Teknik Kimia, FakultasTeknik Universitas Indonesia Depok, 2014

A. Program Eliminasi Gauss C++ Program


#include <iostream> #include <cstdio> #include <cmath> #define NEQ 10 using namespace std; void ElimGaussCPP (int N, double A[][NEQ], double x[], double b[]); int main() { double A[NEQ] [NEQ],b[NEQ],x[NEQ]; int I,J,N; printf("Jumlah Persamaan (= N) : "); scanf("%d",&N);

for (I=1; I<=N; I++) { for (J=1; J<=N; J++) { printf("A[%d,%d] = ",I,J); cin>>A[I][J]; }

printf("B[%d] = ",I); cin>>b[I]; } printf("\nMatriks soal dan VRK-nya adalah:\n"); for (I=1; I<=N; I++) { for (J=1; J<=N; J++)printf("%8.4f%s",A [I][J]," "); printf("%8.4f\n",b[I]); } ElimGaussCPP(N,A,x,b); printf("\nMatriks DIAGONAL ATAS dan VRK-nya adalah:\n"); for (I=1; I<=N; I++) { for (J=1; J<=N; J++) printf("%8.4f%s",A[I][J]," "); printf("%8.4f\n",b[I]); } printf("\nHASIL, berupa Vektor Jawab : \n"); for (I=1; I<=N; I++) printf("x[%d] = %8.4f\n",I,x[I]); } void ElimGaussCPP (int N,double A[][NEQ],double x[],double b[]) { int I,J,K; double Diag,FMul,Sum;

for (I=1; I<=N; I++)

{ Diag = A[I][I]; for (J=I+1; J<=N; J++) { FMul = A[J][I]/Diag; for (K=I; K <=N; K++) A[J][K] = A[J][K] - A[I][K]*FMul; b[J] = b[J] - b[I]*FMul; } } x[N] = b[N]/A[N] [N]; for (I=N-1; I>=1; I--) { Sum = 0,0; for (J=N;J>=I+1; J--) Sum = Sum + A[I][J]*x[J]; x[I] = (b[I] - Sum)/A[I][I]; } }

Hasil

B. Program Eliminasi Gauss Pascal Program


program SPL_Gauss_Jordan;

const maxr = 8; maxc = 8; type fltpt = real; arys = array[1..maxr] of fltpt;

ary2s= array[1..maxr,1..maxc] of fltpt; var y,coef: arys; A,B: ary2s; N,M,I,J: integer; error: boolean;

procedure get_data(var A: ary2s; var Y: arys; var N, M: integer);

var I,J: integer;

begin writeln; repeat write('Masukkan Jumlah Persamaan: '); readln(N); M :=N until N<maxr; if N>1 then begin for I:=1 to N do begin writeln('Persamaan',I:3);

for J:=1 to N do begin write(J:3,':'); read(A[I,J]) end;

write(',C:'); readln(Y[I]) end; writeln; for I:=1 to N do begin for J:=1 to M do write(A[I,J]:7:4,' '); writeln(':',Y[I]:7:4) end; writeln end end;

procedure write_data;

var I: integer;

begin for I:=1 to M do write(coef[I]:9:5); writeln end;{ write_data }

procedure gaussj (var B: ary2s; Y: arys; var coef: arys; Ncol: integer; var error: boolean);

var W: array[1..maxc,1..maxc] of fltpt; index: array[1..maxc,1..3] of integer; I,J,K,L,Nv,irow,icol,N,L1 : integer; determ, pivot, T, big: fltpt;

procedure swap(var A,B: fltpt);

var hold: fltpt;

begin

hold:=A; A:=B; B:=hold end;

begin error:= false; Nv:=1; N:=Ncol; for I:=1 to N do begin W[I,1] := Y[I]; index[I,3] := 0 end; determ := 1.0; for I :=1 to N do begin big := 0.0; for J:= 1 to N do begin if index[J,3] <> 1 then begin for K :=1 to N do begin if index[K,3]>1 then

begin write('Error: Matriks Singular'); error:= true; exit end; if index[K,3]<1 then if abs(B[J,K]) > big then begin irow := J; icol := K; big := abs(B[J,K]) end end end end; index[icol,3]:=index[icol,3] + 1; index[I,1]:= irow; index[I,2]:= icol;

if irow<>icol then begin determ := - determ; for L := 1 to N do swap(B[irow,L],B[icol,L]); if Nv > 0 then

for L := 1 to Nv do swap(W[irow,L],W[icol,L]) end;

pivot:= B[icol,icol]; determ := determ*pivot; B[icol,icol] := 1.0; for L:=1 to N do B[icol,L] := b[icol,L]/pivot; if Nv>0 then for L:=1 to Nv do W[icol,L] := W[icol,L]/pivot;

for L1 := 1 to N do begin if L1<>icol then begin T:= B[L1,icol]; B[L1,icol]:=0.0; for L:=1 to N do B[L1,L]:= B[L1,L] - B[icol,L]*T; if Nv > 0 then for L:= 1 to Nv do W[L1,L]:= W[L1,L] - w[icol,L]*T; end {if L1<>icol}

end end;

for I:=1 to N do begin L:= N - I + 1; if index[L,1]<> index[L,2] then begin irow:= index[L,1]; icol:= index[L,2]; for K:= 1 to N do swap(B[K,irow],B[k,icol]) end end;

for K:=1 to N do if index[K,3] <> 1 then begin writeln('Error: Matriks Singular'); error:= true; exit end; for I:=1 to N do coef[I]:= W[I,1]; end;

begin {program utama} writeln; writeln ('Sistem Persamaan Linear Eliminasi Gauss-Jordan'); writeln('***************************************'); repeat get_data(A,Y,N,M); if N> 1 then begin for I:= 1 to N do for J:= 1 to N do B[I,J] := A[I,J]; gaussj(B,Y,coef,N,error); if not error then write_data end; until N < 2; end.

Hasil

C. Program Eliminasi Gauss Fortran Program


C C C PROGRAM Solusi Sistem Persamaan Aljabar Linier (SPAL) atau atau Persamaan Aljabar Linier Simultan Deklarasi Jenis dan Variabel

C ----------------------------------------------------------IMPLICIT NONE INTEGER IARG PARAMETER (iarg=7) INTEGER i,j,neq REAL*4 A(iarg,iarg) REAL*4 b(iarg),x(iarg) CALL system('clear')

C C

Proses Pemasukan Harga Variabel : ------------------------------WRITE(*,10)'Jumlah Persamaan : ' READ (*,*) neq DO i=1,neq DO j=1,neq WRITE(*,20) 'A(',1,',',J,'): ' READ(*,*) A(i,j) ENDDO WRITE(*,30)'b(',i,'): ' READ(*,*)b(i) ENDDO

write(*,*) " HASIL MATRIKS SOAL" do i=1,neq write(*,*)(A(i,j),j=1,neq);write(*,*)(B(i)) continue end do

C C

Proses Pemanggilan Subprogram Eliminasi Gauss-Jordan: ----------------------------------------------------CALL EGAUSS(neq,A,x,b)

C C

Pemaparan/penyajian Hasil Perhitungan: --------------------------------------

WRITE(*,*)"HASIL MATRIKS DIAGONAL ATAS:" do i=1,neq write(*,*)(A(i,j),J=1,neq); write(*,*)(B(i)) continue end do

write(*,*) "HASIL VEKTOR JAWAB" DO i=1,neq WRITE(*,40) 'x(',i,')= ',x(i) ENDDO

10 20 30 40

FORMAT (3X,A,$) FORMAT (3X,A,I1,A1,I1,A,$) FORMAT (5X,A,I1,A,$) FORMAT (5X,A,I1,A,F12.7) STOP END

SUBROUTINE EGAUSS(n,A,x,b) C C C C --------------------------------------------------------------------SUBPROGRAM ELIMINASI GAUSS (tanpa "PIVOTING"): Merupakan solusi Sistem Persamaan Aljabar Linier (SPAL) dengan format persamaan matriks: [A].[x]=[b], dengan rincian sbb | | |

C C C C C

n = jumlah persamaan aljabar linier (dimensi SPAL)

| | | |

A = matriks bujur sangkar n x n yang berisi koefisien persamaan, x = vektor variabel persamaan yang akan dicari harga-harganya b = vektor ruas kanan yang berisi harga-harga persamaan tunggal ---------------------------------------------------------------------

C C

Deklarasi Variabel : -------------------INTEGER n REAL*4 A(7,7),b(n),x(n) INTEGER i,j,k REAL*4 PIVOT,MULT,TOP

C C

Proses solusi: (a) Substitusi dan Eliminasi ------------------------------------------DO j=1,n-1 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 C

Proses solusi: (b) Substitusi Balik ----------------------------------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

Hasil

You might also like