Pendahuluan

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.

Persiapan

Fungsi uji

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

Aktivitas 1 — Menulis Fungsi Secant

Kode 1A — Fungsi Secant

Rumus Metode Secant yang digunakan adalah:

\[ x_{k+1}=x_k-f(x_k)\frac{x_k-x_{k-1}}{f(x_k)-f(x_{k-1})} \]

Metode ini menggunakan dua tebakan awal, yaitu \(x_0\) dan \(x_1\), serta tidak memerlukan turunan pertama fungsi. Iterasi dihentikan ketika selisih dua hampiran berturut-turut lebih kecil dari toleransi yang ditentukan.

secant <- function(f, x0, x1, tol = 1e-6, maxit = 100) {
  riwayat <- data.frame(k = c(0, 1), x = c(x0, x1), fx = c(f(x0), f(x1)), selisih = NA)
  for (k in 1:maxit) {
    f0 <- f(x0); f1 <- f(x1)
    if (f1 == f0)
      return(list(akar = NA, iterasi = k, konvergen = FALSE, riwayat = riwayat))
    x2 <- x1 - f1 * (x1 - x0) / (f1 - f0)                      # rumus Secant
    riwayat <- rbind(riwayat, data.frame(k = k + 1, x = x2, fx = f(x2), selisih = abs(x2 - x1)))
    if (abs(x2 - x1) < tol)                 # kriteria berhenti
      return(list(akar = x2, iterasi = k, konvergen = TRUE, riwayat = riwayat))
    x0 <- x1; x1 <- x2         # geser: dua titik terbaru
  }
  list(akar = x1, iterasi = maxit, konvergen = FALSE, riwayat = riwayat)
}

Kode 1B — Menjalankan fungsi Secant

options(digits = 10)
s1 <- secant(f1, 1, 2, tol = 1e-12)
print(s1$riwayat)
##   k           x               fx         selisih
## 1 0 1.000000000 -1.000000000e+00              NA
## 2 1 2.000000000  2.000000000e+00              NA
## 3 2 1.333333333 -2.222222222e-01 6.666666667e-01
## 4 3 1.400000000 -4.000000000e-02 6.666666667e-02
## 5 4 1.414634146  1.189767995e-03 1.463414634e-02
## 6 5 1.414211438 -6.007286839e-06 4.227078666e-04
## 7 6 1.414213562 -8.931455575e-10 2.123582450e-06
## 8 7 1.414213562  8.881784197e-16 3.157749617e-10
## 9 8 1.414213562  4.440892099e-16 2.220446049e-16
cat("iterasi:", s1$iterasi, " akar:", s1$akar, "\n")
## iterasi: 7  akar: 1.414213562
s3 <- secant(f3, 0, 1, tol = 1e-6)
cat("cos x - x: iterasi", s3$iterasi, " akar", s3$akar, "\n")
## cos x - x: iterasi 5  akar 0.7390851332
sg <- secant(fb, -2, 2)
cat("fb dari (-2, 2): konvergen =", sg$konvergen, " iterasi =", sg$iterasi, "\n")
## fb dari (-2, 2): konvergen = FALSE  iterasi = 1
sg2 <- secant(fb, -2, -0.5)
cat("fb dari (-2, -0.5): akar =", sg2$akar, " iterasi =", sg2$iterasi, "\n")
## fb dari (-2, -0.5): akar = -1  iterasi = 7

Jawaban Aktivitas 1

(a) Untuk \(f(x)=x^2-2\), dari \(x_0=1\), \(x_1=2\), dan toleransi \(10^{-12}\), berapa iterasi dan hampiran akarnya? Bandingkan \(x_2\), \(x_3\), dan \(x_4\) dengan hitungan tangan pada modul.

Berdasarkan hasil program, Metode Secant memerlukan 7 iterasi dan menghasilkan hampiran akar sebesar 1,414213562. Nilai tersebut mendekati akar sebenarnya, yaitu \(\sqrt{2}=1,414213562\).

Perbandingan hasil iterasi awal:

Titik Hasil R Hasil hitungan tangan pada modul
\(x_2\) 1,333333333 1,333333
\(x_3\) 1,400000000 1,400000
\(x_4\) 1,414634146 1,414634

Hasil R sesuai dengan perhitungan pada modul. Perbedaan angka pada digit terakhir terjadi karena pembulatan.

(b) Untuk \(\cos x-x=0\) dari \(x_0=0\), \(x_1=1\) dengan toleransi \(10^{-6}\) berapa iterasinya?

Berdasarkan hasil program, Metode Secant memerlukan 5 iterasi dengan hampiran akar sebesar 0,7390851332. Hasil tersebut mendekati akar persamaan \(\cos x-x=0\).

(c) Untuk \(f_b(x)=x^2-1\), dari \(x_0=-2\) dan \(x_1=2\), apa yang terjadi dan mengapa?

Metode Secant tidak dapat melanjutkan iterasi dan menghasilkan konvergen = FALSE pada iterasi pertama. Hal ini terjadi karena \(f(-2)=3\) dan \(f(2)=3\), sehingga \(f(x_1)-f(x_0)=0\). Akibatnya, rumus Secant memiliki penyebut nol. Secara geometris, garis sekan yang menghubungkan kedua titik tersebut merupakan garis mendatar sehingga tidak memotong sumbu-x.

(d) Untuk tebakan awal \(x_0=-2\) dan \(x_1=-0,5\), akar mana yang diperoleh dan berapa iterasinya?

Berdasarkan hasil program, diperoleh akar -1 dengan 7 iterasi. Akar tersebut merupakan salah satu akar dari persamaan \(x^2-1=0\), yaitu akar negatif.

Aktivitas 2 — Menaksir Orde Konvergensi

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.

Kode 2 — Taksiran p untuk Secant dan Newton

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

Jawaban Aktivitas 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.

Aktivitas 3 — Membandingkan Empat Metode

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}\).

Kode 3 — Iterasi dan evaluasi fungsi

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

Jawaban Aktivitas 3

(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.

Aktivitas 4 — Membandingkan dengan uniroot() Bawaan R

Fungsi 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.

Kode 4 — uniroot() dan Secant

u <- 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))

Jawaban Aktivitas 4

(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.

Kesimpulan

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.