Anda di halaman 1dari 7

Willy Dinata

19/439732/TK/48462

TUGAS MINGGU 11

# -*- coding: utf-8 -*-


"""
Created on Thu Jun 10 15:42:01 2021
@author: Willy Dinata
NIM: 19/439732/TK/48462
"""

import numpy as np
import matplotlib.pyplot as plt

Langkah 1. Memasukkan data yang diketahui pada soal


#Data
Cain = 1
Cbin = 3
Ccin = 0
Cdin = 0
k1 =2
k2 = 2.5
Fvi = np.array([1,1.5,2,2.5,3])
Cdi = np.array([0.8501,0.8123,0.7921,0.7681,0.7381])
eps = 1e-4
tol = 1e-5

Langkah 2. Mendefinisikan fungsi yang diketahui pada soal dengan input Ci (matriks Ca,
Cb, Cc, dan V), Fv (flowrate), dan Cd (konsentrasi D).
def fungsi (Ci,Fv,Cd):
Fx = np.zeros(np.size(Ci))
Ca = Ci[0]
Cb = Ci[1]
Cc = Ci[2]
Willy Dinata
19/439732/TK/48462

V = Ci[3]
r1 = k1*Ca*Cb**2
r2 = k2*Cc*np.sqrt(Cd)
Fx[0] = Fv*(Cain-Ca)+V*(-r1)
Fx[1] = Fv*(Cbin-Cb)+V*(-r1-r2)
Fx[2] = Fv*(Ccin-Cc)+V*(r1-r2)
Fx[3] = Fv*(Cdin-Cd)+V*r2
return Fx

Langkah 3. Lakukan iterasi dengan metode invers matriks untuk setiap Fv dan Cd dengan
tebakan awal = 1.
def Fungsi2 (Fv,Cd):
xold = np.array([1,1,1,1])
n = len(xold)
errmax = 1

while errmax>tol:
fold = fungsi(xold,Fv,Cd)
Z = np.zeros([n,n]) #Membuat matriks Z
for i in range(0,n):
tanda = np.zeros(n)
tanda[i] = 1
xplus = xold+tanda*eps
fplus = fungsi(xplus,Fv,Cd)
xmin = xold-tanda*eps
fmin = fungsi(xmin,Fv,Cd)
Z[:,i] = (fplus-fmin)/(2*eps)
Zinv = np.linalg.inv(Z) #Menghitung invers matriks Z
xnew = xold-Zinv@fold
errmax = np.max(np.abs(xnew-xold))
xold = xnew
return xnew
Willy Dinata
19/439732/TK/48462

xnew = np.zeros([5,4])
for i in range (5):
xnew[i,:] = Fungsi2(Fvi[i],Cdi[i])

Langkah 4. Membuat tabel pertama


table = np.zeros([len(Fvi),6])
table[:,0] = Fvi
table[:,1] = Cdi
table[:,2] = xnew[:,0]
table[:,3] = xnew[:,1]
table[:,4] = xnew[:,2]
table[:,5] = xnew[:,3]

Langkah 5. Lakukan iterasi dengan metode invers matriks pada Fv = 1L/jam dan Cd =
0.8501 dengan nilai tebakan awal = 1
#Langkah Iterasi pada Fv=1L/jam dan Cd=0.0851
Fv = Fvi[0]
Cd = Cdi[0]
xold = np.array([1,1,1,1])
n = len(xold)
errmax = 1
Ca1 = [] #Membuat tempat untuk Ca=Ca1
Cb1 = [] #Membuat tempat untuk Cb=Cb1
Cc1 = [] #Membuat tempat untuk Cc=Cc1
Vr1 = [] #Membuat tempat untuk Vr=Vr1
errtot1 = [] #Membuat tempat untuk err=errtot1

while errmax>tol:
fold = fungsi(xold,Fv,Cd)
Z = np.zeros([n,n]) #Membuat matriks Z
for i in range(0,n):
Willy Dinata
19/439732/TK/48462

tanda = np.zeros(n)
tanda[i] = 1
xplus = xold+tanda*eps
fplus = fungsi(xplus,Fv,Cd)
xmin = xold-tanda*eps
fmin = fungsi(xmin,Fv,Cd)
Z[:,i] = (fplus-fmin)/(2*eps)
Zinv = np.linalg.inv(Z) #Menghitung invers matriks Z
xnew = xold-Zinv@fold
error_x = np.abs(xnew-xold)
errmax = np.max(error_x)
xold = xnew

Ca1.append(xnew[0]) #Memanggil hasil perhitungan Ca sebagai Ca1


Cb1.append(xnew[1]) #Memanggil hasil perhitungan Cb sebagai Cb1
Cc1.append(xnew[2]) #Memanggil hasil perhitungan Cc sebagai Cc1
Vr1.append(xnew[3]) #Memanggil hasil perhitungan Vr sebagai Vr1
errtot1.append(sum(error_x)) #Memanggil hasil perhitungan err sebagai errtot1

Langkah 6. Membuat tabel kedua


table2 = np.zeros([len(errtot1),5])
table2[:,0] = Ca1
table2[:,1] = Cb1
table2[:,2] = Cc1
table2[:,3] = Vr1
table2[:,4] = errtot1

Langkah 7. Lakukan iterasi dengan metode invers matriks pada Fv = 3L/jam dan Cd =
0.7381 dengan nilai tebakan awal = 1
#Langkah Iterasi pada Fv=3L/jam dan Cd=0.7381
Fv = Fvi[-1]
Cd = Cdi[-1]
Willy Dinata
19/439732/TK/48462

xold = np.array([1,1,1,1])
n = len(xold)
errmax = 1
Ca2 = [] #Membuat tempat untuk Ca=Ca2
Cb2 = [] #Membuat tempat untuk Cb=Cb2
Cc2 = [] #Membuat tempat untuk Cc=Cc2
Vr2 = [] #Membuat tempat untuk Vr=Vr2
errtot2 = [] #Membuat tempat untuk err=errtot2

while errmax>tol:
fold = fungsi(xold,Fv,Cd)
Z = np.zeros([n,n]) #Membuat matriks Z
for i in range(0,n):
tanda = np.zeros(n)
tanda[i] = 1
xplus = xold+tanda*eps
fplus = fungsi(xplus,Fv,Cd)
xmin = xold-tanda*eps
fmin = fungsi(xmin,Fv,Cd)
Z[:,i] = (fplus-fmin)/(2*eps)
Zinv = np.linalg.inv(Z) #Menghitung invers matriks Z
xnew = xold-Zinv@fold
error_x = np.abs(xnew-xold)
errmax = np.max(error_x)
xold = xnew

Ca2.append(xnew[0]) #Memanggil hasil perhitungan Ca sebagai Ca2


Cb2.append(xnew[1]) #Memanggil hasil perhitungan Cb sebagai Cb2
Cc2.append(xnew[2]) #Memanggil hasil perhitungan Cc sebagai Cc2
Vr2.append(xnew[3]) #Memanggil hasil perhitungan Vr sebagai Vr2
errtot2.append(sum(error_x)) #Memanggil hasil perhitungan err sebagai errtot2
Willy Dinata
19/439732/TK/48462

Langkah 8. Membuat tabel ketiga


table3 = np.zeros([len(errtot2),5])
table3[:,0] = Ca2
table3[:,1] = Cb2
table3[:,2] = Cc2
table3[:,3] = Vr2
table3[:,4] = errtot2

Langkah 9. Print tabel pertama, kedua, dan ketiga


print('Hasil Iterasi tiap Fv dan Cd')
header = ('Fv','Cd','Ca','Cb','Cc','Vr')
print('--------------------------------------------------------------')
print ('{:^10s}{:^10s}{:^10s}{:^10s}{:^10s}{:^10s}'.format(*header))
print('--------------------------------------------------------------')
for baris in table:
print ('{:^10.2f}{:^10.2f}{:^10.4f}{:^10.4f}{:^10.4f}{:^10.4f}'.format(*baris))
print('--------------------------------------------------------------')

print('Langkah Iterasi pada Fv = 1L/jam dan Cd = 0.8501')


header = ('Ca','Cb','Cc','Vr','Total Error')
print('--------------------------------------------------------------')
print('{:^10s}{:^10s}{:^10s}{:^10s}{:^10s}'.format(*header))
print('--------------------------------------------------------------')
for baris in table2:
print('{:^10.4f}{:^10.4f}{:^10.4f}{:^10.4f}{:^10.4e}'.format(*baris))
print('--------------------------------------------------------------')

print('Langkah Iterasi pada Fv = 3L/jam dan Cd = 0.7381')


print('--------------------------------------------------------------')
print('{:^10s}{:^10s}{:^10s}{:^10s}{:^10s}'.format(*header))
print('--------------------------------------------------------------')
for baris in table3:
Willy Dinata
19/439732/TK/48462

print('{:^10.4f}{:^10.4f}{:^10.4f}{:^10.4f}{:^10.4e}'.format(*baris))
print('--------------------------------------------------------------')

Anda mungkin juga menyukai