Aljabar Linier

  

 


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

 

referensi materi dari : https://bookdown.org/moh_rosidi2610/Metode_Numerik/linearaljabar.html#operasivektor

Komentar