Anda di halaman 1dari 52

LAPORAN PRAKTIKUM KOMPUTASI BIOMEDIS

CHAPTER 5
SYSTEM OF LINEAR EQUATION : JACOBI & GAUSS
SEIDEL ITERATION
Hari, Tanggal : Selasa, 5 Oktober 2021 Jam Ke : 3-4

Oleh :
Reza Ummam Nor (081911733012)
KELAS T1
Dosen Pembimbing :
ALFIAN PRAMUDITA PUTRA, S.T., M.Sc.

LAPORAN KOMPUTASI BIOMEDIS


FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS AIRLANGGA
2021
A. TUJUAN
Menentukan hasil sistem persamaan linier dengan menggunakan metode iterasi
Jacobi dan Gauss Seidel.

B. DASAR TEORI
Python adalah bahasa pemrograman interpretatif multiguna. Tidak
seperti bahasa lain yang susah untuk dibaca dan dipahami, python lebih
menekankan pada keterbacaan kode agar lebih mudah untuk memahami
sintaks. Hal ini membuat Python sangat mudah dipelajari baik untuk pemula
maupun untuk yang sudah menguasai bahasa pemrograman lain (Henri, 2003).
Salah satu penerapan phyton adalah untuk komputasi. Contoh bentuk
komputasi adalah penyelesaian system persamaan linier. Dengan demikian,
adanya komputasi yang memanfaatkan phyton dapat mempermudah pekerjaan
manusia dalam mencari nilai variable dari suatu system persamaan linier
(Capra dkk, 2010).
Untuk meminimalkan kesalahan pada proses pembulatan pada metode
eliminasi Gauss, sistem persamaan linier dapat diselesaikan dengan
menggunakan metode iterasi. Ada dua jenis metode iterasi, yaitu metode iterasi
Jacobi dan metode iterasi Gauss-Seidel (Kiussalas, 2013).
Bentuk umum persamaan linear ditunjukkan di bawah ini (Modul Komputasi
Biomedis Praktikum, 2021).
𝑎11𝑋1 + 𝑎12𝑋2 … … … + 𝑎1𝑛𝑋𝑛 = 𝑏1
𝑎21𝑋1 + 𝑎22𝑋2 … … … + 𝑎2𝑛𝑋𝑛 = 𝑏2
𝑎31𝑋1 + 𝑎32𝑋2 … … … + 𝑎3𝑛𝑋𝑛 = 𝑏3
…………..…………………………………….
𝑎𝑛1𝑋1 + 𝑎𝑛2𝑋2 … … … + 𝑎𝑛𝑛𝑋𝑛 = 𝑏𝑛

Dengan 𝑎𝑘𝑘 ≠ 0, 𝑘 = 1,2, … … , 𝑛 . Maka persamaan iterasi dapat ditulis


sebagai berikut.
𝑘+1
𝑏𝑛 − (𝑎𝑛1 𝑥1𝑘 + 𝑎𝑛2 𝑥2𝑘 + … + 𝑎𝑛𝑛−1 𝑥𝑛−1
𝑘
)
𝑥𝑛 =
𝑎𝑛𝑛

Sebagai kondisi iteratif berhenti, persamaan kesalahan relatif di bawah ini


dapat digunakan.
𝑥𝑖𝑘+1 − 𝑥𝑖𝑘
| |
𝑥𝑖𝑘+1
Syarat untuk mendapatkan iterasi konvergen adalah |𝑎𝑖𝑖 | > ∑𝑛𝑗=1,𝑗≠𝑖|𝑎𝑖𝑗 |

1. JACOBI ITERATION METHOD


Jika tebakan awal adalah X(0),
𝑋 (0) = (𝑥1(0) , 𝑥2(0) , … , 𝑥𝑛 (0) )

Selanjutnya prosedur iterasi didefinisikan dengan persamaan berikut,


𝑏𝑖 − ∑𝑛𝑗=1,𝑗≠𝑖 𝑎𝑖𝑗 𝑥𝑗𝑘
𝑥𝑛𝑘+1 = , 𝑘 = 0,1,2, …
𝑎𝑖𝑖

2. GAUSS SEIDEL ITERATION METHOD


Dalam metode iterasi Gauss-Seidel, setiap x baru yang baru diperoleh
langsung digunakan untuk persamaan berikutnya. Prosedur iterasi
didefinisikan dengan menggunakan persamaan berikut.
𝑏𝑖 − ∑𝑛𝑗=1,𝑗≠𝑖 𝑎𝑖𝑗 𝑥𝑗𝑘+1 − ∑𝑛𝑗=𝑖+1 𝑎𝑖𝑗 𝑥𝑗𝑘
𝑥𝑛𝑘+1 = , 𝑘 = 0,1,2, …
𝑎𝑖𝑖

Algoritma
1. Masukkan dimensi matriks.
2. Matriks masukan A dan B.
3. Tentukan batas kesalahan.
4. Tentukan nilai awal xi, untuk i=1 sampai n
5. K=1
𝑥𝑖𝑘+1 −𝑥𝑖𝑘
6. Selama (| | > 𝑒𝑟𝑟𝑜𝑟) Langkah 6 sampai 15 tetap dilakukan.
𝑥𝑖𝑘+1
7. For i=1 sampai n, Langkah 7 sampai 13 dilakukan
8. Sum=0
9. For j=1 sampai n, Langkah 9 sampai 10 dilakukan
10. Jika j≠i, Langkah 10 dilakukan
11. 𝑠𝑢𝑚 = 𝑠𝑢𝑚 + 𝑎𝑖𝑗 ∗ 𝑥𝑗
12. 𝑥𝑖 = (𝑏𝑖 − 𝑠𝑢𝑚)/𝑎𝑖,𝑖
𝑥𝑖𝑘+1 −𝑥𝑖𝑘
13. Menghitung | |
𝑥𝑖𝑘+1
14. Mencetak (𝑘, 𝑥1 , 𝑥2 , … , 𝑥𝑛
15. 𝑘 = 𝑘 + 1

C. CODING, HASIL, DAN ANALISIS


Link Google Collab :
https://colab.research.google.com/drive/1_Brg2j2-
BCyjZvSNbkNEIym0wy0LYfew?usp=sharing
CONTOH
1. CODE ITERATION JACOBI
#REZA UMMAM NOR
#081911733012
#JACOBI ITERATION

import numpy as np
from numpy import *
import pylab

A=np.array([[7,-1,-3],[1,-5,-1],[2,1,-5]])
B=np.array([[26],[14],[9]])
xawal=np.array([[1.0],[2.0],[2.0]])
n=len(A)
xbaru=zeros((n,1),float)
maxter=25
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
print(k,'/n',xbaru)
k+=1
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
pylab.plot(kx,x3,'-g')
Pembahasan :
Program ini bertujuan untuk menyelesaikan system persamaan
berikut,
2𝑥1 + 𝑥2 + 5 𝑥3 = 9
𝑥1 − 5𝑥2 − 𝑥3 = 14
7𝑥1 − 𝑥2 + 3𝑥3 = 26
Program ini nantinya akan mencari nilai x1,x2, dan x3. Sebelum memulai
membuat program Langkah pertama yang harus diperhatikan adalah uji
konvergensi suatu system linier agar nantinya program dalam menemukan
nilai dari tiap variable. Syaratnya yaitu memenuhi persamaan berikut |𝑎𝑖𝑖 | >
∑𝑛𝑗=1,𝑗≠𝑖|𝑎𝑖𝑗 |. Atau dengan kata lain elemen yang menjadi diagonal harus
memiliki koefisien paling besar dibandingkan koefisien variable lain dalam
satu persamaan. Dengan demikian persamaan pada soal belum memenuhi
syarat konvergensi dan harus ditentukan urutannya agar konvergen. Berikut
system persamaan linier hasil uji konvergensi yang akan digunakan dalam
program,
7𝑥1 − 𝑥2 + 3𝑥3 = 26
𝑥1 − 5𝑥2 − 𝑥3 = 14
2𝑥1 + 𝑥2 + 5 𝑥3 = 9
Tanda # pada awal code merupakan komentar yang tidak diproses
program. Bagian tersebut menampilkan identitas programmer serta program
yang dibuat yaitu penyelesaian system persamaan linier menggunakan
metode iterasi Jacobi.
Syntax import berfungsi untuk mengimpor modul pada phyton.
Numpy merupakan modul yang didalamnya terdapat operasi matematika
serta array yang dibutuhkan pada program ini. Lalu juga terdapat modul
pylab untuk menampilkan plot.
Selanjutnya adalah mendeklarasikan array yang akan digunakan
yaitu array A dan B. Array a berisi matriks dengan elemen koefisien tiap-
tiap variable yang akan dicari nilainya. Karena terdapat 3 variabel dan 3
persamaan maka array a berukuran 3x3. Disisi lain array b memuat matriks
dengan elemen hasil dari tiap persamaan. Karena ada 3 persamaan maka
ukuran array yaitu 3x1 atau membentuk 1 kolom. Berikut ilustrasinya,

Matriks awal :

7 −1 3 𝑥1 26 7 −1 3 26
[1 −5 −1] [𝑥2 ] = [14] → 𝐴 = [1 −5 −1] ; 𝐵 = [14]
2 1 5 𝑥3 9 2 1 5 9

Selain array A dan B juga ada array xawal yang merupakan tebakan
awal nilai variable dimana x1(0)=1, x2(0) = x3 (0) = 2.
Tahap selanjutnya adalah mencari panjang array A dengan syntax
len. Diketahui panjang array A atau banyaknya kolom adalah 3. Nilai
tersebut dimasukkan ke variable n sehingga n=3.
Langkah berikutnya membuat array untuk menampung nilai
variable-variabel yang ingin diketahui berdasarkan iterasi yang telah
dilakukan. Array tersebut adalah xbaru dengan ukuran 3x1 dan sementara
diisi elemen nol semua sebelum digantikan oleh nilai variable yang ingin
dicari.
Selanjutnya mendeklarasikan variable yang memuat jumlah
maksimum iterasi yang dilakukan yaitu maxter dengan nilai 25 kali iterasi.
Dikenalkan pula variable k yang merepresentasikan nilai iterasi saat blok
looping bekerja. Nilai k diawali dengan 0.
Code selanjutnya adalah mencetak array A, B, dan xawal dengan
syntax print.
Tahap berikutnya membuat 4 array kosong. Pertama array x1 yang
memuat nilai x1 hasil tiap iterasi. Kedua array x2 yang memuat nilai x2 hasil
tiap iterasi. Ketiga array x3 yang memuat nilai x3 hasil tiap iterasi. Dan yang
keempat array kx yang memuat nilai iterasi pada setiap perulangan
Selanjutnya adalah masuk blok looping yang memuat program untuk
menentukan niai x1, x2, dan x3. Blok looping ini menggunakan kombinasi
1 looping while, 2 looping for, dan 1 if statement.

while (k<=maxter) :
Looping tersebut menggunakan konstruk while dengan batasan
perulangan yang dilakukan kurang dari sama dengan maxter atau 25 kali
perulangan. Looping ini berfungsi sebagai nilai iterasi yang dilakukan
diwakili dengan variable k.

for i in range (0,n) :


sum=0
Looping kedua tersebut berada di dalam looping pertama dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai baris
matriks. Range looping tersebut dari 0 sampai kurang dari n atau dari baris
pertama sampai ketiga. Variabel sum digunakan untuk proses pada looping
selanjutnya dan diberikan nilai awal nol.

for j in range (0,n) :


if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
Looping ketiga tersebut berada di dalam looping kedua dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai kolom
matriks. Range looping tersebut dari 0 sampai kurang dari n atau dari kolom
pertama sampai ketiga.
Di dalam looping ini terdapat if statement yang meloloskan kondisi
saat j tidak sama dengan i. Maknanya proses akan dilakukan untuk elemen
pada nilai kolom yang tidak sama dengan nilai baris saat iterasi terjadi. Atau
sederhananya proses terjadi pada elemen yang bukan merupakan diagonal
matriks.
Proses yang dilakukan yaitu menghitung nilai sum. Untuk
mendapatkannya dengan cara nilai sum awal ditambah hasil kali antara
elemen koefisien dan nilai awal variable yang bersesuaian. Nilai sum ini
akan terus di update dari elemen pada kolom pertama hingga kolom terakhir
pada satu baris yang sama. Tentunya elemen diagonal tidak akan diproses
akibat kondisi if statement.

xbaru[i]=(B[i]-sum)/A[i,i]
Code tersebut berada dibawah looping ketiga namun sejajar dengan
looping kedua. Artinya nilai sum yang didapatkan pada looping ketiga akan
digunakan untuk proses pada looping kedua. Code ini berfungsi untuk
mencari nilai x1, x2, dan x3 untuk setiap iterasi. Proses ini berjalan urut
sesuai looping kedua yaitu dari baris pertama hingga baris ke tiga. Nilai
variable tersebut didapatkan dengan cara mengurangi nilai hasil persamaan
(array B) dengan sum lalu dibagi dengan elemen diagonal baris yang
bersesuaian dengan iterasi. Dengan demikian dari persamaan/baris pertama
akan mendapatkan nilai x1. Lalu dari persamaan/baris kedua akan
mendapatkan nilai x2. Dan terakhir untuk persamaan/baris ke-3 akan
mendapatkan nilai x3. Nilai-nilai yang didapatkan tersebut akan diupdate ke
array xbaru.
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
print(k,'/n',xbaru)
Code tersebut berada di bawah looping kedua namun sejajar dengan
looping pertama. Maknanya hasil nilai x1,x2, dan x3 yang didapatkan pada
proses sebelumnya akan digunakan pada code ini. Code pertama berfungsi
mengupdate array xawal dengan array xbaru sehingga pada iterasi
berikutnya nilai xawal yang digunakan adalah nilai dari xbaru yang
didapatkan pada iterasi sebelumnya.
Code setelahnya berfungsi untuk menambah elemen pada array
x1,x2,x3, dan kx dibagian belakang memanfaatkan syntax append. Selain
itu terdapat code print untuk mencetak nilai k atau iterasi dan xbaru atau
array nilai variable yang dicari pada setiap iterasi.
Dibawah block looping terdapat syntax print untuk mencetak hasil
SPL dari program iterasi Jacobi ini yaitu array xbaru setelah iterasi ke 25.
Selain itu juga terdapat code untuk plot antara iterasi terhadap nilai x1,x2,
dan x3.
2. CODE ITERATION GAUSS SEIDEL
#REZA UMMAM NOR
#081911733012
#GAUSS SEIDEL ITERATION

import numpy as np
from numpy import *
import pylab

A=np.array([[7,-1,-3],[1,-5,-1],[2,1,-5]])
B=np.array([[26],[14],[9]])
xawal=np.array([[1.0],[2.0],[2.0]])
n=len(A)
xbaru=zeros((n,1),float)
maxter=25
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
print(k,'/n',xbaru)
k+=1
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
pylab.plot(kx,x3,'-g')
Pembahasan :
Program penyelesaian SPL melalui iterasi Gauss Seidell sama
seperti program dengan iterasi Jacobi. Perbedaannya hanya pada letak code
berikut,
xawal[:]=xbaru[:]
Jika pada iterasi Jacobi code berikut berada dalam looping kedua. Maka
pada iterasi Gauss Seidell code tersebut berada pada looping ketiga.
Maknanya, nilai xbaru yang didapatkan pada baris pertama yaitu nilai dari
x1 akan langsung digunakan untuk baris berikutnya tanpa menunggu
berganti iterasi. Hal ini berbeda dengan iterasi Jacobi dimana nilai x1,x2,
dan x3 baru digunakan untuk iterasi selanjutnya.

3. PERBANDINGAN HASIL
a) Iterasi Jacobi
b) Iterasi Gauss Seidell
c) Pembahasan
Berdasarkan hitungan manual penyelesaian untuk SPL pada soal
adalah x1=2, x2=-2, dan x3=-1.
Pada hasil program penyelesaian SPL melalui iterasi Jacobi tampak
nilai x1, x2, dan x3 didapatkan pada iterasi ke-22. Disisi lain untuk
program dengan metode iterasi Gauss Seidell, nilai x1, x2, dan x3
didapatkan pada iterasi ke-9.
Dengan demikian metode iterasi Gauss Seidell lebih disarankan
untuk penyelesaian SPL tersebut dibandingkan metode iterasi Jacobi
karena lebih cepat dalam menemukan nilai x1, x2, dan x3.
4. PERBANDINGAN PLOT
a) Iterasi Jacobi

b) Iterasi Gauss Seidell

c) Pembahasan
Berdasarkan plot yang didapat tampak untuk iterasi Jacobi tebakan
nilai x1, x2, dan x3 berfluktuatif saat mendekati nilai yang sebenarnya.
Sedangkan untuk iterasi Gauss Seidell tampak lebih konstan dan halus
mendekati nilai x1, x2, dan x3 yang sebenarnya. Dengan demikian hasil
metode iterasi Gauss Seidel lebih baik dibandingkan iterasi Jacobi.

D. TUGAS
1. Tentukan penyelesaian masalah biomedis “Pengembangan obat dan studi
toksisitas: animal-on-a-chip“. (Referensi: King M.R dan Mody N.A , 2010,
“Metode Numerik dan Statistik untuk Bioengineering”, Cambridge University
Press, New York, halaman 48) dengan menggunakan metode iterasi Jacobi dan
metode Iterasi Gauss-Seidel! Analisislah kelebihan dan kekurangan kedua
metode tersebut!

PENYELESAIAN :
a) Pada soal no.1 ini sama dengan task pada praktikum sebelumnya. Dengan
demikian proses penyelesaian langsung dimulai dari system persamaan
kompartemen paru-paru dan liver yang sudah didapatkan.
• Persamaan kompartemen paru-paru :
𝑁𝑂 𝑁𝑂
0.5𝑅 × 𝐶𝑙𝑖𝑣𝑒𝑟 + (1.5𝑅 − 3.237)𝐶𝑙𝑢𝑛𝑔 = −0.7 . . . (1)
𝑁𝑂 𝑁𝑂
𝑀𝑖𝑠𝑎𝑙𝑘𝑎𝑛 ∶ 𝐶𝑙𝑖𝑣𝑒𝑟 = 𝑥1 𝑑𝑎𝑛 𝐶𝑙𝑢𝑛𝑔 = 𝑥2
↔ 0.5𝑅𝑥1 + (1.5𝑅 − 3.237)𝑥2 = −0.7 . . . (1)

• Persamaan kompartemen liver :


𝑁𝑂 𝑁𝑂
0.5𝐶𝑙𝑢𝑛𝑔 − 18.409 × 𝐶𝑙𝑖𝑣𝑒𝑟 = −2.818 . . . (2)
𝑁𝑂 𝑁𝑂
𝑀𝑖𝑠𝑎𝑙𝑘𝑎𝑛 ∶ 𝐶𝑙𝑖𝑣𝑒𝑟 = 𝑥1 𝑑𝑎𝑛 𝐶𝑙𝑢𝑛𝑔 = 𝑥2
↔ 0.5𝑥2 − 18.409𝑥1 = −2.818 . . . (2)
↔ 18.409𝑥1 − 0.5𝑥2 = 2.818 . . . (2)

• Sistem persamaan :
0.5𝑅𝑥1 + (1.5𝑅 − 3.237)𝑥2 = −0.7 . . . (1)
18.409𝑥1 − 0.5𝑥2 = 2.818 . . . (2)

• Augmented matriks :
0.5𝑅 1.5𝑅 − 3.237 −0.7
( | )
18.409 −0.5 2.818

• Uji konvergensi :
Syarat :
𝑛
|𝑎𝑖𝑖 | > ∑ |𝑎𝑖𝑗 |
𝑗=1,𝑗≠𝑖
Pengujian :
0.5𝑅 1.5𝑅 − 3.237 −0.7
( | )
18.409 −0.5 2.818
SPL tersebut sudah memenuhi uji kovergensi karena nilai koefisien
elemen pada diagonal sudah terbesar dibandingkan koefisien lainnya
dalam satu baris/persamaan

a) Metode Iterasi Jacobi


• Code Program :
#REZA UMMAM NOR
#081911733012
#TASK 1
#JACOBI

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t1=PrettyTable()
t2=PrettyTable()
t2.field_names=['R','x1','x2']
xawal=np.array([[0.0],[0.0]])
print('Tebakan awal = \n', xawal)

x1final=[]
x2final=[]
R=[]

for r in arange (0.6,1.0,0.05) :


t.field_names=['Iterasi','x1','error x1','x2','erro
r x2']
t1.field_names=['A','B','Hasil SPL']

print('\nR =',(round(r,2)))

A=np.array([[18.409, -0.5],[0.5*r,(1.5*r-3.237)]])
B=np.array([[2.818],[-0.7]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=15
k=0

x1=[]
x2=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-
xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(ro
und(xbaru[1,0],5)),error[1,0]])
k+=1
x1final.append(xbaru[0,0])
x2final.append(xbaru[1,0])
R.append(r)
t1.add_row([A,B,xbaru])
t2.add_row([(round(r,2)),xbaru[0,0],xbaru[1,0]])
t.align='c'
t1.align='c'
print(t1)
print(t)
t.clear()
t1.clear()

print ('\n\tHASIL METODE ITERASI JACOBI\t\t')


print (t2)
pylab.plot(R,x1final,'-o')
pylab.plot(R,x2final,'-x')
• Penjelasan Code Program :
Program ini bertujuan untuk menyelesaikan permasalahan
“Pengembangan obat dan studi toksisitas: animal-on-a-chip“ seperti
pada tugas praktikum sebelumnya. Akan tetapi pada bagian ini
menggunakan metode iterasi Jacobi dan Gauss Seidel. Program ini
nantinya akan mencari nilai x1 dan x2.
Tanda # pada awal code merupakan komentar yang tidak
diproses program. Bagian tersebut menampilkan identitas programmer
serta program yang dibuat yaitu penyelesaian system persamaan linier
menggunakan metode iterasi Jacobi.
Syntax import berfungsi untuk mengimpor modul pada phyton.
Numpy merupakan modul yang didalamnya terdapat operasi
matematika serta array yang dibutuhkan pada program ini. Lalu juga
terdapat modul pylab untuk menampilkan plot. Selain itu juga dipanggil
modul prettytable untuk membuat table.
Code selanjutnya adalah pendeklarasian array xawal yang
merupakan tebakan awal nilai variable dimana x1(0)=x2(0) = 0. Setelah
itu dicetak menggunakan syntax print.
Tahap berikutnya membuat 3 array kosong. Pertama, array
x1final yang memuat nilai x1 untuk tiap-tiap nilai R. Kedua, array
x2final yang memuat nilai x2 untuk tiap-tiap nilai R. Ketiga, array R
yang memuat nilai R yaitu 0.6 sampai 0.95 dengan kenaikan tiap 0.5.
Pada program ini terdapat blok looping utama dengan konstruk
for. Blok looping ini berfokus pada perulangan nilai R. Didalam blok
looping tersebut terdapat blok untuk proses iterasi Jacobi.

Blok Iterasi Jacobi :


Pada awal blok ini proses yang dilakukan adalan membuat 3
tabel. Tabel pertama (t) berisi nilai iterasi, x1, error x1, x2, dan error
x2. Tabel kedua (t1) berisi array A, array B, dan hasil SPL dari
perulangan R yang sedang dijalankan. Sedangkan table ketiga (t2)
berisi hasil akhir metode iterasi Jacobi yaitu R, x1, dan x2.
Selanjutnya adalah mendeklarasikan array yang akan digunakan
yaitu array A dan B. Array a berisi matriks dengan elemen koefisien
tiap-tiap variable yang akan dicari nilainya. Karena terdapat 2 variabel
dan 2 persamaan maka array a berukuran 2x2. Disisi lain array b
memuat matriks dengan elemen hasil dari tiap persamaan. Karena ada
2 persamaan maka ukuran array yaitu 2x1 atau membentuk 1 kolom.
Berikut ilustrasinya,

Matriks awal :
0.5𝑅 1.5𝑅 − 3.237 𝑥1 −0.7
[ ][ ] = [ ]
18.409 −0.5 𝑥2 2.818

0.5𝑅 1.5𝑅 − 3.237 −0.7


→𝑎=[ ];𝑏 = [ ]
18.409 −0.5 2.818

Tahap selanjutnya adalah mencari panjang array A dengan


syntax len. Diketahui panjang array A atau banyaknya kolom adalah 2.
Nilai tersebut dimasukkan ke variable n sehingga n=2.
Langkah berikutnya membuat array untuk menampung nilai
variable-variabel yang ingin diketahui berdasarkan iterasi yang telah
dilakukan dan nilai errornya. Array tersebut adalah xbaru dan error
dengan ukuran 2x1. Sementara array tersebut diisi elemen nol semua
sebelum digantikan oleh nilai variable dan error yang ingin dicari.
Selanjutnya mendeklarasikan variable yang memuat jumlah
maksimum iterasi yang dilakukan yaitu maxter dengan nilai 15 kali
iterasi. Dikenalkan pula variable k yang merepresentasikan nilai iterasi
saat blok looping bekerja. Nilai k diawali dengan 0.
Tahap berikutnya membuat 3 array kosong. Pertama array x1
yang memuat nilai x1 hasil tiap iterasi. Kedua array x2 yang memuat
nilai x2 hasil tiap iterasi. Ketiga array kx yang memuat nilai iterasi pada
setiap perulangan
Selanjutnya adalah masuk blok looping yang memuat program
untuk menentukan nilai x1 dan x2. Blok looping ini menggunakan
kombinasi 1 looping while, 2 looping for, dan 1 if statement.

while (k<=maxter) :
Looping tersebut menggunakan konstruk while dengan batasan
perulangan yang dilakukan kurang dari sama dengan maxter atau 15
kali perulangan. Looping ini berfungsi sebagai nilai iterasi yang
dilakukan dan diwakili dengan variable k.

for i in range (0,n) :


sum=0
Looping kedua tersebut berada di dalam looping pertama dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai baris
matriks. Range looping tersebut dari 0 sampai kurang dari n atau dari
baris pertama sampai terakhir yaitu baris kedua. Variabel sum
digunakan untuk proses pada looping selanjutnya dan diberikan nilai
awal nol.

for j in range (0,n) :


if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
Looping ketiga tersebut berada di dalam looping kedua dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai
kolom matriks. Range looping tersebut dari 0 sampai kurang dari n atau
dari kolom pertama sampai terakhir yaitu kolom kedua.
Di dalam looping ini terdapat if statement yang meloloskan
kondisi saat j tidak sama dengan i. Maknanya proses akan dilakukan
untuk elemen pada nilai kolom yang tidak sama dengan nilai baris saat
iterasi terjadi. Atau sederhananya proses terjadi pada elemen yang
bukan merupakan diagonal matriks.
Proses yang dilakukan yaitu menghitung nilai sum. Untuk
mendapatkannya dengan cara nilai sum awal ditambah hasil kali antara
elemen koefisien dan nilai awal variable yang bersesuaian. Nilai sum
ini akan terus di update dari elemen pada kolom pertama hingga kolom
terakhir pada satu baris yang sama. Tentunya elemen diagonal tidak
akan diproses akibat kondisi if statement.

xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
Code tersebut berada dibawah looping ketiga namun sejajar
dengan looping kedua. Artinya nilai sum yang didapatkan pada looping
ketiga akan digunakan untuk proses pada looping kedua. Code ini
berfungsi untuk mencari nilai x1, x2, beserta errornya untuk setiap
iterasi. Proses ini berjalan urut sesuai looping kedua yaitu dari baris
pertama hingga baris kedua. Nilai variable tersebut didapatkan dengan
cara mengurangi nilai hasil persamaan (array B) dengan sum lalu dibagi
dengan elemen diagonal baris yang bersesuaian dengan iterasi. Dengan
demikian dari persamaan/baris pertama akan mendapatkan nilai x1.
Lalu dari persamaan/baris kedua akan mendapatkan nilai x2. Nilai-nilai
yang didapatkan tersebut akan di update ke array xbaru. Untuk
mendapat error caranya adalah mecari akar kuadrat atau nilai mutlak
dari xbaru dikurangi xawal lalu dibagi dengan xbaru sesuai dengan
iterasi yang bersesuaian.
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(ro
und(xbaru[1,0],5)),error[1,0]])
k+=1
Code tersebut berada di bawah looping kedua namun sejajar
dengan looping pertama. Maknanya hasil nilai x1,x2, dan x3 yang
didapatkan pada proses sebelumnya akan digunakan pada code ini.
Code pertama berfungsi mengupdate array xawal dengan array xbaru
sehingga pada iterasi berikutnya nilai xawal yang digunakan adalah
nilai dari xbaru yang didapatkan pada iterasi sebelumnya.
Code setelahnya berfungsi untuk menambah elemen pada array
x1,x2,dan kx dibagian belakang memanfaatkan syntax append. Lalu
code dibawahnya berfungsi memasukkan nilai yang dibutuhkan table 1,
yaitu iterasi, x1, error x1, x2, dan error x2. Code k+=1 berfungsi agar
looping dengan konstruk while bertambah 1 tiap ulangan.
Setelah selesai dengan blok proses iterasi Jacobi, code
selanjutnya berada dalam looping utama. Pada bagian ini terdapat code
untuk menambah elemen array x1final dengan elemen xbaru (0,1) atau
nilai x1 untuk setiap nilai R. Begitu pula untuk array x2final dan R.
Pada bagian ini juga terdapat code untuk memasukkan nilai variable
yang dibutuhkan table kedua, yaitu A, B, dan Hasil SPL (array xbaru).
Begitupun juga untuk table 3 (t2) dimasukkan nilai R, x1, dan x2
sebagai hasil akhir metode ini. Selanjutnya mencetak table 1 (t) dan
table 2 (t1) dengan syntax print
Code terakhir ditujukan untuk mencetak table ketiga (t2) dan
membuat plot hubungan antara nilai R dan x1 serta x2. Selanjutnya plot
ini akan dibandingkan dengan hasil plot pada praktikum sebelumnya.

b) Metode Iterasi Gauss Seidel


• Code Program
#REZA UMMAM NOR
#081911733012
#TASK 1
#GAUSS SEIDELL

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t1=PrettyTable()
t2=PrettyTable()
t2.field_names=['R','x1','x2']
xawal=np.array([[0.0],[0.0]])
print('Tebakan awal = \n', xawal)

x1final=[]
x2final=[]
R=[]

for r in arange (0.6,1.0,0.05) :


t.field_names=['Iterasi','x1','error x1','x2','erro
r x2']
t1.field_names=['A','B','Hasil SPL']

print('\nR =',(round(r,2)))

A=np.array([[18.409, -0.5],[0.5*r,(1.5*r-3.237)]])
B=np.array([[2.818],[-0.7]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=15
k=0

x1=[]
x2=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-
xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(ro
und(xbaru[1,0],5)),error[1,0]])
k+=1
x1final.append(xbaru[0,0])
x2final.append(xbaru[1,0])
R.append(r)
t1.add_row([A,B,xbaru])
t2.add_row([(round(r,2)),xbaru[0,0],xbaru[1,0]])
t.align='c'
t1.align='c'
print(t1)
print(t)
t.clear()
t1.clear()

print ('\n\tHASIL METODE ITERASI GAUSS SEIDEL\t\t')


print (t2)
pylab.plot(R,x1final,'-o')
pylab.plot(R,x2final,'-x')
• Pembahasan Code Program
Program penyelesaian SPL melalui iterasi Gauss Seidell sama
seperti program dengan iterasi Jacobi. Perbedaannya hanya pada letak
code berikut,
xawal[:]=xbaru[:]
Jika pada iterasi Jacobi code berikut berada dalam looping kedua. Maka
pada iterasi Gauss Seidell code tersebut berada pada looping ketiga.
Maknanya, nilai xbaru yang didapatkan pada baris pertama yaitu nilai
dari x1 akan langsung digunakan untuk baris berikutnya tanpa
menunggu berganti iterasi. Hal ini berbeda dengan iterasi Jacobi
dimana nilai x1,x2, dan x3 baru digunakan untuk iterasi selanjutnya.

c) Tabel Hasil Program dan Plot


• Iterasi jacobi
• Iterasi Gauss Seidel
• Perbandingan hasil
Berdasarkan program tampak untuk keseluruhan hasil yang didapat
baik untuk metode iterasi Jacobi dan Gauss Seidel adalah sama. Akan
tetapi untuk mendapatkan nilai x1 dan x2 dalam setiap nilai R
kecepatannya berbeda antara dua metode tersebut. Metode iterasi Gauss
Seidel lebih cepat dibandingkan iterasi Jacobi. Dengan demikian metode
iterasi Gauss Seidel lebih direkomendasikan untuk menyelesaikan
permasalahan ini.

d) Perbandingan hasil akhir dan plot


• Iterasi Jacobi
• Iterasi Gauss Seidel
• Hasil Praktikum Sebelumnya

• Perbandingan Hasil
Ketiga hasil tersebut identic, tampak jika nilai variasi R semakin
meningkat maka nilai X1 dan X2 juga semakin meningkat. Hal ini
mengindikasikan bahwa semakin besar nilai R atau fraksi dari aliran luar yang
masuk kembali ke sirkuit mikro maka nilai konsentrasi napthalene epoxide di
𝑁𝑂 𝑁𝑂
kompartemen liver (X1) / 𝐶𝑙𝑖𝑣𝑒𝑟 dan paru-paru (X2) / 𝐶𝑙𝑢𝑛𝑔 ikut meningkat.
Pada ketiga plot tersebut sumbu-x mewakili variasi nilai R
sedangkan sumbu-y mewakili nilai X1 dan X2. Untuk X1 pada garis biru
sedangkan untuk X2 pada garis warna oranye. Tampak kedua garis
mengalami kenaikan secara linier. Akan tetapi kenaikan lebih signifikan
untuk nilai X2 dibandingkan X1. Dengan demikian pengaruh variasi nilai R
lebih besar untuk konsentrasi napthalene epoxide di kompartemen paru-paru
𝑁𝑂 𝑁𝑂
(X2) atau 𝐶𝑙𝑢𝑛𝑔 daripada di kompartemen liver (X1) atau 𝐶𝑙𝑖𝑣𝑒𝑟 .

e) Kesimpulan hasil
Hasil akhir menunjukkan bahwa semakin besar nilai R atau fraksi
dari aliran luar yang masuk kembali ke sirkuit mikro maka nilai konsentrasi
𝑁𝑂
napthalene epoxide di kompartemen liver (X1) / 𝐶𝑙𝑖𝑣𝑒𝑟 dan paru-paru (X2) /
𝑁𝑂
𝐶𝑙𝑢𝑛𝑔 ikut meningkat. Selanjutnya pengaruh variasi nilai R lebih signifikan
pada konsentrasi napthalene epoxide di kompartemen paru-paru (X2) atau
𝑁𝑂 𝑁𝑂
𝐶𝑙𝑢𝑛𝑔 daripada di kompartemen liver (X1) atau 𝐶𝑙𝑖𝑣𝑒𝑟 berdasarkan plot yang
telah dibuat.
Kemudian berdasarkan hasil yang didapat terbukti untuk metode
gauss elimination, iterasi Jacobi, dan iterasi Gauss Seidel menunjukkan hasil
yang sama. Hanya saja metode iterasi Gauss Seidel lebih direkomendasikan
daripada iterasi Jacobi karena lebih cepat dalam mendapatkan hasil.
2. Konstruksi Diet
Seorang dokter menyarankan pasien untuk mengikuti program diet
berdasarkan tabel di bawah ini.
Jumlah (gr) yang disediakan per 100 gr bahan Jumlah (gr) yang
Susu disediakan oleh
Susu
Nutrisi non Whey Cambridge Diet
kedelai
lemak dalam Satu Hari
Protein 36 51 13 33
Karbohidrat 52 34 74 45
Lemak 0 7 11 3
Tolong cari tahu berapa banyak susu kedelai-susu non-lemak, dan whey
yang dibutuhkan untuk memenuhi jumlah protein, karbohidrat, dan lemak ideal
setiap hari?

PENYELESAIAN :
a) Menentukan Sistem Persamaan Linier
• Misalkan :
Susu non lemak = x1
Susu kedelai = x2
Whey = x3
• SPL :
0.36𝑥1 + 0.51𝑥2 + 0.13𝑥3 = 33
0.52𝑥1 + 0.34𝑥2 + 0.74𝑥3 = 45
0.00𝑥1 + 0.07𝑥2 + 0.11𝑥3 = 3

b) Uji Konvergensi

• Syarat :
𝑛
|𝑎𝑖𝑖 | > ∑ |𝑎𝑖𝑗 |
𝑗=1,𝑗≠𝑖
• Pengujian :
0.36𝑥1 + 0.51𝑥2 + 0.13𝑥3 = 33
0.52𝑥1 + 0.34𝑥2 − 0.74𝑥3 = 45
0.00𝑥1 + 0.07𝑥2 + 0.11𝑥3 = 26

SPL tersebut belum memenuhi uji konvergensi karena nilai koefisien


elemen pada diagonal belum sesuai. Selain itu terdapat 2 persamaan
dengan nilai koefisien untuk x3 paling besar dibandingkan koefisien
elemen lain dalam satu persamaan yang sama. Hal tersebut menyebabkan
tidak ada elemen diagonal untuk x1 yang sesuai. Dengan demikian matriks
yang dimasukkan pada program akan dicoba-coba mana yang
menghasilkan nilai konvergen.
c) Membentuk matriks SPL
0.36 0.51 0.13 𝑥1 33 0.36 0.51 0.13 33
[0.52 0.34 0.74] [𝑥2 ] = [45] → 𝐴 = [0.52 0.34 0.74] ; 𝐵 = [45]
0.00 0.07 0.11 𝑥3 3 0.00 0.07 0.11 3

d) Code Program
• Metode Iterasi Jacobi
#REZA UMMAM NOR
#081911733012
#TASK 2
#JACOBI

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t.field_names=['Iterasi','x1','error x1','x2','error x2'
,'x3','error x3']

A=np.array([[0.52, 0.34, 0.74],[0.36, 0.51, 0.13],[0, 0.


07, 0.11]])
B=np.array([[45],[33],[3]])
xawal=np.array([[0.0],[0.0],[0.0]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=20
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(round(x
baru[1,0],5)),error[1,0],(round(xbaru[2,0],5)),error[2
,0]])
k+=1
t.align='c'
print(t)
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
pylab.plot(kx,x3,'-g')
Pembahasan Code :
Program ini bertujuan untuk menyelesaikan system persamaan
linier 3 variabel, Nantinya program ini akan mencari nilai x1,x2, dan x3.
Variabel x1 disini mewakili jumlah kebutuhan susu non-lemak. Sedangkan
x2 untuk susu kedelai. Dan x3 untuk whey. Nilai variable tersebut
dibutuhkan untuk mengetahui jumlah masing-masing makanan dalam
gram yang dibutuhkan untuk memenuhi protein, karbohidrat, dan lemak
dalam program diet sesuai anjuran dokter.
Dikarenakan saat uji konvergensi matriks tidak memenuhi syarat
maka dilakukan uji coba dengan mengganti-ganti urutan baris matriks SPL
agar didapatkan hasil konvergen.
Tanda # pada awal code merupakan komentar yang tidak diproses
program. Bagian tersebut menampilkan identitas programmer serta
program yang dibuat yaitu penyelesaian system persamaan linier
menggunakan metode iterasi Jacobi.
Syntax import berfungsi untuk mengimpor modul pada phyton.
Numpy merupakan modul yang didalamnya terdapat operasi matematika
serta array yang dibutuhkan pada program ini. Lalu juga terdapat modul
pylab untuk menampilkan plot. Selain itu juga memanggil modul
prettytable untuk membuat table
Code selanjutnya untuk membuat tabel dengan variabel t berisi
nilai iterasi, x1, error x1, x2, error x2, x3, dan error x3.
Selanjutnya adalah mendeklarasikan array yang akan digunakan
yaitu array A dan B. Array a berisi matriks dengan elemen koefisien tiap-
tiap variable yang akan dicari nilainya. Karena terdapat 3 variabel dan 3
persamaan maka array a berukuran 3x3. Disisi lain array b memuat matriks
dengan elemen hasil dari tiap persamaan. Karena ada 3 persamaan maka
ukuran array yaitu 3x1 atau membentuk 1 kolom.
Selain array A dan B juga ada array xawal yang merupakan tebakan
awal nilai variable dimana x1(0) = x2(0) = x3 (0) = 0.
Tahap selanjutnya adalah mencari panjang array A dengan syntax
len. Diketahui panjang array A atau banyaknya kolom adalah 3. Nilai
tersebut dimasukkan ke variable n sehingga n=3.
Langkah berikutnya membuat array untuk menampung nilai
variable-variabel yang ingin diketahui berdasarkan iterasi yang telah
dilakukan dan nilai errornya. Array tersebut adalah xbaru dan error dengan
ukuran 3x1. Sementara array tersebut diisi elemen nol semua sebelum
digantikan oleh nilai variable dan error yang ingin dicari
Code setelahnya berfungsi mencetak array A, B, dan xawal dengan
menggunakan syntax print.
Selanjutnya mendeklarasikan variable yang memuat jumlah
maksimum iterasi yang dilakukan yaitu maxter dengan nilai 20 kali iterasi.
Dikenalkan pula variable k yang merepresentasikan nilai iterasi saat blok
looping bekerja. Nilai k diawali dengan 0.
Code selanjutnya adalah mencetak array A, B, dan xawal dengan
syntax print.
Tahap berikutnya membuat 4 array kosong. Pertama array x1 yang
memuat nilai x1 hasil tiap iterasi. Kedua array x2 yang memuat nilai x2
hasil tiap iterasi. Ketiga array x3 yang memuat nilai x3 hasil tiap iterasi.
Dan yang keempat array kx yang memuat nilai iterasi pada setiap
perulangan
Selanjutnya adalah masuk blok looping yang memuat program
untuk menentukan niai x1, x2, dan x3. Blok looping ini menggunakan
kombinasi 1 looping while, 2 looping for, dan 1 if statement.

while (k<=maxter) :
Looping tersebut menggunakan konstruk while dengan batasan
perulangan yang dilakukan kurang dari sama dengan maxter atau 25 kali
perulangan. Looping ini berfungsi sebagai nilai iterasi yang dilakukan
diwakili dengan variable k.

for i in range (0,n) :


sum=0
Looping kedua tersebut berada di dalam looping pertama dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai baris
matriks. Range looping tersebut dari 0 sampai kurang dari n atau dari baris
pertama sampai ketiga. Variabel sum digunakan untuk proses pada looping
selanjutnya dan diberikan nilai awal nol.

for j in range (0,n) :


if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
Looping ketiga tersebut berada di dalam looping kedua dan
menggunakan konstruk for yang berfungsi mewakili ulangan nilai kolom
matriks. Range looping tersebut dari 0 sampai kurang dari n atau dari
kolom pertama sampai ketiga.
Di dalam looping ini terdapat if statement yang meloloskan kondisi
saat j tidak sama dengan i. Maknanya proses akan dilakukan untuk elemen
pada nilai kolom yang tidak sama dengan nilai baris saat iterasi terjadi.
Atau sederhananya proses terjadi pada elemen yang bukan merupakan
diagonal matriks.
Proses yang dilakukan yaitu menghitung nilai sum. Untuk
mendapatkannya dengan cara nilai sum awal ditambah hasil kali antara
elemen koefisien dan nilai awal variable yang bersesuaian. Nilai sum ini
akan terus di update dari elemen pada kolom pertama hingga kolom
terakhir pada satu baris yang sama. Tentunya elemen diagonal tidak akan
diproses akibat kondisi if statement.

xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
Code tersebut berada dibawah looping ketiga namun sejajar dengan
looping kedua. Artinya nilai sum yang didapatkan pada looping ketiga
akan digunakan untuk proses pada looping kedua. Code ini berfungsi
untuk mencari nilai x1, x2, x3, beserta errornya untuk setiap iterasi. Proses
ini berjalan urut sesuai looping kedua yaitu dari baris pertama hingga baris
ketiga. Nilai variable tersebut didapatkan dengan cara mengurangi nilai
hasil persamaan (array B) dengan sum lalu dibagi dengan elemen diagonal
baris yang bersesuaian dengan iterasi. Dengan demikian dari
persamaan/baris pertama akan mendapatkan nilai x1. Lalu dari
persamaan/baris kedua akan mendapatkan nilai x2. Dan yang terakhir dari
baris/persamaan ketiga diperoleh nilai x3. Nilai-nilai yang didapatkan
tersebut akan di update ke array xbaru. Untuk mendapat error caranya
adalah mencari akar kuadrat atau nilai mutlak dari xbaru dikurangi xawal
lalu dibagi dengan xbaru sesuai dengan iterasi yang bersesuaian.
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(round(x
baru[1,0],5)),error[1,0],(round(xbaru[2,0],5)),error[2
,0]])
k+=1
Code tersebut berada di bawah looping kedua namun sejajar
dengan looping pertama. Maknanya hasil nilai x1,x2, dan x3 yang
didapatkan pada proses sebelumnya akan digunakan pada code ini. Code
pertama berfungsi mengupdate array xawal dengan array xbaru sehingga
pada iterasi berikutnya nilai xawal yang digunakan adalah nilai dari xbaru
yang didapatkan pada iterasi sebelumnya.
Code setelahnya berfungsi untuk menambah elemen pada array
x1,x2,x3, dan kx dibagian belakang memanfaatkan syntax append. Selain
itu terdapat code add_row untuk menambah nilai yang dibutuhkan untuk
mengisi table. Code k+=1 berfungsi agar looping while bertambah 1 tiap
ulangan.
Dibawah block looping terdapat syntax print untuk mencetak table
dan hasil SPL dari program iterasi Jacobi. Hasil SPL berupa array xbaru
setelah iterasi ke 20. Selain itu juga terdapat code untuk plot antara iterasi
terhadap nilai x1,x2, dan x3.

• Matode Iterasi Gauss Seidel


#REZA UMMAM NOR
#081911733012
#TASK 2
#GAUSS SEIDELL

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t.field_names=['Iterasi','x1','error x1','x2','error x2'
,'x3','error x3']

A=np.array([[0.52, 0.34, 0.74],[0.36, 0.51, 0.13],[0, 0.


07, 0.11]])
B=np.array([[45],[33],[3]])
xawal=np.array([[0.0],[0.0],[0.0]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=20
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(round(x
baru[1,0],5)),error[1,0],(round(xbaru[2,0],5)),error[2
,0]])
k+=1
t.align='c'
print(t)
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
pylab.plot(kx,x3,'-g')
Pembahasan Code :
Program penyelesaian SPL melalui iterasi Gauss Seidell sama
seperti program dengan iterasi Jacobi. Perbedaannya hanya pada letak
code berikut,
xawal[:]=xbaru[:]
Jika pada iterasi Jacobi code berikut berada dalam looping kedua. Maka
pada iterasi Gauss Seidell code tersebut berada pada looping ketiga.
Maknanya, nilai xbaru yang didapatkan pada baris pertama yaitu nilai dari
x1 akan langsung digunakan untuk baris berikutnya tanpa menunggu
berganti iterasi. Hal ini berbeda dengan iterasi Jacobi dimana nilai x1,x2,
dan x3 baru digunakan untuk iterasi selanjutnya.

e) Perbandingan Hasil Program


• Iterasi Jacobi
• Iterasi Gauss Seidel
• Perbandingan Hasil
Berdasarkan program yang telah dibuat, susunan matriks yang
menunjukkan hasil konvergen pada metode iterasi Gauss Seidel adalah,
0.52 0.34 0.74 𝑥1 45
[0.36 0.51 0.13] [𝑥2 ] = [33]
0.00 0.07 0.11 𝑥3 3
Akan tetapi saat dijalankan dengan program iterasi Jacobi hasilnya
divergen. Maka dari itu untuk menyelesaikan permasalahan ini metode
yang dapat digunakan adalah iterasi Gauss Seidel.
Hasil yang didapatkan adalah,
𝑆𝑢𝑠𝑢 𝑛𝑜𝑛 − 𝑙𝑒𝑚𝑎𝑘 = 𝑥1 = 53.693 𝑔𝑟
𝑆𝑢𝑠𝑢 𝑘𝑒𝑑𝑒𝑙𝑎𝑖 = 𝑥2 = 23.697 𝑔𝑟
𝑊ℎ𝑒𝑦 = 𝑥3 = 12.193 𝑔𝑟
Porsi masing-masing makanan tersebut sesuai untuk memenuhi kebutuhan
protein, karbohidrat, dan lemak untuk program diet yang disarankan oleh
dokter.

f) Perbandingan Plot Program


• Iterasi Jacobi

• Iterasi Gauss Seidel


• Perbandingan Hasil
Berdasarkan plot hasil program tampak untuk metode iterasi Jacobi
hasil berfluktuatif dan tidak menuju satu nilai atau indikasi divergen.
Sedangkan plot pada program iterasi Gauss Seidel menghasilkan grafik
yang menuju satu titik tertentu atau bisa disebut konvergen. Maka dari itu
untuk menyelesaikan permasalahan ini metode yang dapat digunakan
adalah iterasi Gauss Seidel.

g) Kesimpulan Hasil Penyelesaian


Hasil yang didapatkan adalah,

𝑆𝑢𝑠𝑢 𝑛𝑜𝑛 − 𝑙𝑒𝑚𝑎𝑘 = 𝑥1 = 53.693 𝑔𝑟


𝑆𝑢𝑠𝑢 𝑘𝑒𝑑𝑒𝑙𝑎𝑖 = 𝑥2 = 23.697 𝑔𝑟
𝑊ℎ𝑒𝑦 = 𝑥3 = 12.193 𝑔𝑟

Porsi masing-masing makanan tersebut sesuai untuk memenuhi


kebutuhan protein, karbohidrat, dan lemak untuk program diet yang
disarankan oleh dokter per harinya. Untuk mendapatkan hasil tersebut metode
yang bisa digunakan adalah metode iterasi Gauss Seidel.
3. Rangkaian Listrik

Tentukan i12, i52, i32, i65, i54, i13, V2, V3, V4, V5, jika informasi berikut
diketahui.
𝑅12 = 5Ω ; 𝑅23 = 10Ω; 𝑅34 = 5Ω;
𝑅45 = 15Ω; 𝑅52 = 10Ω; 𝑅65 = 20Ω;
𝑉1 = 200𝑉; 𝑉6 = 0𝑉
PENYELESAIAN
a) Membuat Sistem Persamaan Linier dari rangkaian listrik yang disediakan
menggunakan hukum Kirchoff sedemikian hingga didapatkan hasil berikut,
(1)𝑖12 + (1)𝑖52 + (1)𝑖32 + (0)𝑖65 + (0)𝑖54 + (0)𝑖43 = 0
(0)𝑖12 − (1)𝑖52 + (0)𝑖32 + (1)𝑖65 + (−1)𝑖54 + (0)𝑖43 = 0
(0)𝑖12 + (0)𝑖52 − (1)𝑖32 + (0)𝑖65 + (0)𝑖54 + (1)𝑖43 = 0
(0)𝑖12 + (0)𝑖52 + (0)𝑖32 + (0)𝑖65 + (1)𝑖54 − (1)𝑖43 = 0
(0)𝑖12 + (10)𝑖52 − (10)𝑖32 + (0)𝑖65 − (15)𝑖54 − (5)𝑖43 = 0
(5)𝑖12 − (10)𝑖52 + (0)𝑖32 − (20)𝑖65 + (0)𝑖54 + (0)𝑖43 = 200

b) Membuat matriks SPL


1 1 1 0 0 0 𝑖12 0
0 −1 0 1 −1 0 𝑖 52 0
0 0 −1 0 0 1 𝑖32 0
=
0 0 0 0 1 −1 𝑖65 0
0 10 −10 0 −15 −5 𝑖54 0
[5 −10 0 −20 0 ]
0 [𝑖43 ] [ 200]

c) Uji Konvergensi
• Syarat Konvergensi :
𝑛
|𝑎𝑖𝑖 | > ∑ |𝑎𝑖𝑗 |
𝑗=1,𝑗≠𝑖

• Pengujian Konvergensi :
1 1 1 0 0 0 𝑖12 0
0 −1 0 1 −1 0 𝑖 52 0
0 0 −1 0 0 1 𝑖32 0
=
0 0 0 0 1 −1 𝑖65 0
0 10 −10 0 −15 −5 𝑖54 0
[5 −10 0 −20 0 ]
0 [𝑖43 ] [ 200]
Matriks tidak memenuhi syarat konvergensi karena ada beberapa
pesamaan yang didalamnya terdapat lebih dari 1 elemen yang mempunyai
koefisien terbesar dalam suatu persamaan yang sama. Dengan demikian
diasumsikan program akan menunjukkan hasil divergen. Akan tetapi tetap
dilakukan pembuatan program dan susunan matriks yang digunakan
adalah yang mendekati syarat konvergensi.

• Matriks SPL yang digunakan pada program :


1 1 1 0 0 0 𝑖12 0
0 −1 0 1 −1 0 𝑖52 0
0 0 −1 0 0 1 𝑖 32 0
=
5 −10 0 −20 0 0 𝑖65 200
0 10 −10 0 −15 −5 𝑖54 0
[0 0 0 0 1 −1] [𝑖43 ] [ 0 ]

• Matriks yang diinputkan pada program :


Misalkan :
𝑖12 = 𝑥1
𝑖52 = 𝑥2
𝑖32 = 𝑥3
𝑖65 = 𝑥4
𝑖54 = 𝑥5
𝑖43 = 𝑥6

Matriks :
1 1 1 0 0 0 𝑥1 0
0 −1 0 1 −1 0 𝑥2 0
0 0 −1 0 0 1 𝑥3 0
𝑥 =
5 −10 0 −20 0 0 4 200
0 10 −10 0 −15 −5 𝑥5 0
[0 0 0 0 1 ]
−1 6[ 𝑥 ] [ 0 ]

d) Code program :
• Iterasi Jacobi
#REZA UMMAM NOR
#081911733012
#TASK 3
#JACOBI

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t.field_names=['Iterasi','x1','error x1','x2','error x2'
,'x3','error x3','x4','error x4','x5','error x5','x6','e
rror x6']

A=np.array([[1,1,1,0,0,0],[0,-1,0,1,-1,0],[0,0,-
1,0,0,1],[5,-10,0,-20,0,0],[0,10,-10,0,-15,-
5],[0,0,0,0,1,-1]])
B=np.array([[0],[0],[0],[200],[0],[0]])
xawal=np.array([[0.0],[0.0],[0.0],[0.0],[0.0],[0.0]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=20
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(round(x
baru[1,0],5)),error[1,0],(round(xbaru[2,0],5)),error[2
,0],(round(xbaru[3,0],5)),error[3,0],(round(xbaru[4,0]
,5)),error[4,0],(round(xbaru[5,0],5)),error[5,0]])
k+=1
t.align='c'
print(t)
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
pylab.plot(kx,x3,'-g')
Pembahasan Code :
Program yang digunakan untuk menyelesaikan permasalahan nomor
3 mengenai rangkaian listrik ini sama dengan program yang digunakan
pada permasalahan nomor 2. Perbedaannya hanya pada array yang
digunakan dikarenakan SPL yang diperoleh pada tugas ini berupa 6
persamaan dengan 6 nilai yang akan dicari, Dengan demikian penjelasan
syntax pada program task 3 ini sama dengan task 2.
Program ini akan mencari nilai x1, x2, x3, x4, x5, dan x6. Dimana
x1 = i12 ; x2 = i52 ; x3 = i32 ; x4 = i65 ; x5 = i54 ; dan x6 = i43 ;. Pada program
ini menggunakan array sebagai berikut,
1 1 1 0 0 0 0
0 −1 0 1 −1 0 0
0 0 −1 0 0 1 0
𝐴= ;𝐵=
5 −10 0 −20 0 0 200
0 10 −10 0 −15 −5 0
[0 0 0 0 1 −1] [ 0 ]

• Iterasi Gauss Seidel


#REZA UMMAM NOR
#081911733012
#TASK 3
#GAUSS SEIDEL

import numpy as np
from numpy import *
import pylab
from prettytable import PrettyTable

t=PrettyTable()
t.field_names=['Iterasi','x1','error x1','x2','error x2'
,'x3','error x3','x4','error x4','x5','error x5','x6','e
rror x6']

A=np.array([[1,1,1,0,0,0],[0,-1,0,1,-1,0],[0,0,-
1,0,0,1],[5,-10,0,-20,0,0],[0,10,-10,0,-15,-
5],[0,0,0,0,1,-1]])
B=np.array([[0],[0],[0],[200],[0],[0]])
xawal=np.array([[0.0],[0.0],[0.0],[0.0],[0.0],[0.0]])
n=len(A)
xbaru=zeros((n,1),float)
error=zeros((n,1),float)
maxter=20
k=0

print('A = \n',A)
print('B= \n',B)
print('Tebakan awal = \n', xawal)
x1=[]
x2=[]
x3=[]
kx=[]

while (k<=maxter) :
for i in range (0,n) :
sum=0
for j in range (0,n) :
if (j!=i) :
sum=sum+(A[i,j]*xawal[j])
xbaru[i]=(B[i]-sum)/A[i,i]
error[i]=sqrt(((xbaru[i]-xawal[i])/xbaru[i])**2)
xawal[:]=xbaru[:]
x1.append(xbaru[0,0])
x2.append(xbaru[1,0])
x3.append(xbaru[2,0])
kx.append(k)
t.add_row([k,(round(xbaru[0,0],5)),error[0,0],(round(x
baru[1,0],5)),error[1,0],(round(xbaru[2,0],5)),error[2
,0],(round(xbaru[3,0],5)),error[3,0],(round(xbaru[4,0]
,5)),error[4,0],(round(xbaru[5,0],5)),error[5,0]])
k+=1
t.align='c'
print(t)
print('Hasil SPL = \n', xbaru)
pylab.plot(kx,x1,'-r')
pylab.plot(kx,x2,'-b')
Pembahasan Code :
Program penyelesaian SPL melalui iterasi Gauss Seidell sama
seperti program dengan iterasi Jacobi. Perbedaannya hanya pada letak
code berikut,
xawal[:]=xbaru[:]
Jika pada iterasi Jacobi code berikut berada dalam looping kedua.
Maka pada iterasi Gauss Seidell code tersebut berada pada looping ketiga.
Maknanya, nilai xbaru yang didapatkan pada baris pertama yaitu nilai dari
x1 akan langsung digunakan untuk baris berikutnya tanpa menunggu
berganti iterasi. Format ini akan berlaku sampai baris terakhir. Hal ini
berbeda dengan iterasi Jacobi dimana nilai x1 sampai x6 baru digunakan
untuk iterasi selanjutnya.
e) Perbandingan Hasil
• Iterasi Jacobi
• Iterasi Gauss Seidel
• Perbandingan Hasil Kedua Metode
Berdasarkan hasil yang didapatkan tampak untuk kedua metode
menghasilkan hasil yang divergen. Hal tersebut dikarenakan nilai yang
didapat tidak menuju ke satu nilai melainkan semakin membesar dan
fluktuatif. Bisa dilihat juga dari table error nilainya tidak kunjung
mendekati nol.
Hasil akhir yang didapat dari kedua metode yaitu,
− Iterasi Jacobi :
𝑖12 = 𝑥1 = 399.6978249
𝑖52 = 𝑥2 = −114.31989589
𝑖32 = 𝑥3 = 241.45736883
𝑖65 = 𝑥4 = 241.73815901
𝑖54 = 𝑥5 = −361.87531034
𝑖43 = 𝑥6 = 72.91128151

− Iterasi Gauss Seidel :


𝑖12 = 𝑥1 = 76008.03935505
𝑖52 = 𝑥2 = 578760.82537587
𝑖32 = 𝑥3 = −435415.79948128
𝑖65 = 𝑥4 = −270388.40284917
𝑖54 = 𝑥5 = 821256.34973186
𝑖43 = 𝑥6 = 821256.34973186

Dengan demikian metode iterasi Jacobi dan Gauss Seidel kurang


direkomendasikan untuk menyelesaikan susunan matriks pada persoalan
ini.
Disisi lain praktikan juga mengasumsikan kesalahan bisa berasal
saat menentukan SPL berdasarkan rangkaian listrik yang disediakan. Bisa
kesalahan dalam persamaan yang digunakan atau kekurangcermatan
praktikan dalam penghitungan.

f) Perbandingan Plot
• Iterasi Jacobi
• Iterasi Gauss Seidel

• Perbandingan Plot Kedua Metode


Berdasarkan hasil yang didapatkan tampak untuk kedua metode
menghasilkan hasil yang divergen. Hal tersebut dikarenakan nilai yang
didapat tidak menuju ke satu nilai melainkan semakin membesar dan
fluktuatif.

g) Kesimpulan Hasil Penyelesaian


Berdasarkan hasil yang diperoleh dari program penyelesaian SPL
menggunakan metode iterasi Jacobi dan Gauss Seidel untuk permasalahan
rangkaian listrik yang diberikan ternyata menghasilkan nilai yang divergen.
Akibatnya praktikan belum bisa menemukan nilai i12, i52, i32, i65, i54, i13,
V2, V3, V4, V5.
Dengan demikian metode iterasi Jacobi dan Gauss Seidel kurang
direkomendasikan untuk menyelesaikan susunan matriks pada persoalan ini.
Disisi lain praktikan juga mengasumsikan kesalahan bisa berasal saat
menentukan SPL berdasarkan rangkaian listrik yang disediakan. Bisa
kesalahan dalam persamaan yang digunakan atau kekurangcermatan
praktikan dalam penghitungan.
E. KESIMPULAN
Praktikum Komputasi Biomedis Chapter 4 yang bertujuan untuk
menentukan hasil Sistem Persamaan Linier (SPL) dengan menggunakan
metode iterasi Jacobi dan Gauss Seidel telah dilaksanakan dengan baik.
Program yang dibuat menggunakan konsep memasukkan tebakan awal ke
persamaan iterasi untuk tiap-tiap variable yang ingin dicari. Iterasi akan terus
berjalan hingga batasan maks iterasi atau maks error. Jika nilai error sudah 0
untuk setiap nilai variable maka SPL telah terselesaikan. Persamaan kedua
metode ini adalah matriks yang digunakan harus memenuhi syarat konvergensi.
Jika tidak maka menghasilkan nilai divergen. Hal ini merupakan kelemahan
kedua metode tersebut . Perbedaan kedua metode adalah untuk iterasi Jacobi
nilai variable yang baru akan dimasukkan ke persamaan iterasi berikutnya.
Sedangkan untuk iterasi Gauss Seidel nilai variable yang baru akan langsung
dimasukkan ke persamaan berikutnya tanpa menunggu iterasi selanjutnya. Jika
dibandingkan, metode iterasi Gauss Seidel lebih baik dibandingkan Jacobi
karena lebih cepat menemukan nilai variable yang dicari.

F. DAFTAR PUSTAKA

Capra, Steven C and Canale. 2010. Numerical Methods for Engineers with
Personal Computer Applications. MacGraw-Hill Book Company.

Hendri. 2003. Cepat Mahir Phyton. IlmuComputer.com

Kiusalaas J. 2013. Numerical Methods in Engineering with Python 3. Vol. 51.


Cambridge University Press: New York.

Modul Praktikum Komputasi Biomedis, Program Studi Teknobiomedik, Dep.


Fisika, Fakultas Sains dan Teknologi UNAIR 2021.

Anda mungkin juga menyukai