library(mosaicCalc)
## Loading required package: mosaic
## Registered S3 method overwritten by 'mosaic':
## method from
## fortify.SpatialPolygonsDataFrame ggplot2
##
## The 'mosaic' package masks several functions from core packages in order to add
## additional features. The original behavior of these functions should not be affected by this.
##
## Attaching package: 'mosaic'
## The following objects are masked from 'package:dplyr':
##
## count, do, tally
## The following object is masked from 'package:Matrix':
##
## mean
## The following object is masked from 'package:ggplot2':
##
## stat
## The following objects are masked from 'package:stats':
##
## binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
## quantile, sd, t.test, var
## The following objects are masked from 'package:base':
##
## max, mean, min, prod, range, sample, sum
## Loading required package: mosaicCore
##
## Attaching package: 'mosaicCore'
## The following objects are masked from 'package:dplyr':
##
## count, tally
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, will retire in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
## The sp package is now running under evolution status 2
## (status 2 uses the sf package in place of rgdal)
##
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
##
## D
Banyak perhitungan melibatkan dimulai dengan tebakan diikuti dengan proses langkah demi langkah untuk menyempurnakan tebakan. Contoh kasusnya 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{\strut x}\) Kami tidak mengatakan cara menghitung output, hanya menggambarkan jenis output yang kami cari.
output yang kami cari.
Fungsi yang sering digunakan untuk menghitung \(\sqrt{\strut x}\) lebih baik():
\[\text{better(guess)} = \frac{1}{2}\left( \text{guess} + \frac{x}{\text{guess}}\right)\ .\] Mungkin sama sekali tidak jelas mengapa rumus ini terkait dengan menemukan akar kuadrat. Mari kita hentikan masalah itu sampai akhir bagian dan memusatkan perhatian kita pada cara menggunakannya.
Untuk memulai, mari kita tentukan fungsi untuk komputer:
better <- makeFun((guess + x/guess)/2 ~ guess)
Perhatikan bahwa \(x\) dilemparkan dalam peran parameter fungsi daripada input ke fungsi.
Misalkan kita ingin menerapkan fungsi akar kuadrat ke input 55, yaitu, hitung \(\sqrt{\strut x=55}\). Nilai yang harus kita tetapkan \(x\) Oleh karena itu 55.
Untuk menghitung lebih baik (tebak) kita tidak perlu hanya \(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 guess = 1, terlepas dari nilai \(x\). Menghitung output …
better(1, x=55)
## [1] 28
## [1] 28
Baik tebakan kami 1 maupun output 28 tidak ada \(\sqrt{\strut x=55}\). (Setelah lama menghafal kuadrat bilangan bulat, kita tahu \(\sqrt{\strut x=55}\) akan berada di suatu tempat antara 7 dan 8. Baik 1 maupun 28 tidak berada dalam interval itu.
Orang-orang — lebih dari dua ribu tahun yang lalu — yang menemukan ide-ide di balik fungsi tersebut yakin bahwa membangun tebakan yang lebih baik untuk jawaban yang kita cari. Tidak jelas mengapa 28 harus menjadi tebakan yang lebih baik daripada 1 untuk better() better() \(\sqrt{\strut x=55}\) api, untuk menghormati, mari kita terima klaim mereka.
Di sinilah iterasi masuk. Bahkan jika 28 adalah tebakan yang lebih baik daripada 1, 28 masih bukan tebakan yang baik. Tetapi kita dapat menggunakan untuk menemukan sesuatu yang lebih baik dari 28:better()
better(28, x=55)
## [1] 14.98214
## [1] 14.98214
Mengulangi tindakan berarti melakukan tindakan itu berulang kali. (“Iterasi” berasal dari kata Latin iterum, yang berarti “lagi.”) Seekor burung mengulangi panggilannya, menyanyikannya berulang-ulang. Dalam matematika, “iterate” memiliki twist. Ketika kita mengulangi tindakan matematika, kita akan menggambar pada hasil sudut sebelumnya daripada hanya mengulangi perhitungan sebelumnya.
Melanjutkan iterasi kami 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, output dari praktis identik dengan input, jadi tidak ada alasan untuk melanjutkan. Kami dapat mengonfirmasi bahwa output terakhir adalah tebakan yang bagus untuk better() \(\sqrt{\strut x=55}\):
7.416198^2
## [1] 54.99999
## [1] 54.99999
Gunakan fungsi R/mosaic. Argumen pertama adalah ekspresi tilde yang mendefinisikan fungsi yang akan diulang. Yang kedua adalah tebakan awal. Yang ketiga adalah jumlah langkah iterasi.
Iterate(better(guess, x=55) ~ guess, x0=1, n=8)
## n guess
## 1 0 1.000000
## 2 1 28.000000
## 3 2 14.982143
## 4 3 9.326590
## 5 4 7.611854
## 6 5 7.418713
## 7 6 7.416199
## 8 7 7.416198
## 9 8 7.416198
## n guess
## 1 0 1.000000
## 2 1 28.000000
## 3 2 14.982143
## 4 3 9.326590
## 5 4 7.611854
## 6 5 7.418713
## 7 6 7.416199
## 8 7 7.416198
## 9 8 7.416198