suppressWarnings(suppressMessages(suppressPackageStartupMessages))
## function (expr)
## withCallingHandlers(expr, packageStartupMessage = function(c) tryInvokeRestart("muffleMessage"))
## <bytecode: 0x000001d6b21c0120>
## <environment: namespace:base>
library(mosaicCalc)
Artikel ini akan melanjutkan dari salah satu bab yang ada di MOSAIC CALC, yaitu Operasi fungsi sub-bab Iterasi
Banyak perhitungan memerlukan prediksi awal dan langkah demi langkah untuk menyempurnakannya. Dalam kasus ini, tidak ada rumus operasional untuk fungsi yang mengambil angka sebagai input dan menghasilkan akar kuadrat dari angka itu sebagai output. Ketika kita menulis √x, kita hanya menunjukkan jenis output yang kita cari, bukan cara menghitungnya.
fungsi yang sering digunakan untuk menghitung $√x $adalah better() :
\[ better(guess) = \frac{1}{2}(guess + \frac{x}{guess}) \]
Tidak ada alasan yang jelas mengapa rumus ini dikaitkan dengan pencarian akar kuadrat. Mari kita tidak pedulikan hal itu dan fokuskan pada penggunaan.
langsung saja kita tentukan rumus fungsi untuk R
better <- makeFun((guess + x/guess)/2 ~ guess)
perhatikan \(x\) digunakan sebagai parameter fungsi, bukan sebagai input ke fungsi.
Misalkan kita ingin menerapkan fungsi akar kuadrat ke input 55, yaitu hitung \(√x = 55\) Nilai yang harus kita tetapkan adalah \(x\), sehingga 55.
Untuk menghitung better(guess) kita tidak cuman menggunakan \(x=55\) namun juga nilai untuk \(guess\). Apa yang menjadi nilai dan kuatitasnya \(better(guess)\) ketika di kalkulasikan.
Tanpa penjelasan, kita akan menggunakan \(guess =1\), tanpa mempedulikan nilai \(x\).
menghitung output…..
better(1, x=55)
## [1] 28
output \(guess\) 1 maupun 28 tidak
ada yang \(√x = 55\) kita tahu
bahwa
\(√x = 55\) dikisaran 7 dan 8. Interval
antara 1 dan 28 tidak ada.
Orang orang terdahulu yang menemukan ide dibelakang \(better()\) yakin bahwa \(better()\) menghasilkan prediksi yang lebih baik untuk jawaban yang dicari. tidak jelas kenapa 28 harus menjadi tebakan yang lebih baik daripada 1 untuk \(√x = 55\) tapi untuk mengormati mereka kita terima klaim mereka,
disinilah iterasi mulai digunakan. meskipun 28 adalah tebakan yang lebih baik daripada 1, tetap saja 28 bukanlah tebakan yang bagus. kita bisa menggunakan \(better()\) untuk menemukan tebakan yang lebih bagus daripada 28 :
better(28, x=55)
## [1] 14.98214
Iterasi artinya melakukannya berkali-kali. Dalam matematika, istilah “iterasi” memiliki Plot twist. Ketika kita melakukan tindakan matematika yang sama berulang kali, kita akan menggambar hasil sudut sebelumnya daripada hanya mengulangi perhitungan sebelumnya.
meneruskan iterasi tadi….
better(14.98214, x=55)
## [1] 9.326589
better(9.326589, x=55)
## [1] 7.611854
better(7.611854, x=55)
## [1] 7.418713
better(7.418713, x=55)
## [1] 7.416199
better(7.416199, x=55)
## [1] 7.416198
pada langkah terakhir dari output \(better()\) sangat mirip dengan inputnya, dengan ini bisa dikonfirmasi bahwa output yang terakhir cocok dengan \(√x = 55\) :
better(7.416199, x=55)
## [1] 7.416198
Untuk melakukan iterasi grafis, kita membuat grafik fungsi yang akan diiterasi dan menandai tebakan awal pada sumbu horizontal. Untuk setiap langkah iterasi, lacak secara vertikal dari titik saat ini ke fungsi dan secara horizontal ke garis identitas, yang diwakili oleh titik biru. Tebakan berikutnya akan dimulai dengan hasilnya.
slice_plot(better(guess, x=55)~guess,domain(guess=1:15) ) %>%
gf_hline(yintercept = 7.416199,color = "red")
Gunakan fungsi \(iterate()\)dari R/mosaic. Pertama, ekspresi tilde yang menunjukkan fungsi yang akan diulang, dan kedua, tebakan awal. Yang ketiga, jumlah iterasi langkah. 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
Output yang dihasilkan oleh adalah bingkai data. Tebakan awal ada di baris dengan \(Iterate() n=0\). Baris berturut-turut memberikan output, langkah demi langkah, dengan setiap langkah iterasi baru.
sumber : Mosaic Calc