Dosen Pengampu : Prof. Dr. Suhartono, M.Kom
Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Fakultas : Sains dan Teknologi
Studi Kasus |
Aljabar linier banyak diaplikasikan baik dalam bidang engineering, fisika, sampai dengan statistika. Pada sub-chapter ini penulis akan menjelaskan penerapan aljabar linier pada metode kuadrat terkecil dan aliran massa dalam reaktor. Untuk penerapan lainnya pembaca dapat membaca buku lainnya terkait aljabar linier.
Metode Kuadrat Terkecil |
Metode kuadrat terkecil merupakan salah satu aplikasi penerapan aljabar linier yang paling populer. Intuisi dibalik metode ini adalah bagaimana kita meminimalkan jarak antara sejumlah titik dengan garis regresi. Misalkan kita menggambarkan scatterplot antara dua buah variabel. Pola yang terbentuk dari plot tersebut adalah terjadi korelasi positif antara variabel pada sumbu xx dan sumbu yy. Kita ingin menggambarkan garis regresi terbaik yang dapat menangkap seluruh pola tersebut. Garis regresi terbaik terjadi ketika jumlah kuadrat jarak antara titik observasi dan garis regresi yang terbentuk seminimal mungkin.
Untuk lebih memahaminya kita akan melakukan latihan menggunakan dataset trees
yang berisi data hasil pengukuran kayu dari pohon yang ditebang. Pada dataset ini terdapat 31 observasi dan 3 buah kolom. Keterangan dari ketiga buah kolom tersebut adalah sebagai berikut:
Girth
: diameter pohon dalam satuan inch.
Height
: tinggi pohon dalam satuan feet.
Volume
: volume kayu dalam satuan cubic feet.
Untuk mengecek 6 observasi pertama dan struktur data, jalankan sintaks berikut:
head(trees)
## Girth Height Volume
## 1 8.3 70 10.3
## 2 8.6 65 10.3
## 3 8.8 63 10.2
## 4 10.5 72 16.4
## 5 10.7 81 18.8
## 6 10.8 83 19.7
str(trees)
## 'data.frame': 31 obs. of 3 variables:
## $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
## $ Height: num 70 65 63 72 81 83 66 75 80 75 ...
## $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
Kita ingin membuat sebuah model linier untuk memprediksi Volume
kayu berdasarkan variabel Girth
dan Heiht
atau volume sebagia fungsi dari variabel Girth
dan Heiht
. Kita dapat menuliskan relasi antara variabel volume sebagai fungsi dari variabel Girth
dan Heiht
menggunakan Persamaan (6.40).
Volume=βgirthGirth+βheightHeight+β0(6.40)(6.40)Volume=βgirthGirth+βheightHeight+β0
dimana β0β0 merupakan intersep persamaan regresi linier dan nilai ββ lainnya merupakan koefisien dari variabel Girth
dan Heiht
. Variabel Volume
disebut sebagai variabel respon, sedangkan variabel Girth
dan Heiht
disebut sebagai variabel prediktor.
Metode kuadrat terkecil berusaha memperoleh seluruh koefisien variabel dan intersep dari persamaan regresi linier. Berdasarkan yang telah penulis jelaskan garis regresi terbaik adalah garis yang memiliki nilai kuadrat terkecil jarak antara titik observasi dan garis regresi. Dasar dari metode kuadrat terkecil merupakan persamaan yang relatif sederhana yang ditunjukkan pada Persamaan (6.41).
ATA=ATb(6.41)(6.41)ATA=ATb
dimana bb merupakan vektor dari variabel respon (Volume
) dan matrik AA merupakan matriks variabel prediktor (variabel Girth
dan Heiht
).
Untuk menginputkan intercept kedalam persamaan linier kita perlu menmabhakan satu kolom di awal matriks AA yang berisi nilai 1. Berikut adalah sintaks yang digunakan untuk membentuk matriks AA:
# membentuk matriks A
pred <- cbind(intercept=1, Girth=trees$Girth, Height=trees$Height)
head(A)
## [,1] [,2] [,3]
## [1,] 27 6 -1
## [2,] 6 15 2
## [3,] 1 1 54
Langkah selanjutnya adalah membentuk matriks b . Berikut adalah sintaks yang digunakan:
resp<- trees$Volume
head(resp)
## [1] 10.3 10.3 10.2 16.4 18.8 19.7
Untuk memperoleh koefisien β , kita dapat mencarinya dengan cara menyelesaikan Persamaan (6.41). Berikut adalah sintaks yang digunakan:
A <- t(pred) %*% pred
b <- t(pred) %*% resp
Ab <- cbind(A,b)
(x <- gauss_jordan(Ab))
## intercept Girth Height
## intercept 1 0 0 -57.9877
## Girth 0 1 0 4.7082
## Height 0 0 1 0.3393
# metode LU
lu_solve(A,b)
## $P
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
##
## $L
## [,1] [,2] [,3]
## [1,] 1.00 0.000 0
## [2,] 13.25 1.000 0
## [3,] 76.00 1.054 1
##
## $U
## intercept Girth Height
## intercept 31 410.7 2356.0
## Girth 0 295.4 311.5
## Height 0 0.0 889.6
##
## $result
## [,1]
## [1,] -57.9877
## [2,] 4.7082
## [3,] 0.3393
# fungsi solve()
solve(A,b)
## [,1]
## intercept -57.9877
## Girth 4.7082
## Height 0.3393
R juga menyediakan fungsi untuk membentuk model regresi linier. Fungsi yang digunakan adalah lm()
. Berikut sintaks yang digunakan untuk membentuk model linier menggunakan fungsi lm()
:
lm(Volume~Girth+Height, data=trees)
##
## Call:
## lm(formula = Volume ~ Girth + Height, data = trees)
##
## Coefficients:
## (Intercept) Girth Height
## -57.9877 4.7082 0.3393
6.6.2 Aliran Massa Dalam Reaktor
Pada sub-chapter ini penulis akan memberikan penerapan aljabar linier untuk menghitung konsentrasi suatu zat atau parameter lingkungan dalam reaktor yang saling terhubung. Pada contoh kasus kali ini diasumsikan terdapat lima buah reaktor yang saling terhubung satu sama lain sesuai Gambar 6.2. Debit air ( m3detik ) dan konsentrasi zat pencemar ( mgm3 ) disajikan pula diagram alir tersebut. Diasumsikan kelima buah reaktor tersebut dalam kondisi steady dan volume reaktor diasumsikan sama. Kesetimbangan massa persatuan waktu dalam kondisi steady disajikan pada Persamaan (6.43).
Aliran Massa Dalam Reaktor |
Kita akan menyelesaikannya dengan menggunakan metode elminasi Gauss-Jordan, dekomposisi LU, iterasi Jacobi, dan iterasi Gauss-Seidel. Untuk dapat menyelesaikannya menggunakan metode-metode tersebut pada R, kita perlu membentuk matriksnya terlebih dahulu:
(A <- matrix(c(6,-3,0,0,-3,
0,3,-1,-1,-1,
-1,0,9,-8,0,
0,0,0,11,0,
0,0,0,-2,4),nrow=5))
## [,1] [,2] [,3] [,4] [,5]
## [1,] 6 0 -1 0 0
## [2,] -3 3 0 0 0
## [3,] 0 -1 9 0 0
## [4,] 0 -1 -8 11 -2
## [5,] -3 -1 0 0 4
(b <- c(50,0,160,0,0))
## [1] 50 0 160 0 0
gauss_jordan(cbind(A,b))
## b
## [1,] 1 0 0 0 0 11.51
## [2,] 0 1 0 0 0 11.51
## [3,] 0 0 1 0 0 19.06
## [4,] 0 0 0 1 0 17.00
## [5,] 0 0 0 0 1 11.51
lu_solve(A,b)
## $P
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 0 0 0
## [2,] 0 1 0 0 0
## [3,] 0 0 1 0 0
## [4,] 0 0 0 1 0
## [5,] 0 0 0 0 1
##
## $L
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.0 0.0000 0.00000 0 0
## [2,] -0.5 1.0000 0.00000 0 0
## [3,] 0.0 -0.3333 1.00000 0 0
## [4,] 0.0 -0.3333 -0.92453 1 0
## [5,] -0.5 -0.3333 -0.07547 0 1
##
## $U
## [,1] [,2] [,3] [,4] [,5]
## [1,] 6 0 -1.000e+00 0 0
## [2,] 0 3 -5.000e-01 0 0
## [3,] 0 0 8.833e+00 0 0
## [4,] 0 0 0.000e+00 11 -2
## [5,] 0 0 1.110e-16 0 4
##
## $result
## [1] 11.51 11.51 19.06 17.00 11.5
gauss_seidel(A,b, maxiter=200)
## $X
## [,1]
## [1,] 11.51
## [2,] 11.51
## [3,] 19.06
## [4,] 17.00
## [5,] 11.51
##
## $iter
## [1] 7