Dosen Pengampu : Prof.Dr.Suhartono,M.Kom

Lembaga : UIN Maliki Malang

Jurusan : Teknik Informatika

Fakultas : Sains Dan Teknologi

Eliminasi Gauss-Jordan

Berbeda dengan metode eliminasi Gauss yang telah dijelaskan pada Chapter 6.3.1, metode eliminasi Gauss-Jordan membentuk matriks menjadi bentuk reduced row echelon form. Metode ini merupakan pengembangan metode eliminasi Gauss, dimana matriks sebelah kiri augmented matrix diubah menjadi matriks diagonal.

Algoritma Metode Eliminasi Gauss-Jordan

  1. Masukkan matriks A dan vektor B beserta ukurannya n

  2. Buat augmented matriks [A][B] namakan dengan A

  3. Untuk baris ke-i dimana i=1 s/d n

-Perhatikan apakah nilai ai.i sama dengan nol:

Bila ya: pertukaran baris ke-i dan baris ke-i+k<=n, dimana ai+k.i tidak sama dengan nol, bila tidak ada berarti perhitungan tidak bisa dilanjutkan dan proses dihentikan dengan tanpa penyelesaian.

Bila tidak: lanjutkan

-Jadikan nilai diagonalnya menjadi satu dengan cara untuk setiap kolom k dimana k=1 s/d n+1, hitung ai.k=ai.k/ai.i

  1. Untuk baris ke-j, dimana j=i+1 s/d n. Lakukan operasi baris elementer untuk kolom k dimana k= 1 s/d n

Dari algoritma tersebut, kita dapat membangun sebuah fungsi menggunakan R. Fungsi tersebut adalah sebagai berikut:

gauss_jordan <- function (a){
    m <- nrow (a)
    n <- ncol (a)
    piv <- 1
    
# cek elemen diagonal utama apakah bernilai nol
    for(row_curr in 1:m){
        if(piv <= n){
            i <- row_curr
            while(a[i, piv] == 0 && i < m){
                i <- i + 1
                if(i > m){
                    i <- row_curr
                    piv <- piv + 1
                    if(piv > n)
                        return (a)
                }
            }

# jika diagonal utama bernilai nol,lakukan row swapping
            if(i != row_curr)
                a <- swap_row(a, i, row_curr)
            
# proses pembentukan matriks reduced row echelon form
            piv_val <- a[row_curr , piv]
            a <- scale_row (a, row_curr , 1 / piv_val)
            for(j in 1: m){
                if(j != row_curr){
                    k <- a[j, piv]/a[row_curr, piv]
                    a <- replace_row (a, row_curr, j, -k)
                }
            }
            piv <- piv + 1
        }
    }
    return (a)
}(cars)

Dengan menggunakan fungsi gauss_jordan(),

(m <- matrix(c(1,2,1,4,3,8), nrow=2))
##      [,1] [,2] [,3]
## [1,]    1    1    3
## [2,]    2    4    8
gauss_jordan(m)
##      [,1] [,2] [,3]
## [1,]    1    0    2
## [2,]    0    1    1

Contoh 6.4 Dengan menggunakan fungsi gauss_jordan(), carilah penyelesaian sistem persamaan linier pada Contoh 6.1 dan Contoh 6.2:
Jawab:
Untuk Contoh 6.1:

am <- c(1,1,2,
        1,2,1,
        1,-1,2,
        6,2,10)
m <- matrix(am, nrow=3)

gauss_jordan(m)
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    1
## [2,]    0    1    0    2
## [3,]    0    0    1    3

Untuk Contoh 6.2:

m <- matrix(c(2,3,1,1,2,-5,
              -1,-2,4,1,1,3), 
            nrow=3)
gauss_jordan(m)
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    1
## [2,]    0    1    0    2
## [3,]    0    0    1    3

Referensi

https://bookdown.org/moh_rosidi2610/Metode_Numerik/calculation.html#assigningvar