Mata Kuliah : Kalkulus

Prodi : Teknik Informatika

Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang

Persamaan non-linier dapat diartikan sebagai persamaan yang tidak mengandung syarat seperti persamaan linier, sehingga persamaan non-linier dapat merupakan:

  1. Persamaan yang memiliki pangkat selain satu (misal: x2x2)

  2. Persamaan yang mempunyai produk dua variabel (misal: xyxy)

Dalam penyelesaian persamaan non-linier diperlukan akar-akar persamaan non-linier, dimana akar sebuah persamaan non-linier f(x)=0f(x)=0 merupakan nilai xx yang menyebabkan nilai f(x)f(x) sama dengan nol. Dalam hal ini dapat disimpulkan bahwa akar-akar penyelesaian persamaan non-linier merupakan titik potong antara kurva f(x)f(x) dengan sumbu xx. Ilustrasi penjelasan tersebut ditampilkan pada Gambar 7.1.

Penyelesaian persamaan non-linier.

Gambar 7.1: Penyelesaian persamaan non-linier.

Contoh sederhana dari penentuan akar persamaan non-linier adalah penentuan akar persamaan kuadratik. Secara analitik penentuan akar persamaan kuadratik dapat dilakukan menggunakan Persamaan (7.1).

x1,2=−b±√b2−4a2a(7.1)(7.1)x1,2=−b±b2−4a2a

Untuk masalah yang lebih rumit, penyelesaian analitik sudah tidak mungkin dilakukan. Metode numerik dapat digunakan untuk menyelesaikan masalah yang lebih kompleks. Untuk mengetahui apakah suatu persamaan non-linier memiliki akar-akar penyelesaian atau tidak, diperlukan analisa menggunakan Teorema berikut:

Teorema 7.1 (root) Suatu range x=[a,b] mempunyai akar bila f(a) dan f(b) berlawanan tanda atau memenuhi f(a).f(b)<0

Untuk memahami teorema tersebut perhatikan ilustrasi pada Gambar 7.2.

Ilustrasi teorema Bolzano.

Gambar 7.2: Ilustrasi teorema Bolzano.

Pada Chapter 7 ini, akan dilakukan sejumlah pembahasan antara lain:

7.1 Metode Tertutup

Metode tertutup disebut juga metode bracketing. Disebut sebagai metode tertutup karena dalam pencarian akar-akar persamaan non-linier dilakukan dalam suatu selang [a,b][a,b].

7.1.1 Metode Tabel

Penyelesaian persamaan non-linier menggunakan metode tabel dilakukan dengan membagi persamaan menjadi beberapa area, dimana untuk x=[a,b]x=[a,b] dibagi sebanyak NN bagian dan pada masing-masing bagian dihitung nilai f(x)f(x) sehingga diperoleh nilai f(x)f(x) pada setian NN bagian.

Bila nilai f(xk)=0f(xk)=0 atau mendekati nol, dimana a≤k≤ba≤k≤b, maka dikatakan bahwa xkxk adalah penyelesaian persamaan f(x)f(x). Bila tidak ditemukan, dicari nilai f(xk)f(xk) dan f(xk+1)f(xk+1) yang berlawanan tanda. Bila tidak ditemukan, maka persamaan tersebut dapat dikatakan tidak mempunyai akar untuk rentang [a,b][a,b].

Bila akar persamaan tidak ditemukan, maka ada dua kemungkinan untuk menentukan akar persamaan, yaitu:

  1. Akar persamaan ditentukan oleh nilai mana yang lebih dekat. Bila f(xk)≤f(xk+1)f(xk)≤f(xk+1), maka akarnya xkxk. Bila f(xk+1)≤f(xk)f(xk+1)≤f(xk), maka akarnya xk+1xk+1.

  2. Perlu dicari lagi menggunakan rentang x=[xk,xk+1]x=[xk,xk+1].

Secara grafis penyelesaian persamaan non-linier menggunakan metode table disajikan pada Gambar 7.3.

Ilustrasi metode tabel.

Gambar 7.3: Ilustrasi metode tabel.


Algoritma Metode Tabel

  1. Definisikan fungsi f(x)f(x)

  2. Tentukan rentang untuk xx yang berupa batas bawah aa dan batas atas bb.

  3. Tentukan jumlah pembagi NN

  4. Hitung step pembagi

h=b+aN(7.2)(7.2)h=b+aN

  1. Untuk i=0i=0 s/d NN, hitung:

xi=a+i.h(7.3)(7.3)xi=a+i.h

yi=f(xi)(7.4)(7.4)yi=f(xi)

  1. Untuk i=0i=0 s/d NN, dimana
  • Bila f(x)=0f(x)=0, maka akarnya xkxk

  • Bila f(a)f(b)<0f(a)f(b)<0, maka:

    • f(xk)≤f(xk+1)f(xk)≤f(xk+1), maka akarnya xkxk

    • Bila tida, xk+1xk+1 adalah penyelesaian atau dapat dikatakan penyelesaian berada diantara xkxk dan xk+1xk+1.


Kita dapat membuat suatu fungsi pada R untuk melakukan proses iterasi pada metode Tabel. Fungsi root_table() akan melakukan iterasi berdasarkan step algoritma 1 sampai 5. Berikut adalah sintaks yang digunakan:

root_table <- function(f, a, b, N=20){
    h <- abs((a+b)/N)
    x <- seq(from=a, to=b, by=h)
    fx <- rep(0, N+1)
    for(i in 1:(N+1)){
      fx[i] <- f(x[i])
    }
    data <- data.frame(x=x, fx=fx)
    return(data)
}

Contoh 7.1 Carilah akar persamaan f(x)=x+exf(x)=x+ex pada rentang x=[−1,0]x=[−1,0]?

Jawab:

Sebagai permulaan, jumlah pembagi yang digunakan adalah N=10N=10. Dengan menggunakan fungsi root_table() diperoleh hasil yang disajikan pada Tabel 7.1.

tabel <- root_table(f=function(x){x+exp(x)},
                     a=-1, b=0, N=10)
Tabel 7.1: Penyelesaian persamaan x+exp(x)=0
x fx
-1.0 -0.6321
-0.9 -0.4934
-0.8 -0.3507
-0.7 -0.2034
-0.6 -0.0512
-0.5 0.1065
-0.4 0.2703
-0.3 0.4408
-0.2 0.6187
-0.1 0.8048
0.0 1.0000

Berdasarkan Tabel 7.1 diperoleh penyelesaian di antara −0,6−0,6 dan −0,5−0,5 dengan nilai f(x)f(x) masing-masing sebesar −0,0512−0,0512 dan −0,1065−0,1065, sehingga dapat diambil penyelesaian x=−0,6x=−0,6. Kita dapat terus melakukan iterasi sampai memperoleh nilai f(x)f(x) < nilai toleransi dengan terus merubah rentang yang diberikan. Iterasi berikutnya dengan nilai pembagi sama dan rentang nilai x=[−0,6;−0,5]x=[−0,6;−0,5] diperoleh nilai x=−0,57x=−0,57 dan f(x)=0,00447f(x)=0,00447.

Untuk melihat gambaran lokasi akar, kita dapat pulang mengeplotkan data menggunakan fungsi plot. Berikut adalah fungsi yang digunakan:

Plot fungsi x+exp(x) pada rentang -1 sampai 0.

Gambar 7.4: Plot fungsi x+exp(x) pada rentang -1 sampai 0.

Untuk mengetahui lokasi akar dengan lebih jelas, kita dapat memperkecil lagi rentang nilai yang dimasukkan dalam fungsi curve().

Metode tabel pada dasarnya memiliki kelemahan yaitu cukup sulit untuk memdapatkan error penyelesaian yang cukup kecil, sehingga metode ini jarang sekali digunakan untuk menyelesaikan persamaan non-linier. Namun, metode ini cukup baik digunakan dalam menentukan area penyelesaian sehingga dapat dijadikan acuan metode lain yang lebih baik.

7.1.2 Metode Biseksi

Prinsip metode bagi dua adalah mengurung akar fungsi pada interval x=[a,b]x=[a,b] atau pada nilai xx batas bawah aa dan batas atas bb. Selanjutnya interval tersebut terus menerus dibagi 2 hingga sekecil mungkin, sehingga nilai hampiran yang dicari dapat ditentukan dengan tingkat toleransi tertentu. Untuk lebih memahami metode biseksi, perhatikan visualisasi pada Gambar 7.5.

Ilustrasi metode biseksi.

Gambar 7.5: Ilustrasi metode biseksi.

Metode biseksi merupakan metode yang paling mudah dan paling sederhana dibanding metode lainnya. Adapun sifat metode ini antara lain:

  1. Konvergensi lambat

  2. Caranya mudah

  3. Tidak dapat digunakan untuk mencari akar imaginer

  4. Hanya dapat mencari satu akar pada satu siklus.


Algoritma Metode Biseksi

  1. Definisikan fungsi f(x)f(x)

  2. Tentukan rentang untuk xx yang berupa batas bawah aa dan batas atas bb.

  3. Tentukan nilai toleransi ee dan iterasi maksimum NN

  4. Hitung f(a)f(a) dan f(b)f(b)

  5. Hitung:

x=a+b2(7.5)(7.5)x=a+b2

  1. Hitung f(x)f(x)

  2. Bila f(x).f(a)<0f(x).f(a)<0, maka b=xb=x dan f(b)=f(x)f(b)=f(x). Bila tidak, a=xa=x dan f(a)=f(x)f(a)=f(x)

  3. Bila |b−a|<e|b−a|<e atau iterasi maksimum maka proses dihentikan dan didapatkan akar=xx, dan bila tidak ulangi langkah 6.

  4. Jika sudah diperoleh nilai dibawah nilai toleransi, nilai akar selanjutnya dihitung berdasarkan Persamaan (7.5) dengan nilai aa dan bb merupakan nilai baru yang diperoleh dari proses iterasi.


Berdasarkan algoritma tersebut, kita dapat menyusun suatu fungsi pada R yang dapat digunakan untuk melakukan iterasi tersebut. Fungsi root_bisection() merupakan fungsi yang telah penulis susun untuk melakukan iterasi menggunakan metode biseksi. Berikut adalah sintaks dari fungsi tersebut:

root_bisection <- function(f, a, b, tol=1e-7, N=100){
  iter <- 0
  fa <- f(a)
  fb <- f(b)
  
  while(abs(b-a)>tol){
    iter <- iter+1
    if(iter>N){
      warning("iterations maximum exceeded")
      break
    }
    x <- (a+b)/2
    fx <- f(x)
    if(fa*fx>0){
      a <- x
      fa <- fx
    } else{
      b <- x
      fb <- fx
    }
  }
  
  # iterasi nilai x sebagai return value
  root <- (a+b)/2
  return(list(`function`=f, root=root, iter=iter))
}

Contoh 7.2 Carilah akar persamaan f(x)=xe−x+1f(x)=xe−x+1 pada rentang x=[−1,0]x=[−1,0] dengan nilai toleransi sebesar 10−710−7?

Jawab:

Langkah pertama dalam penghitungan adalah menghitung nilai xx menggunakan Persamaan (7.5).

x=−1+02=−0,5x=−1+02=−0,5

Hitung nilai f(x)f(x) dan f(a)f(a).

f(x)=−0,5.e0,5+1=0,175639f(x)=−0,5.e0,5+1=0,175639

f(a)=−1.e1+1=−1,71828f(a)=−1.e1+1=−1,71828

Berdasarkan hasil perhitungan diperoleh:

f(x).f(a)<0f(x).f(a)<0

Sehingga b=xb=x dan f(b)=f(x)f(b)=f(x). Iterasi dilakukan kembali dengan menggunakan nilai bb tersebut.

Untuk mempersingkat waktu iterasi kita akan menggunakan fungsi root_bisection() pada R. Berikut adalah sintaks yang digunakan:

root_bisection(function(x){x*exp(-x)+1},
               a=-1, b=0)

## $`function`
## function (x) 
## {
##     x * exp(-x) + 1
## }
## <bytecode: 0x000000001d62cab0>
## 
## $root
## [1] -0.5671
## 
## $iter
## [1] 24

Berdasarkan hasil iterasi diperoleh akar persamaan x=−2.980232e−08x=−2.980232e−08 dan iterasi yang diperlukan untuk memperolehnya sebanyak 2424 iterasi.

7.1.3 Metode Regula Falsi

Metode regula falsi merupakan metode yang menyerupai metode biseksi, dimana iterasi dilakukan dengan terus melakukan pembaharuan rentang untuk memperoleh akar persamaan. Hal yang membedakan metode ini dengan metode biseksi adalah pencarian akar didasarkan pada slope (kemiringan) dan selisih tinggi dari kedua titik rentang. Titik pendekatan pada metode regula-falsi disajikan pada Persamaan (7.6).

x=f(b).a−f(a).bf(b)−f(a)(7.6)(7.6)x=f(b).a−f(a).bf(b)−f(a)

Ilustrasi dari metode regula falsi disajikan pada Gambar 7.6.

Ilustrasi metode regula falsi.

Gambar 7.6: Ilustrasi metode regula falsi.


Algoritma Metode Regula Falsi

  1. Definisikan fungsi f(x)f(x)

  2. Tentukan rentang untuk xx yang berupa batas bawah aa dan batas atas bb.

  3. Tentukan nilai toleransi ee dan iterasi maksimum NN

  4. Hitung f(a)f(a) dan f(b)f(b)

  5. Untuk iterasi i=1i=1 s/d NN

  • Hitung nilai xx berdasarkan Persamaan (7.6)

  • Hitung f(x)f(x)

  • Hitung error=|f(x)|error=|f(x)|

  • Jika f(x).f(a)<0f(x).f(a)<0, maka b=xb=x dan f(b)=f(x)f(b)=f(x). Jika tidak, a=xa=x dan f(a)=f(x)f(a)=f(x).

  1. Akar persamaan adalah xx

Fungsi root_rf() didasarkan pada langkah-langkah di atas. Sintaks fungsi tersebut adalah sebagai berikut:

root_rf <- function(f, a, b, tol=1e-7, N=100){
  iter <- 1
  fa <- f(a)
  fb <- f(b)
  x <- ((fb*a)-(fa*b))/(fb-fa)
  fx <- f(x)
  
  while(abs(fx)>tol){
    iter <- iter+1
    if(iter>N){
      warning("iterations maximum exceeded")
      break
    }
    if(fa*fx>0){
      a <- x
      fa <- fx
    } else{
      b <- x
      fb <- fx
    }
    x <- (fb*a-fa*b)/(fb-fa)
    fx <- f(x)
  }
  
  # iterasi nilai x sebagai return value
  root <- x
  return(list(`function`=f, root=root, iter=iter))
}

Contoh 7.3 Selesaikan persamaan non-linier pada Contoh 7.2 menggunakan metode regula falsi pada rentang x=[−1,0]x=[−1,0] dengan nilai toleransi sebesar 10−710−7?

Jawab:

Langkah pertama penyelesaian dilakukan dengan mencari nilai f(a)f(a) dan f(b)f(b).

f(a)=−1.e1+1=−1,71828f(a)=−1.e1+1=−1,71828f(b)=0.e0+1=1f(b)=0.e0+1=1Hitung nilai xx dan f(x)f(x).

x=(1.−1)−(−1,71828.0)1+1,71828=−0.36788x=(1.−1)−(−1,71828.0)1+1,71828=−0.36788

f(x)=−0.36788.e0.36788+1=0.468536f(x)=−0.36788.e0.36788+1=0.468536

Berdasarkan hasil perhitungan diperoleh:

f(x).f(a)<0f(x).f(a)<0

Sehingga b=xb=x dan f(b)=f(x)f(b)=f(x). Iterasi dilakukan kembali dengan menggunakan nilai bb tersebut.

Untuk mempercepat proses iterasi, kita dapat pula menggunakan fungsi root_rf() pada R. Berikut adalah sintaks yang digunakan:

root_rf(function(x){x*exp(-x)+1},
               a=-1, b=0)

## $`function`
## function (x) 
## {
##     x * exp(-x) + 1
## }
## <bytecode: 0x000000001c7931a8>
## 
## $root
## [1] -0.5671
## 
## $iter
## [1] 15

Berdasarkan hasil perhitungan diperoleh nilai x=−0,5671433x=−0,5671433 dan jumlah iterasi yang diperlukan adalah 1515. Jumlah ini lebih sedikit dari jumlah iterasi yang diperlukan pada metode iterasi biseksi yang juga menunjukkan metode ini lebih cepat memperoleh persamaan dibandingkan metode biseksi.

REFERENSI

Bookdown Moh Rosidi / Metode Numerik / Akar Persamaan Non Linier

Suhartono.2015.Memahami Kalkulus Dasar Menggunakan Wolfram Mathematica 9.UIN Maliki Malang: Malang.