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
Iterasi
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 kami tidak menjelaskan cara menghitung keluaran, hanya menjelaskan jenis keluaran yang kami cari.
Fungsi yang sering digunakan untuk menghitung lebih baik():
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 itu berperan sebagai parameter fungsi, bukan sebagai masukan ke fungsi.
Misalkan kita ingin menerapkan fungsi akar kuadrat pada input 55, yaitu menghitung . Nilai yang harus kita berikan oleh karena itu adalah 55.
better(1, x=55)
## [1] 28
## [1] 28
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 :
7.416198^2
## [1] 54.99999
## [1] 54.99999
Iterasi numerik
Gunakan fungsi R/mosaik Iterate(). Argumen pertama adalah ekspresi gelombang yang mendefinisikan fungsi yang akan diiterasi. Yang kedua adalah tebakan awal. Yang ketiga adalah jumlah langkah iterasi. Contohnya:
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
Keluaran yang dihasilkan Iterate()berupa bingkai data. Tebakan awal ada pada baris dengan . Baris yang berurutan memberikan keluaran, langkah demi langkah, dengan setiap langkah iterasi baru.
Untuk menghitung akar kuadrat, kami menggunakan fungsi tersebut
Anggaplah Anda kebetulan mendapat tebakan yang benar . Tidak ada cara untuk memperbaiki tebakan yang benar, jadi hal terbaik yang dapat dilakukan Better() adalah mengembalikan tebakan tersebut tanpa perubahan. Memang benar:
Tentu saja tebakan awal mungkin salah. Ada dua cara untuk melakukan kesalahan:
Tebakannya terlalu kecil . Tebakannya terlalu besar . Rumus untuk lebih baik() adalah rata-rata tebakan dan jumlah lainnya . Jika terlalu kecil, kalau begitu pasti terlalu besar. Jika terlalu besar kalau begitu pasti terlalu kecil.
Seperti dugaan, kedua besaran tersebut Dan setara dalam arti bahwa . Rata-rata dari Dan akan lebih dekat dengan hasil sebenarnya daripada hasil terburuk atau ; rata-rata akan menjadi tebakan yang lebih baik.