Dosen Pengempu : Prof. Dr. Suhartono, M.Kom
UIN Maulana Malik Ibrahim Malang - Teknik Informatika
Persamaan non-linier dapat diartikan sebagai persamaan yang tidak mengandung syarat seperti persamaan linier, sehingga persamaan non-linier dapat merupakan :
Dalam penyelesaian persamaan non-linier diperlukan akar-akar persamaan non-linier, dimana akar sebuah persamaan non-linier f(x) = 0 merupakan nilai x yang menyebabkan nilai f(x) sama dengan nol. Dalam hal ini dapat disimpulkan bahwa akar-akar penyelesaian persamaan non-linier merupakan titik potong antara kurva f(x) dengan sumbu x. Ilustrasi penjelasan tersebut ditampilkan pada Gambar dibawah ini
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 :
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 dibawah
Fungsi plot() :
plot(x, y, type="p")
Untuk lebih memahaminya berikut penulis akan sajikan contoh untuk masing-masing grafik tersebut. Berikut adalah contoh sintaks dan hasil plot yang disajikan di bawah ini
# membuat vektor data
x <- c(1:10); y <- x^2
x <- c(1:10); y <- x^2
par(mfrow=c(2,4))
type <- c("p","l","b","o","h","s","n")
for (i in type){
plot(x,y, type= i,
main= paste("type=", i))
}
Metode tertutup disebut juga metode bracketing. Disebut sebagai metode tertutup karena dalam pencarian akar-akar persamaan non-linier dilakukan dalam suatu selang [a,b].
Penyelesaian persamaan non-linier menggunakan metode tabel dilakukan dengan membagi persamaan menjadi beberapa area, dimana untuk x=[a,b] dibagi sebanyak N bagian dan pada masing-masing bagian dihitung nilai f(x) sehingga diperoleh nilai f(x) pada setiap N bagian.
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
Carilah akar persamaan f(x)=x+e^x pada rentang x=[−1,0] ?
Sebagai permulaan, jumlah pembagi yang digunakan adalah N=10. Dengan menggunakan fungsi root_table() diperoleh hasil dibawah :
tabel <- root_table(f=function(x){x+exp(x)},
a=0, b=1, N=10)
print(tabel)
## x fx
## 1 0.0 1.000000
## 2 0.1 1.205171
## 3 0.2 1.421403
## 4 0.3 1.649859
## 5 0.4 1.891825
## 6 0.5 2.148721
## 7 0.6 2.422119
## 8 0.7 2.713753
## 9 0.8 3.025541
## 10 0.9 3.359603
## 11 1.0 3.718282
Untuk melihat gambaran lokasi akar, kita dapat pula mengeplotkan data menggunakan fungsi plot. Berikut adalah fungsi yang digunakan :
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.
Soal – soal kerjakan secara manual dan menggunakan software RStudio :
1.
Secara Manual :
4x -7 < 3x -5
4x - 3x < -5 + 7
x < 2
HP = { x < 2 }
tabel <- root_table(f=function(x){4*x - 3*x - 7 + 5 },
a=0, b=1, N=10)
print(tabel)
## x fx
## 1 0.0 -2.0
## 2 0.1 -1.9
## 3 0.2 -1.8
## 4 0.3 -1.7
## 5 0.4 -1.6
## 6 0.5 -1.5
## 7 0.6 -1.4
## 8 0.7 -1.3
## 9 0.8 -1.2
## 10 0.9 -1.1
## 11 1.0 -1.0
plot(tabel)
2.
Secara Manual :
* 6 - 7x > 2x - 4
-7x + (-2x) > -4 + (-6)
-9x > -10
x < 10 / 9
* 6 - 7x ≤ 3x + 6
-7x + 3x ≤ 6 - 6
-10x ≤ 0
x ≥ 0
HP = { 0 ≤ x < 10 / 9 }
tabel <- root_table(f=function(x){ (((2*x-4) < (6-7*x)) < (3*x)+6)},
a=0, b=1, N=10)
print(tabel)
## x fx
## 1 0.0 1
## 2 0.1 1
## 3 0.2 1
## 4 0.3 1
## 5 0.4 1
## 6 0.5 1
## 7 0.6 1
## 8 0.7 1
## 9 0.8 1
## 10 0.9 1
## 11 1.0 1
plot(tabel)
3.
Secara Manual :
x^2 + x – 12 < 0
( x + 4 ) ( x -3 ) < 0
x + 4 > 0
x > -4
x - 3 < 0
x < 3
HP = { -4 < x < 3 }
tabel <- root_table(f=function(x){ (x^2) + x - 12},
a=-1, b=0, N=10)
print(tabel)
## x fx
## 1 -1.0 -12.00
## 2 -0.9 -12.09
## 3 -0.8 -12.16
## 4 -0.7 -12.21
## 5 -0.6 -12.24
## 6 -0.5 -12.25
## 7 -0.4 -12.24
## 8 -0.3 -12.21
## 9 -0.2 -12.16
## 10 -0.1 -12.09
## 11 0.0 -12.00
plot(tabel)
4.
Secara Manual :
3x^2 - 11x - 4 ≤ 0
(3x +1)(x -4) ≤ 0
x ≤ 4 atau x ≥ - 1/3
Hp = { -1/3 ≤ x ≤ 4 }
tabel <- root_table(f=function(x){3*(x^2)-11*x-4},
a=0, b=1, N=10)
print(tabel)
## x fx
## 1 0.0 -4.00
## 2 0.1 -5.07
## 3 0.2 -6.08
## 4 0.3 -7.03
## 5 0.4 -7.92
## 6 0.5 -8.75
## 7 0.6 -9.52
## 8 0.7 -10.23
## 9 0.8 -10.88
## 10 0.9 -11.47
## 11 1.0 -12.00
plot(tabel)
5.
Secara Manual :
Penyebut :
( x + 5 ) / ( 2x - 1 ) ≤ 0
2x - 1 < 0
2x < 1
x < 1 / 2
Pembilang :
x + 5 ≥ 0
x ≥ -5
HP = { -5 ≤ x < 1/2 }
tabel <- root_table(f=function(x){(x + 5) / (2*x - 1)},
a=0, b=2, N=10)
print(tabel)
## x fx
## 1 0.0 -5.000000
## 2 0.2 -8.666667
## 3 0.4 -27.000000
## 4 0.6 28.000000
## 5 0.8 9.666667
## 6 1.0 6.000000
## 7 1.2 4.428571
## 8 1.4 3.555556
## 9 1.6 3.000000
## 10 1.8 2.615385
## 11 2.0 2.333333
plot(tabel)