options(knitr.duplicate.label = “allow”)
Email : garryjuliusperman@gmail.com
rpubs :
https://rpubs.com/Garr
Jurusan : Statistika
Bisnis
Address : ARA Center, Matana University Tower
Jl. CBD Barat Kav, RT.1, Curug Sangereng,
Kelapa Dua, Tangerang, Banten 15810.
Metode tertutup disebut juga metode bracketing. Disebut sebagai metode tertutup karena dalam pencarian akar-akar persamaan non-linier dilakukan dalam suatu selang [a.b]
Prinsip metode bagi dua adalah mengurung akar fungsi pada interval
x=[a,b] atau pada nilai
x batas bawah a dan batas atas b. Selanjutnya interval tersebut terus
menerus dibagi 2 hingga sekecil mungkin, sehingga nilai hampiran yang
dicari dapat ditentukan dengan tingkat toleransi tertentu.
definisikan fungsi f(x)
tentukan rentang untuk x yang berupa batas bawah a dan batas atas b
tentukan nilai iterasi e dan iterasi maksimum N
hitung f(a) dan f(b)
hitung x=(a+b)/2
hitung f(x)
bila f(x).f(a)<0, maka b=x dan f(B)=f(x). bila tidak, a=x dan f(a)=f(x)
bila |b-a|<e atau iterasi maksimum pada proses dihentikan dan didapatkan akar=x, dan bila tidak ulangi langkah 6
Jika sudah diperoleh nilai dibawah nilai toleransi, nilai akar selanjutnya dihitung berdasarkan Persamaan dengan nilai a dan b merupakan nilai baru yang diperoleh dari proses iterasi
Carilah akar persamaan f(x)=xe^−x+1 pada rentang x=[−1,0] dengan nilai toleransi sebesar 10−7?
Langkah pertama dalam penghitungan adalah menghitung nilai x menggunakan Persamaan
x=(-1+0)/2=-0,5
hitung nilai f(x) dan f(a)
f(x)=-0.5.e^0,5+1=0,175639
f(a)=-1.e^1+1=-1,71828
Berdasarkan hasil perhitungan diperoleh:
f(x).f(a)<0
Sehingga b=x dan f(b)=f(x). Iterasi dilakukan kembali dengan menggunakan nilai b tersebut.
Berdasarkan hasil iterasi diperoleh akar persamaan x=−2.980232e−08 dan iterasi yang diperlukan untuk memperolehnya sebanyak 24 iterasi
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
}
}
root <- (a+b)/2
return(list(`function`=f, root=root, iter=iter))
}root_bisection(function(x){x*exp(-x)+1},
a=-1, b=0)## $`function`
## function(x){x*exp(-x)+1}
## <bytecode: 0x0000000014f942c0>
##
## $root
## [1] -0.5671433
##
## $iter
## [1] 24
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
x=((f(b).a)-(f(a).b))/f(b)-f(a)
Definisikan fungsi f(x)
Tentukan rentang untuk x yang berupa batas bawah a dan batas atas b.
Tentukan nilai toleransi e dan iterasi maksimum N
Hitung f(a) dan f(b)
Untuk iterasi i=1 sampai dengan N
akar persamaan adalah x
Selesaikan persamaan non-linier metode regula falsi pada rentang x=[−1,0] dengan nilai toleransi sebesar 10−7?
Langkah pertama penyelesaian dilakukan dengan mencari nilai f(a) dan f(b).
f(a)=-1.e^1+1=-1,71828
f(b)=0.e^0+1=1
Hitung nilai x dan f(x).
x=((1.-1)-(-1,71828.0))/(1+1,71828)=-0,36788
f(x)=−0.36788.e^0.36788+1=0.468536
Berdasarkan hasil perhitungan diperoleh:
f(x).f(a)<0
Sehingga b=x dan f(b)=f(x). Iterasi dilakukan kembali dengan menggunakan nilai b tersebut.
Berdasarkan hasil perhitungan diperoleh nilai x=−0,5671433 dan jumlah iterasi yang diperlukan adalah 15. 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.
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))
}root_rf(function(x){x*exp(-x)+1},
a=-1, b=0)## $`function`
## function(x){x*exp(-x)+1}
## <bytecode: 0x0000000013d6b0f0>
##
## $root
## [1] -0.5671433
##
## $iter
## [1] 15
Metode terbuka merupakan metode yang menggunakan satu atau dua tebakan awal yang tidak memerlukan rentang sejumlah nilai. Metode terbuka terdiri dari beberapa jenis yaitu metode Newton-Raphson, dan metode Secant.
Metode Newton-Raphson merupakan metode penyelesaian persamaan non-linier dengan menggunakan pendekatan satu titik awal dan mendekatinya dengan memperhatikan slope atau gradien. titik pendekatan dinyatakan pada Persamaan
x_n+1=x_n-(f(x_n)/f’(x_n))
Definisikan f(x) dan f′(x)
Tentukan nilai toleransi e dan iterasi masimum (N)
Tentukan tebakan awal x_0
Hitung f(x_0) dan f′(x_0)
Untuk iterasi i=1 sampai dengan N atau |f(x)|≥e, hitung x menggunakan Persamaan
Akar persamaan merupakan nilai x_i terakhir yang diperoleh.
Selesaikan persamaan non-linier x−e−x=0 menggunakan metode Newton-Raphson?
Untuk dapat menggunakan metode Newton-Raphson, terlebih dahulu kita perlu memperoleh turunan pertama dari persamaan tersebut.
f(x)=x−e−x→f′(x)=1+e−x
Tebakan awal yang digunakan adalah x=0.
f(x_0)=0−e^−0=−1
f′(x_0)=1+e^−0=2
Hitung nilai x baru:
x1=x0−(f(x_0)/f′(x_0))=0−(−1/2)=0,5
Berdasarkan hasil iterasi diperoleh akar penyelesaian persamaan non-linier adalah x=0,5671433 dengan jumlah iterasi yang diperlukan adalah 5 iterasi.
root_newton <- function(f, fp, x0, tol=1e-7, N=100){
iter <- 0
xold<-x0
xnew <- xold + 10*tol
while(abs(xnew-xold)>tol){
iter <- iter+1
if(iter>N){
stop("No solutions found")
}
xold<-xnew
xnew <- xold - f(xold)/fp(xold)
}
root<-xnew
return(list(`function`=f, root=root, iter=iter))
}root_newton(function(x){x-exp(-x)},
function(x){1+exp(-x)},
x0=0)## $`function`
## function(x){x-exp(-x)}
## <bytecode: 0x000000001c071530>
##
## $root
## [1] 0.5671433
##
## $iter
## [1] 5
Metode Secant merupakan perbaikan dari metode regula-falsi dan Newton Raphson, dimana kemiringan dua titik dinyatakan secara diskrit dengan mengambil bentuk garis lurus yang melalui satu titik. Persamaan yang dihasilkan disajikan pada Persamaan
y−y_0=m(x−(x_0))
Nilai m merupakan transformasi persamaan tersebut.
m_n=(f(x_n)−f(x_n−1))/(x_n−(x_n−1)
Bila y=f(x) dan yn dan xn diketahui, maka titik ke n+1 adalah:
(y_n+1)−y_n=m_n((x_n+1)−xn)
Bila titik xn+1 dianggap akar persamaan maka nilai yn+1=0, sehingga diperoleh:
−y_n=m_n((x_n+1)−x_n)
(((m_n.x_n)−y_n)/m_n)=x_n+1
atau
xn+1=x_n−y_n(1/m_n)
x_n+1=x_n−f(x_n)((x_n−x_n+1)/f(x_n)−f(x_n+1))
Berdasarkan Persamaan sebelumnya diketahui bahwa untuk memperoleh akar persamaan diperlukan 2 buah titik pendekatan. Dalam buku ini akan digunakan titik pendekatan kedua merupakan titik pendekatan pertama ditambah sepuluh kali nilai toleransi.
x_1=x_0+10∗tol
Definisikan f(x) dan f′(x)
Tentukan nilai toleransi e dan iterasi masimum (N)
Tentukan tebakan awal x_0 dan x_1
Hitung f(x_0) dan f(x_1)
Untuk iterasi i=1 sampai dengan N atau |f(x)|≥e, hitung x menggunakan Persamaan
Akar persamaan adalah nilai x yang terakhir.
Selesaikan persamaan non-linier pada contoh metode newton-rhapson menggunakan metode Secant?
Untuk menyelesaikan persamaan tersebut digunakan nilai pendekatan
awal
x_0=0 dan x_1=0+10∗(10−7)=10−6.
f(x_0)=0−e^−0=−1
f(x_1)=(10−6)−(e−10^−6)=−0,999998
Hitung nilai x_2 dan f(x_2).
x_2=0+0,999998((10^−6)−0)/(−0,999998+1)=0,499999
Berdasarkan hasil iterasi diperoleh nilai akar penyelesaian adalah x=0,5671433 dengan iterasi dilakukan sebanyak 6 kali.
root_secant <- function(f, x, tol=1e-7, N=100){
iter <- 0
xold <- x
fxold <- f(x)
x <- xold+10*tol
while(abs(x-xold)>tol){
iter <- iter+1
if(iter>N)
stop("No solutions found")
fx <- f(x)
xnew <- x - fx*((x-xold)/(fx-fxold))
xold <- x
fxold <- fx
x <- xnew
}
root<-xnew
return(list(`function`=f, root=root, iter=iter))
}root_secant(function(x){x-exp(-x)}, x=0)## $`function`
## function(x){x-exp(-x)}
## <bytecode: 0x000000001c9a6128>
##
## $root
## [1] 0.5671433
##
## $iter
## [1] 6
Bentuk interpolasi yang paling mudah adalah menghubungkan dua buah titik data dengan sebuah garis lurus. Teknik ini dan sebagainya interpolasi linier dan dilukiskan secara grafis pada gambar 2 dengan menggunakan segitiga sebangun
(f1(x)-f(x_0))/(x-x_0)=(f(x_1)-f(x_0))/(x_1-x_0)
Kemudian dapat diatur kembali supaya memenuhi sebuah formula interpolasi linier.
f(x)=f(x0)+((f(x_1)-f(x_0))/(x_1-x_0))(x-x_0)
Notasi f1(x) menandakan bahwa rumus tersebut adalah sebuah polinomial interpolasi orde pertama. Perhatikan bahwa disamping menyatakan skope dari gambar yang menghubungkan titik.
Tentukan dua titik P1 dan P2 dengan koordinatnya masing-masing (x1,y1) (x2,y2)
Tentukan nilai x dari titik yang akan dicari
Hitung nilai y dengan :
n menaksir logaritma asli dari Z (ln Z) dengan menggunakan interpolasi linear. Langkah pertama dengan melakukan komputasi interpolasi antara ln 1 = 0 dan ln 6 = 1,7917595 sebagai berikut :
f_t(2)=0+((1,7917595-0)/(6-1))(2-1)=0,35835190
Yang menunjukkan suatu persen kesalahan e t = 48,3%. Dengan menggunakan material yang lebih kecil dari x0 = 1 sampai x1 = 4, maka diperoleh perhitungan sebagai berikut :
ft(2)=0+((1,3862933-0)/(4-1))(2-1)=0,469209813
Jadi dengan memakai interval yang lebih pendek mengurangi kesalahan relatif persen menjadi e t = 33,3%. Kedua interpolasi beserta fungsi yang sesungguhnya terlihat pada gambar 3 sebagai berikut :
Interpolasi Kuadratik digunakan untuk mencari titik-titik antara dari 3 buah titik P1(x1,y1), P2(x2,y2) dan P3(x3,y3) dengan menggunakan pendekatan fungsi kuadrat.
Untuk memperoleh titik Q(x,y) digunakan interpolasi kuadratik sebagai berikut:
Tentukan 3 titik input P1(x1,y1), P2(x2,y2) dan P3(x3,y3)
Tentukan nilai x dari titik yang akan dicari
Hitung nilai y dari titik yang dicari menggunakan rumus dari interpolasi kuadratik:
Diketahu99.4i ln(8)=2.0794, ln(9)=2.1972, dan ln(9.5)=2.2513. Tentukan nilai ln(9.4) dengan interoplasi kuadrat.
Interpolasi polynomial digunakan untuk mencari titik-titik antara dari n buah titik P1(x1,y1), P2(x2,y2), P3(x3,y3), …, PN(xN,yN) dengan menggunakan pendekatan fungsi polynomial pangkat n-1:
Masukkan nilai dari setiap titik ke dalam persamaan polynomial di atas dan diperoleh persamaan simultan dengan n persamaan dan n variable bebas:
Penyelesaian persamaan simultan di atas adalah nilai-nilai a0, a1, a2, a3, …, an yang merupakan nilai-nilai koefisien dari fungsi pendekatan polynomial yang akan digunakan. Dengan memasukkan nilai x dari titik yang dicari pada fungsi polinomialnya, akan diperoleh nilai y dari titik tersebut.
Kecepatan naik roket diberikan sebagai fungsi waktu pada tabel. Tentukan kecepatan pada t = 16 detik dengan menggunakan splines linier.
Jawab :
t0=15, v(t0)=362,78
t1=20, v(t1)=517.35
v(t) = v(t0) + v(t1) – v(t0)/ t1-t0 x (t-15)
= 362.78 + 517.35 – 362.78/ 20-15 x (t-15)
v(t) = 362.78 + 30.913(t-15)
At t = 16,
v(16) = 362.78 + 30.913(16-15)
= 393.7 m/s
Jadi kecepatan pada v(16) adalah 393.7 m/s.
Interpolasi Polinom Lagrange adalah formulasi kembali dari polinom newton yang mencegah komputasi diferensi terbagi
Polinom Newton-Gregory merupakan kasus khusus dari polinomial Newton untuk titik-titik yang berjarak sama.
Bentuklah tabel selisih untuk fungsi f(x)=1/(x+1) didalam selarng[0.000;0.625] dan h=0.125. Hitung f(0.300) dengan polinom newton gregory maju derajat 3.