ITERATION
Iterasi adalah proses berulang untuk mendekati solusi suatu masalah matematika, terutama dalam konteks mencari akar suatu persamaan atau mendekati nilai suatu fungsi yang kompleks. Metode iterasi ini sering digunakan ketika tidak ada solusi eksak yang mudah ditemukan, atau ketika solusi eksak terlalu rumit untuk dihitung.
Banyak perhitungan yang dimulai dengan tebakan yang diikuti dengan proses langkah demi langkah untuk menyempurnakan tebakan tersebut. Salah satu contohnya adalah proses menghitung akar kuadrat. Tidak ada rumus operasional untuk suatu fungsi yang mengambil suatu bilangan sebagai masukan dan menghasilkan akar kuadrat dari bilangan tersebut sebagai keluaran. Saat kita menulis √x kami tidak menjelaskan cara menghitung keluaran, hanya menjelaskan jenis keluaran yang kami cari.
Fungsi yang sering digunakan untuk menghitung √x lebih baik():
better(guess)= 1/2 (guess + x/guess).
Mungkin sama sekali tidak jelas mengapa rumus ini terkait dengan mencari akar kuadrat. Mari kita tunda masalah ini sampai bagian akhir dan konsentrasikan perhatian kita pada cara menggunakannya.
Untuk memulai, mari kita definisikan fungsi komputer:
better <- makeFun((guess + x/guess)/2 ~ guess)
Perhatikan x berperan sebagai parameter fungsi, bukan sebagai masukan ke fungsi.
Misalkan kita ingin menerapkan fungsi akar kuadrat pada input 55, yaitu menghitung √(x=55). Nilai yang harus kita berikan x oleh karena itu adalah 55.
Untuk menghitung lebih baik (menebak) kita tidak hanya perlu x=55 tapi nilai untuk tebakan. Berapakah nilai ini dan apa yang akan kita lakukan dengan kuantitasnya dengan lebih baik (tebak) setelah kita menghitungnya.
Tanpa penjelasan, kita akan menggunakan tebakan = 1, berapa pun nilainya x. Menghitung keluaran…
better(1, x=55)
## [1] 28
## [1] 28
Baik tebakan kita 1 maupun keluaran 28 tidak ada √(x=55). (Setelah lama menghafal kuadrat bilangan bulat, kita jadi tahu √(x=55) akan berada di antara 7 dan 8. Baik 1 maupun 28 tidak berada dalam interval tersebut.)
Orang-orang—lebih dari dua ribu tahun yang lalu—yang menemukan ide di balik better()fungsi tersebut yakin bahwa better()mereka dapat memberikan tebakan yang lebih baik untuk jawaban yang kita cari. Tidak jelas mengapa 28 harus menjadi tebakan yang lebih baik daripada 1√(x=55) tapi, untuk menghormati, mari kita terima klaim mereka.
Di sinilah iterasi berperan. Meskipun 28 merupakan tebakan yang lebih baik daripada 1, 28 tetap saja bukan tebakan yang baik. Tapi kita bisa menggunakan better()untuk menemukan sesuatu yang lebih baik dari 28:
better(28, x=55)
## [1] 14.98214
## [1] 14.98214
Mengulangi suatu tindakan berarti melakukan tindakan itu berulang kali. (“Iterate” berasal dari kata Latin iterum , yang berarti “lagi.”) Seekor burung mengulangi seruannya, menyanyikannya berulang-ulang. Dalam matematika, “iterasi” memiliki keunikan. Saat kita mengulangi tindakan matematis tersebut, kita akan mengambil hasil dari sudut sebelumnya, bukan hanya mengulangi perhitungan sebelumnya.
Melanjutkan iterasi kami yang lebih baik() …
better(14.98214, x=55)
## [1] 9.326589
## [1] 9.326589
better(9.326589, x=55)
## [1] 7.611854
## [1] 7.611854
better(7.611854, x=55)
## [1] 7.418713
## [1] 7.418713
better(7.418713, x=55)
## [1] 7.416199
## [1] 7.416199
better(7.416199, x=55)
## [1] 7.416198
## [1] 7.416198
Pada langkah terakhir, keluaran dari better()praktis sama dengan masukan, jadi tidak ada alasan untuk melanjutkan. Kami dapat mengonfirmasi bahwa keluaran terakhir adalah tebakan yang bagus √(x=55):
7.416198^2
## [1] 54.99999
## [1] 54.99999
# Fungsi untuk iterasi metode Newton-Raphson
newton_raphson_iteration <- function(x, n) {
guesses <- numeric(n)
guess <- x / 2 # Perkiraan awal
for (i in 1:n) {
guesses[i] <- guess
guess <- (guess + x/guess)/2 # Rumus iterasi Newton-Raphson
}
return(guesses)
}
# Gunakan fungsi untuk iterasi dengan x=55 dan n=8
iterations <- newton_raphson_iteration(x = 55, n = 8)
# Buat grafik menggunakan plot
plot(iterations, type = "o", col = "blue", pch = 16, xlab = "Iterasi", ylab = "Perkiraan Akar", main = "Iterasi Metode Newton-Raphson")
lines(iterations, col = "red")