Praktikum ini membahas Metode Secant dan perbandingannya dengan metode Bisection, Iterasi Titik Tetap, dan Newton untuk mencari akar persamaan non-linear satu variabel.
Tujuan praktikum ini adalah menerapkan Metode Secant menggunakan R,
menaksir orde konvergensi, membandingkan banyak iterasi dan evaluasi
fungsi dari empat metode, serta membandingkan hasil Metode Secant dengan
fungsi uniroot() pada R.
Kode fungsi berikut disalin sesuai dengan kode pada lembar praktikum.
f1 <- function(x) x^2 - 2
f2 <- function(x) x^3 - x - 1
f3 <- function(x) cos(x) - x
fd1 <- function(x) 2 * x
fd2 <- function(x) 3 * x^2 - 1
fd3 <- function(x) -sin(x) - 1
fb <- function(x) x^2 - 1 # untuk menguji kegagalan Secant
Orde konvergensi digunakan untuk mengukur kecepatan suatu metode numerik dalam mendekati akar sebenarnya. Taksiran orde konvergensi dihitung menggunakan rumus:
\[ p \approx \frac{\ln(e_{k+1}/e_k)}{\ln(e_k/e_{k-1})} \]
Keterangan: \(e_k\) merupakan galat pada iterasi ke-\(k\). Semakin besar nilai orde konvergensi, semakin cepat galat mengecil ketika iterasi berlangsung.
r2 <- 1.324717957244746 # akar x^3 - x - 1
s2 <- secant(f2, 1, 2, tol = 1e-12)
e <- abs(s2$riwayat$x - r2) # e[j+1] adalah galat e_j
k <- 3:7
p <- log(e[k + 2] / e[k + 1]) / log(e[k + 1] / e[k])
cat("k :", k, "\n")
## k : 3 4 5 6 7
cat("p_k (Secant):", round(p, 3), "\n")
## p_k (Secant): 2.206 1.527 1.673 1.596 1.627
cat("e/e^1.618 :", round(e[k + 2] / e[k + 1]^1.618, 3), "\n")
## e/e^1.618 : 0.89 1.043 0.901 0.994 0.934
# pembanding: Newton pada fungsi yang sama
nw <- newton(f2, fd2, 1.5, tol = 1e-14)
en <- abs(nw$riwayat$x - r2)
kn <- 1:3
pn <- log(en[kn + 2] / en[kn + 1]) / log(en[kn + 1] / en[kn])
cat("p_k (Newton):", round(pn, 3), "\n")
## p_k (Newton): 1.91 1.992 2
(a) Pada \(x^3-x-1\) dengan Secant dari \(x_0=1\) dan \(x_1=2\), nilai \(p\) mana yang paling dekat dengan 1,618 dan pada \(k\) berapa?
Berdasarkan keluaran acuan, nilai taksiran orde konvergensi adalah:
| k | \(p_k\) Secant |
|---|---|
| 3 | 2,206 |
| 4 | 1,527 |
| 5 | 1,673 |
| 6 | 1,596 |
| 7 | 1,627 |
Nilai yang paling dekat dengan 1,618 adalah 1,627 pada k = 7, dengan selisih sebesar 0,009. Hal ini menunjukkan bahwa orde konvergensi Metode Secant mendekati nilai teoretisnya, yaitu sekitar 1,618.
(b) Pada nilai \(p\) untuk Newton, mendekati berapa nilainya? Mengapa tiga nilai itu tidak persis 2?
Nilai orde konvergensi Newton mendekati 2, sesuai dengan sifat konvergensi kuadratik. Nilainya tidak persis 2 karena perhitungan masih dipengaruhi oleh tebakan awal dan galat pada iterasi yang belum sepenuhnya berada pada kondisi asimtotik. Selain itu, pembulatan angka juga dapat memengaruhi hasil perhitungan.
(c) Mengapa kolom \(e/e^{1.618}\) nilainya hampir konstan? Apa arti konstanta itu pada pola \(e_{k+1}\approx C\cdot e_k^p\)?
Kolom tersebut memiliki nilai yang hampir konstan karena galat Metode Secant mengikuti pola hubungan \(e_{k+1}\approx C\cdot e_k^{1.618}\). Konstanta \(C\) merupakan faktor pengali yang menggambarkan hubungan antara galat pada iterasi sekarang dengan galat pada iterasi berikutnya. Nilai yang hampir konstan menunjukkan bahwa pola penurunan galat sudah mendekati perilaku teoretis Metode Secant, yaitu memiliki orde konvergensi sekitar 1,618.
Pada aktivitas ini dilakukan perbandingan antara Bisection, Iterasi Titik Tetap, Newton, dan Secant untuk menyelesaikan persamaan:
\[ \cos x-x=0 \]
Perbandingan dilakukan menggunakan tiga nilai toleransi, yaitu \(10^{-2}\), \(10^{-6}\), dan \(10^{-10}\). Selain banyak iterasi, dilakukan pula perhitungan jumlah evaluasi fungsi untuk toleransi \(10^{-6}\).
for (tl in c(1e-2, 1e-6, 1e-10)) {
cat("tol", tl,
" bisection", bisection(f3, 0, 1, tol = tl)$iterasi,
" titik tetap", titik_tetap(cos, 0.5, tol = tl, maxit = 500)$iterasi,
" newton", newton(f3, fd3, 0.5, tol = tl)$iterasi,
" secant", secant(f3, 0, 1, tol = tl)$iterasi, "\n")
}
## tol 0.01 bisection 7 titik tetap 11 newton 3 secant 3
## tol 1e-06 bisection 20 titik tetap 34 newton 4 secant 5
## tol 1e-10 bisection 34 titik tetap 57 newton 5 secant 6
# banyak evaluasi fungsi untuk tol = 1e-6
it <- c(bisection = bisection(f3, 0, 1, 1e-6)$iterasi,
titik_tetap = titik_tetap(cos, 0.5, 1e-6, 500)$iterasi,
newton = newton(f3, fd3, 0.5, 1e-6)$iterasi,
secant = secant(f3, 0, 1, 1e-6)$iterasi)
evaluasi <- c(it["bisection"] + 2, it["titik_tetap"], 2 * it["newton"], it["secant"] + 2)
print(evaluasi)
## bisection titik_tetap newton secant
## 22 34 8 7
(a) Salin hasil ke tabel berikut.
Berdasarkan keluaran acuan pada praktikum, diperoleh hasil perbandingan banyak iterasi sebagai berikut.
| Toleransi | Bisection | Titik Tetap | Newton | Secant |
|---|---|---|---|---|
| \(10^{-2}\) | 7 | 11 | 3 | 3 |
| \(10^{-6}\) | 20 | 34 | 4 | 5 |
| \(10^{-10}\) | 34 | 57 | 5 | 6 |
(b) Metode mana yang iterasinya paling sedikit bertambah ketika toleransi diperkecil dari \(10^{-2}\) ke \(10^{-10}\)? Jelaskan dengan orde konvergensi.
Metode yang mengalami pertambahan iterasi paling sedikit adalah Newton, yaitu dari 3 iterasi menjadi 5 iterasi atau bertambah 2 iterasi. Hal ini karena Newton memiliki orde konvergensi kuadratik sebesar 2, sehingga galat dapat mengecil dengan sangat cepat pada setiap iterasi. Secant juga relatif cepat dengan orde sekitar 1,618, sedangkan Bisection dan Iterasi Titik Tetap memiliki orde linear sebesar 1.
(c) Urutkan keempat metode dari yang paling sedikit sampai paling banyak evaluasi fungsi untuk toleransi \(10^{-6}\). Apakah Secant lebih hemat daripada Newton?
Berdasarkan keluaran acuan, jumlah evaluasi fungsi adalah:
| Metode | Perhitungan | Jumlah evaluasi |
|---|---|---|
| Secant | 2 + 5 | 7 |
| Newton | 2 × 4 | 8 |
| Bisection | 2 + 20 | 22 |
| Titik Tetap | 34 | 34 |
Urutan dari evaluasi fungsi paling sedikit sampai paling banyak adalah Secant, Newton, Bisection, dan Titik Tetap.
Ya, Secant lebih hemat daripada Newton pada contoh ini karena hanya membutuhkan 7 evaluasi fungsi, sedangkan Newton membutuhkan 8 evaluasi. Secant tidak memerlukan turunan pertama sehingga jumlah evaluasi fungsi yang dibutuhkan lebih sedikit pada kasus tersebut.
(d) Tulis satu paragraf pendek: untuk keadaan apa Anda memilih masing-masing metode?
Metode Bisection dipilih ketika akar sudah diketahui berada dalam suatu selang yang memiliki nilai fungsi dengan tanda berbeda karena metode ini memiliki jaminan konvergensi. Iterasi Titik Tetap dipilih ketika persamaan dapat diubah menjadi bentuk \(x=g(x)\) dan memenuhi syarat \(|g'(x)|<1\) di sekitar akar. Metode Newton dipilih ketika turunan pertama fungsi mudah dihitung dan tersedia tebakan awal yang dekat dengan akar karena metode ini memiliki konvergensi yang cepat. Sementara itu, Metode Secant dipilih ketika turunan fungsi sulit diperoleh atau tidak tersedia, tetapi terdapat dua tebakan awal yang cukup baik untuk mendekati akar.
uniroot() Bawaan
RFungsi uniroot() merupakan fungsi bawaan R yang
digunakan untuk mencari akar persamaan pada suatu selang yang mengapit
akar. Hasilnya akan dibandingkan dengan Metode Secant yang telah dibuat
sebelumnya.
uniroot() dan Secantu <- uniroot(f3, c(0, 1), tol = 1e-10)
cat("akar uniroot :", u$root, "\n")
## akar uniroot : 0.7390851332
cat("iterasi :", u$iter, "\n")
## iterasi : 6
cat("f(akar) :", u$f.root, "\n")
## f(akar) : 7.993605777e-15
cat("akar Secant :", secant(f3, 0, 1, tol = 1e-10)$akar, "\n")
## akar Secant : 0.7390851332
# selang tanpa pergantian tanda (hapus tanda # untuk mencoba):
# uniroot(f1, c(2, 3))
(a) Bandingkan akar dan banyak iterasi uniroot()
dengan Secant buatan Anda untuk toleransi \(10^{-10}\).
Berdasarkan keluaran acuan, fungsi uniroot()
menghasilkan akar sebesar 0,7390851332 dengan 6
iterasi. Metode Secant juga menghasilkan hampiran akar sebesar
0,7390851332. Dengan demikian, kedua metode memperoleh
hasil akar yang hampir sama, meskipun jumlah iterasinya dapat
berbeda.
(b) Hapus tanda # pada uniroot(f1, c(2, 3)).
Pesan kesalahan apa yang muncul dan apa kaitannya dengan
Bisection?
Pesan kesalahan yang muncul adalah:
Error in uniroot(f1, c(2, 3)) :
f() values at end points not of opposite sign
Kesalahan tersebut terjadi karena \(f_1(2)=2\) dan \(f_1(3)=7\), sehingga kedua nilai fungsi
memiliki tanda positif. Fungsi uniroot() membutuhkan selang
yang mengapit akar, yaitu ketika nilai fungsi pada kedua ujung selang
memiliki tanda berbeda. Hal ini berkaitan dengan metode Bisection yang
juga membutuhkan syarat perubahan tanda pada kedua ujung selang agar
akar berada di dalam selang tersebut.
(c) Mengapa uniroot() memerlukan selang yang
mengapit akar, padahal Secant tidak? Apa yang dikorbankan dan apa yang
dijamin?
Fungsi uniroot() memerlukan selang yang mengapit akar
karena metode ini mempertahankan selang dengan perubahan tanda untuk
memastikan akar tetap berada di dalamnya. Sementara itu, Metode Secant
hanya membutuhkan dua tebakan awal dan tidak mengharuskan keduanya
mengapit akar. Metode Secant lebih fleksibel dalam menentukan tebakan
awal, tetapi tidak memiliki jaminan konvergensi sehingga dapat gagal
jika penyebutnya nol atau tebakan awal kurang tepat. Dengan demikian,
uniroot() mengorbankan fleksibilitas pemilihan tebakan awal
untuk memperoleh jaminan bahwa proses pencarian akar tetap berada dalam
selang yang mengapit akar.
Berdasarkan seluruh aktivitas praktikum, dapat disimpulkan bahwa Metode Secant merupakan metode pencarian akar yang menggunakan dua tebakan awal dan tidak memerlukan turunan pertama fungsi. Metode ini memiliki orde konvergensi sekitar 1,618 sehingga lebih cepat daripada Bisection dan Iterasi Titik Tetap yang memiliki orde linear, tetapi sedikit lebih lambat daripada Newton yang memiliki orde kuadratik.
Hasil perbandingan pada persamaan \(\cos
x-x=0\) menunjukkan bahwa Newton membutuhkan iterasi paling
sedikit, sedangkan Secant membutuhkan evaluasi fungsi paling sedikit. Di
sisi lain, Bisection dan uniroot() memiliki keunggulan
berupa penggunaan selang yang mengapit akar. Oleh karena itu, pemilihan
metode perlu disesuaikan dengan informasi yang tersedia, kemudahan
memperoleh turunan, ketepatan tebakan awal, dan kebutuhan jaminan
konvergensi.