
1. Vektor
Vektor
merupakan komFROWbinasi berbagai nilai (numerik, karakter, logical, dan
sebagainya berdasarkan jenis input data) pada objek yang sma. Pada contoh kasus
berikut, pembaca akan memiliki sesuai jenis data input yaituvektor numerik, vector
karakter, vektor logical, dll.
1.1
Membuat
vektor
Vektor
dibuat dengan menggunakan fungsi c()(concatenate) seperti yang disajikan
pada sintaks berikut:
#
membuat vektor numerik
x
<- c(3,3.5,4,7)
x
# print vektor
##
[1] 3.0 3.5 4.0 7.0
#
membuat vektor karakter
y
<- c("Apel", "Jeruk", "Rambutan", "Salak")
y
# print vektor
##
[1] "Apel"
"Jeruk"
"Rambutan" "Salak"
#
membuat vektor logical
t
<- c("TRUE", "FALSE", "TRUE")
t
# print vektor
##
[1] "TRUE" "FALSE"
"TRUE"
selain
menginput nilai pada vektor, kita juga dapat memberi nama nilai setiap vektor
menggunakan fungsi names().
#
Membuat vektor jumlah buah yang dibeli
Jumlah
<- c(5,5,6,7)
names(Jumlah)
<- c("Apel", "Jeruk", "Rambutan", "Salak")
#
Atau
Jumlah
<- c(Apel=5, Jeruk=5, Rambutan=6, Salak=7)
#
Print
Jumlah
## Apel
Jeruk Rambutan Salak
## 5
5 6 7
Penting!!!
Vektor
hanya dapat memuat satu buah jenis data. Vektor hanya dapat mengandung jenis
data numerik saja, karakter saja, dll.
Untuk
menentukan panjang sebuah vektor kita dapat menggunakan fungsi lenght().
length(Jumlah)
##
[1] 4
2. Matriks
Matriks
seperti Excel sheet yang berisi banyak baris dan kolom (kumpulan bebrapa
vektor). Matriks digunakan untuk menggabungkan vektor dengan tipe yang sama,
yang bisa berupa numerik, karakter, atau logis. Matriks digunakan untuk
menyimpan tabel data dalam R. Baris-baris matriks pada umumnya adalah individu
/ pengamatan dan kolom adalah variabel.
2.1
Membuat matriks
Untuk
membuat matriks kita dapat menggunakan fungsi cbind() atau rbind().
Berikut adalah contoh sintaks untuk membuat matriks.
#
membuat vektor numerik
col1
<- c(5, 6, 7, 8, 9)
col2
<- c(2, 4, 5, 9, 8)
col3
<- c(7, 3, 4, 8, 7)
#
menggabungkan vektor berdasarkan kolom
my_data
<- cbind(col1, col2, col3)
my_data
## col1 col2 col3
##
[1,] 5 2
7
##
[2,] 6 4
3
##
[3,] 7 5
4
##
[4,] 8 9
8
##
[5,] 9 8
7
#
Mengubah atau menambahkan nama baris
rownames(my_data)
<- c("row1", "row2",
"row3", "row4",
"row5")
my_data
## col1 col2 col3
##
row1 5 2
7
##
row2 6 4
3
##
row3 7 5
4
##
row4 8 9
8
##
row5 9 8
7
Catatan:
cbind():
menggabungkan objek R berdasarkan kolom
rbind():
menggabungkan objek R berdasarkan baris
rownames():
mengambil atau menetapkan nama-nama baris dari objek seperti-matriks
colnames():
mengambil atau menetapkan nama-nama kolom dari objek seperti-matriks `
Kita
dapat melakukan tranpose (merotasi matriks sehingga kolom menjadi baris dan
sebaliknya) menggunakan fungsi t(). Berikut adalah contoh penerapannya:
t(my_data)
## row1 row2 row3 row4 row5
##
col1 5 6
7 8 9
##
col2 2 4
5 9 8
##
col3 7 3
4 8 7
Selain
melalui pembentukan sejumlah objek vektor, kita juga dapat membuat matriks
menggunakan fungsi matrix(). Secara sederhana fungsi tersebut dapat
dituliskan sebagai berikut:
matrix(data
= NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL)
Catatan:
data:
vektor data opsional
nrow, ncol:
jumlah baris dan kolom yang diinginkan, masing-masing.
byrow:
nilai logis. Jika FALSE (default) matriks diisi oleh kolom, jika tidak, matriks
diisi oleh baris.
dimnames:
Daftar dua vektor yang memberikan nama baris dan kolom masing-masing. `
Dalam
kode R di bawah ini, data input memiliki panjang 6. Kita ingin
membuat matriks dengan dua kolom. Kita tidak perlu menentukan jumlah baris (di
sini nrow = 3). R akan menyimpulkan ini secara otomatis. Matriks
diisi kolom demi kolom saat argumen byrow = FALSE. Jika kita ingin mengisi
matriks dengan baris, gunakan byrow = TRUE. Berikut adalah contoh
pembuatan matriks menggunakan fungsi matrix().
data
<- matrix(
data = c(1,2,3, 11,12,13),
nrow = 2, byrow = TRUE,
dimnames = list(c("row1", "row2"),
c("C.1", "C.2",
"C.3"))
)
data
## C.1 C.2 C.3
##
row1 1
2 3
##
row2 11
12 13
Untuk
mengetahui dimensi dari suatu matriks, kita dapat menggunakan fungsi ncol() untuk
mengetahui jumlah kolom matriks dan nrow() untuk mengetahui jumlah
baris pada matriks. Berikut adalah contoh penerapannya:
#
mengetahui jumlah kolom
ncol(my_data)
##
[1] 3
#
mengetahui jumlah baris
nrow(my_data)
##
[1] 5
Jika
ingin memperoleh ringkasan terkait dimensi matriks kita juga dapat mengunakan
fungsi dim() untuk mengetahui jumlah baris dan kolom matriks. Berikut
adalah contoh penerapannya:
dim(my_data)
# jumlah baris dan kolom
##
[1] 5 3
2.2
Perhitungan Menggunakan Matriks
_
Kita juga dapat melakukan operasi matematika pada matriks. Pada operasi
matematika pada matriks proses yang terjadi bisa lebih kompleks dibanding pada
vektor, dimana kita dapat melakukan operasi untuk memperoleh gambaran data pada
tiap kolom atau baris.
Berikut
adalah contoh operasi matematika sederhana pada matriks:
#
mengalikan masing-masing elemen matriks dengan 2
my_data*2
## col1 col2 col3
##
row1 10 4
14
##
row2 12 8
6
##
row3 14 10
8
##
row4 16 18
16
##
row5 18 16
14
#
memperoleh nilai log basis 2 pada masing-masing elemen matriks
log2(my_data)
## col1
col2 col3
##
row1 2.322 1.000 2.807
##
row2 2.585 2.000 1.585
##
row3 2.807 2.322 2.000
##
row4 3.000 3.170 3.000
##
row5 3.170 3.000 2.807
Seperti
yang telah penulis jelaskan sebelumnya, kita juga dapat melakukan operasi
matematika untuk memperoleh hasil penjumlahan elemen pada tiap baris atau kolom
dengan menggunakan fungsi rowSums() untuk baris dan colSums() untuk
kolom.
#
Total pada tiap kolom
colSums(my_data)
##
col1 col2 col3
## 35
28 29
#
Total pada tiap baris
rowSums(my_data)
##
row1 row2 row3 row4 row5
## 14
13 16 25
24
Jika
kita tertarik untuk mencari nilai rata-rata tiap baris arau kolom kita juga
dapat menggunakan fungsi rowMeans() atau colMeans(). Berikut adalah
contoh penerapannya:
#
Rata-rata tiap baris
rowMeans(my_data)
## row1
row2 row3 row4
row5
##
4.667 4.333 5.333 8.333 8.000
#
Rata-rata tiap kolom
colMeans(my_data)
##
col1 col2 col3
## 7.0
5.6 5.8
Kita
juga dapat melakukan perhitungan statistika lainnya menggunakan fungsi apply().
Berikut adalah format sederhananya:
apply(x,
MARGIN, FUN)
Catatan:
x :
data matriks
MARGIN :
Nilai yang dapat digunakan adalah 1 (untuk operasi pada baris)
dan 2 (untuk operasi pada kolom)
FUN :
fungsi yang diterapkan pada baris atau kolom
untuk
mengetahui fungsi (FUN) apa saja yang dapat diterapkan pada fungsi apply() jalankan
sintaks bantuan berikut:
help(apply)
Berikut
adalah contoh penerapannya:
#
Rata-rata pada tiap baris
apply(my_data,
1, mean)
## row1
row2 row3 row4
row5
##
4.667 4.333 5.333 8.333 8.000
#
Median pada tiap kolom
apply(my_data,
2, median)
##
col1 col2 col3
## 7
5 7
Perhitungan
lainnya tidak akan dibahas pada chapter ini. Operasi matriks lebih
lengkap selanjutnya akan dibahas pada chapter selanjutnya.
3.
Vektor dan matriks
Pada
Chapter 2.7 dan
Chapter 2.8 telah
dijelaskan sekilas bagaimana cara melakukan operasi pada vektor dan matriks.
Pada chapter ini, penulis akan menambahkan operasi-operasi lain yang
dapat dilakukan pada vektor dan matriks. Dasar-dasar operasi ini selanjutnya
akan digunakan sebagai dasar menyusun algoritma penyelesaian sistem persamaan
linier.
3.1
Operasi
Vektor
Misalkan
saja diberikan vektor uu dan vv yang ditunjukkan pada
Persamaan (6.1).

Jika
kita menambahkan atau mengeluarkan nilai elemen vector dengan suatu skalar
(konstanta yang hanya memiliki besaran) maka operasi penjumlahan/pengurangan
akan dilakukan pada setiap elemen vector
Jika kita melakukan penjumlahan
pada vector u dan v , maka operasi akan terjadi pada masing-masing elemen
indeks yang sama

Untuk
lebih memahami operasi tersebut, berikut penulis berikan contoh penerapannya
pada R:
u
<- seq(1,5)
v
<- seq(6,10)
#
penjumlahan
u+v
##
[1] 7
9 11 13 15
#
penguranga
u-v
##
[1] -5 -5 -5 -5 -5
Bagaimana
jika kita melakukan operasi dua vektor, dimaana salah satu vektor memiliki penjang
yang berbeda?. Untuk memnjawab hal tersebut, perhatikan sintaks berikut:
x
<- seq(1,2)
u+x
##
Warning in u + x: longer object length is not a
##
multiple of shorter object length
##
[1] 2 4 4 6 6
Berdasarkan
contoh tersebut, R akan mengeluarkan peringatan yang menunjukkan
operasi dilakukan pada vektor dengan panjang berbeda. R akan tetap
melakukan perhitungan dengan menjumlahkan kembali vektor uu yang
belum dijumlahkan dengan vektor xx sampai seluruh elemen vektor uu dilakukan
operasi penjumlahan.
Operasi
lain yang dapat dilakukan pada vektor adalah menghitung inner product dan
panjang vektor. Inner product dihitung menggunakan Persamaan (6.4).

Panjang
vektor atau vektor yang telah dinormalisasi dihitung menggunakan
Persamaan (6.5)

Berikut
adalah contoh bagaimana cara menghitung inner product dan panjang
vektor menggunakan R:
#
inner product
u%*%v
## [,1]
##
[1,] 130
#
panjang vektor u
sqrt(sum(u*u))
##
[1] 7.416
6.1.2 Operasi
matriks
Misalkan
kita memiliki 2 buah matriks AA dan BB.
Untuk
lebih memahaminya, berikut disajikan contoh operasi penjumlahan pada matriks:
A
<- matrix(1:9,3)
B
<- matrix(10:18,3)
C
<- matrix(1:6,3)
#
penjumlahan dengan skalar
A+1
## [,1] [,2] [,3]
##
[1,] 2 5
8
##
[2,] 3 6
9
##
[3,] 4 7
10
#
penjumlahan A+B
A+B
## [,1] [,2] [,3]
##
[1,] 11 17
23
##
[2,] 13 19
25
##
[3,] 15 21
27
#
penjumlahan
A+C
Operasi
pehitungan lain yang penting pada matriks adalah operasi perkalian matriks.
Perlu diperhatikan bahwa untuk perkalian matriks, jumlah kolom matriks sebelah
kiri harus sama dengan jumlah baris pada matriks sebelah kanan. Perkalian
antara dua matriks disajikan pada Persamaan (6.9).
Am.n×Bn.r=ABm.r(6.9)(6.9)Am.n×Bn.r=ABm.r
Pada R perkalian
matriks dilakukan menggunakan operator %*%. Berikut adalah contoh
perkalian matriks pada R:
#
Perkalian matriks
A%*%B
## [,1] [,2] [,3]
##
[1,] 138
174 210
##
[2,] 171
216 261
##
[3,] 204
258 312
Operasi
Baris Elementer
Terdapat
tiga buah operasi dasar pada baris matriksoperasi baris elementer. Ketiga
operasi ini akan menjadi dasar operasi sub-chapter selanjutnya.
Ketiga operasi dasar tersebut antara lain:
Row
Scalling. Mengalikan baris matriks dengan konstanta bukan nol.
Row
Swaping. Menukar urutan baris pada sebuah matriks (contoh: menukar baris 1
dengan baris 2 dan sebaliknya).
Row
Replacement. Baris matriks diganti dengan hasil penjumlahan atau pengurangan
baris matriks tersebut dengan baris matriks lainnya, dimana baris matriks
lainnya yang akan dijumlahkan/dikurangkan dengan matriks tersebut telah
dilakukan proses row scalling. Luaran yang diperoleh pada umumnya adalah
nilai nol pada baris matriks awal atau akhir.
Ketiga
proses tersebut akan terjadi secara berulang, khusunya jika kita hendak
mengerjakan sistem persamaan linier menggunakan algoritma eliminasi Gauss.
Untuk mempermudah proses tersebut, kita dapat membuat masing-masing fungsi
untuk masing-masing operasi tersebut. Algoritma fungsi-fungsi tersebut selanjutnya
menjadi dasar penyusunan algoritma fungsi-fungsi eliminasi Gauss dan
dekomposisi matriks yang akan dijelaskan pada chapter selanjutnya.
Fungsi row
scalling pada R dapat dituliskan pada sintaks berikut:
scale_row
<- function(m, row, k){
m[row, ] <- m[row, ]*k
return(m)
}
Berikut
adalah contoh penerapannya:
#
membuat matriks A
(A
<- matrix(1:15, nrow=5))
## [,1] [,2] [,3]
##
[1,] 1 6
11
##
[2,] 2 7
12
##
[3,] 3 8
13
##
[4,] 4 9
14
##
[5,] 5 10
15
#
lakukan scaling pada row 2 dengan nilai 10
scale_row(m=A,
row=2, 10)
## [,1] [,2] [,3]
##
[1,] 1 6
11
##
[2,] 20 70
120
##
[3,] 3 8
13
##
[4,] 4 9
14
##
[5,] 5 10
15
Catatan: Untuk
menyimpan hasil perhitungan, simpan proses perhitungan dalam sebuah objek
(lihat Chapter 2.5).
Row
swapping merupakan proses yang berulang, kita perlu menyimpan terlebih
dahulu baris matriks pertama kedalam sebuah objek. Baris matriks pertama
selanjutnya diganti dengan baris matriks kedua, sedangkan baris matriks kedua
selanjutnya akan diganti dengan baris matriks pertama yang telah terlebih
dahulu disimpan dalam sebuah objek. Fungsi row swapping pada R dapat
dituliskan pada sintaks berikut:
swap_row
<- function(m, row1, row2){
row_tmp <- m[row1, ]
m[row1, ] <- m[row2, ]
m[row2, ] <- row_tmp
return(m)
}
Berikut
merupakan contoh penerapan fungsi swap_row():
#
pertukarkan baris 2 dengan baris 5
swap_row(m=A,
row1=2, row2=5)
## [,1] [,2] [,3]
##
[1,] 1 6
11
##
[2,] 5 10
15
##
[3,] 3 8
13
##
[4,] 4 9
14
##
[5,] 2 7 12
Pada
proses row replacement, proses perhitungan dilakukan dengan melakukan
penjumlahan suatu baris matriks dengan baris matriks lainnya dengan terlebih
dahulu melakukan row scalling terhadap matriks lainnya. Berikut
adalah fungsi replace_row() yang ditulis pada R:
replace_row
<- function(m, row1, row2, k){
m[row2, ] <- m[row2, ] + m[row1, ]*k
return(m)
}
Berikut
adalah contoh penerapan fungsi replace_row():
replace_row(m=A,
row1=1, row2=3, k=-3)
## [,1] [,2] [,3]
##
[1,] 1 6
11
##
[2,] 2
7 12
##
[3,] 0
-10 -20
##
[4,] 4 9
14
##
[5,] 5 10
15
Matrik
Tridiagonal
Metode
eliminasi Gauss merupakan metode yang sederhana untuk digunakan khususnya jika
semua koefisien bukan nol berkumpul pada diagonal utama dan beberapa diagonal
sekitarnya. Suatu sistem yang bersifat demikian disebut sebagai banded dan
banyaknya diagonal yang memuat koefisien bukan nol disebut sebagai bandwidth.
Contoh khusus yang sering dijumpai adalah matriks tridiagonal yang
memiliki bandwidth tiga.
Proses
eliminasi untuk matriks tridiagonal bersifat trivial karena dengan membentuk
sebuah subdiagonal tambahan, proses substitusi mundur segera dapat dilakukan.
Bentuk matriks tridiagonal disajikan pada Persamaan (6.19).
Pada beberapa textbook,
diagonal matriks sering dilambangkan dengan ll(diagonal bawah), dd(diagonal
tengah), dan uu (diagonal atas). Bentuk matriksnya disajikan pada
Persamaan (6.21).

Algoritma
Penyelesaian Matrik Tridiagonal
Bentuk
sistem persamaan linier menjadi matriks pada Persamaan (6.21).
Lakukan foward
sweep. Setiap elemen diagonal ll dieliminasi menggunakan reduksi
baris.

Berdasarkan
algoritma tersebut, kita dapat membangun sebuah fungsi pada R. Fungsi
penyelesaian matriks tridiagonal disajikan sebagai berikut:
tridiagmatrix
<- function (L, D, U, b){
n <- length (D)
L <- c(NA , L)
## forward sweep
U[1] <- U[1] / D[1]
b[1] <- b[1] / D[1]
for(i in 2:(n - 1)){
U[i] <- U[i] / (D[i] - L[i] * U[i - 1])
b[i] <- (b[i] - L[i] * b[i - 1]) /
(D[i] - L[i] * U[i - 1])
}
b[n] <- (b[n] - L[n] * b[n - 1])/(D[n] - L[n]
* U[n - 1])
## backward sweep
x <- rep.int (0, n)
x[n] <- b[n]
for(i in (n - 1) :1)
x[i] <- b[i] - U[i] * x[i + 1]
return (x)
}
Contoh
6.5 Selesaikan sistem persamaan berikut menggunakan fungsi tridiagmatrix() dan
fungsi gauss_jordan()!

Untuk
menyelesaikan persamaan tersebut menggunakan fungsi tridiagmatrix(), kita
perlu membentuk vektor diagonal ll, dd, uu, dan bb.
l
<- u <- c(4, 2, 3); d <- c(3, 5, 5, 5)
b
<- c(20, 28, 18, 18)
Setelah
terbentuk, vektor tersebut dapat langsung dimasukkan ke dalam fungsi tridiagmatrix().
tridiagmatrix(L=l,
D=d, U=u, b=b)
##
[1] 4 2 1 3
Untuk
menyelesaikannya menggunakan fungsi gauss_jordan(), kita perlu
membentuk augmented matrix-nya terlebih dahulu.
m
<- matrix(c(3,4,0,0,4,5,2,0,
0,2,5,3,0,0,3,5,
20,28,18,18), nrow=4)
gauss_jordan(m)
## [,1] [,2] [,3] [,4] [,5]
##
[1,] 1 0
0 0 4
##
[2,] 0 1
0 0 2
##
[3,] 0 0 1 0
1
##
[4,] 0 0
0 1 3
Tidak ada komentar:
Posting Komentar