Banyak perhitungan melibatkan memulai dengan tebakan yang diikuti oleh proses langkah demi langkah untuk menyempurnakan tebakan. Contoh kasus adalah proses untuk menghitung akar kuadrat. Tidak ada rumus operasional untuk fungsi yang mengambil angka sebagai input dan menghasilkan akar kuadrat dari angka itu sebagai output. Ketika kita menulis \({\sqrt x}\) kami tidak mengatakan bagaimana menghitung output, hanya menggambarkan jenis output yang kami cari.

Fungsi yang sering digunakan untuk menghitung \({\sqrt x}\) lebih baik(): \({\sf better} {guess} = \frac{1}{2}(guess = + \frac{x}{guess})\)

Mungkin sama sekali tidak jelas mengapa rumus ini terkait dengan menemukan akar kuadrat. Mari kita hentikan masalah itu sampai akhir bagian dan konsentrasikan perhatian kita pada cara menggunakannya.

Untuk memulai, mari kita definisikan fungsi untuk komputer:

better <- makeFun((guess + x/guess)/2 ~ guess)

Perhatikan bahwa \(x\) dilemparkan dalam peran parameter fungsi daripada masukan ke fungsi.

Misalkan kita ingin menerapkan fungsi akar kuadrat ke input 55, yaitu, hitung \({\sqrt x=55}\) . Nilai yang harus kita tetapka\(x\)nOleh karena itu 55.

Untuk menghitung lebih baik (tebak) kita tidak hanya perlu \(x=55\) tapi nilai untuk tebakan. Apa yang seharusnya menjadi nilai ini dan apa yang akan kita lakukan dengan kuantitas yang lebih baik (tebak) ketika kita telah menghitungnya.

Tanpa penjelasan, kita akan menggunakan tebak = 1, terlepas dari nilai \(x\). Menghitung hasil …

better(1, x=55)
## [1] 28
## [1] 28

Baik tebakan kita 1 maupun output 28 tidak \({\sqrt x = 55}\) . (Setelah lama menghafal kuadrat bilangan bulat, kita tahu \({\sqrt x = 55}\) akan berada di suatu tempat antara 7 dan 8. Baik 1 maupun 28 tidak ada dalam interval itu.)

Orang-orang—lebih dari dua ribu tahun yang lalu—yang menemukan ide di balik fungsi Better() yakin bahwa Better() menghasilkan tebakan yang lebih baik untuk jawaban yang kita cari. Tidak jelas mengapa 28 harus menjadi tebakan yang lebih baik daripada 1 \({\sqrt x = 55}\) tapi, untuk rasa hormat, 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 lebih baik() 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-ulang. (“Iterate” berasal dari kata Latin iterum, yang berarti “lagi.”) Seekor burung mengulangi panggilannya, menyanyikannya berulang kali. Dalam matematika, “irate” memiliki twist. Ketika kita mengulangi tindakan matematika, kita akan menggambar pada hasil dari sudut sebelumnya daripada hanya mengulangi perhitungan sebelumnya.

Melanjutkan iterasi kami dari better() …

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 lebih baik() praktis identik dengan masukan, jadi tidak ada alasan untuk melanjutkan. Kami dapat mengonfirmasi bahwa keluaran terakhir adalah tebakan yang bagus \({\sqrt x = 55}\)

7.416198^2 ## [1] 54.99999