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, were retired 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:.
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D

Iterasi numerik adalah teknik penting dalam komputasi matematika yang digunakan untuk mendekati solusi suatu masalah secara berulang hingga mencapai tingkat akurasi yang diinginkan. Fungsi better() merupakan komponen kunci dalam proses iterasi numerik, membantu meningkatkan keakuratan tebakan dan mendekati solusi yang sebenarnya. Artikel ini akan membahas konsep dasar iterasi numerik dan peran fungsi better() dalam meningkatkan akurasi proses tersebut.

Konsep Dasar Iterasi Numerik

Iterasi numerik adalah pendekatan berulang untuk mendekati solusi suatu masalah matematika. Proses ini dimulai dengan tebakan awal, dan setiap iterasi menghasilkan tebakan baru yang semakin mendekati solusi yang diinginkan. Fungsi iterasi numerik dapat digunakan untuk berbagai masalah, seperti mencari akar suatu persamaan atau mendekati nilai integral.

Contoh penerapan iterasi numerik adalah menggunakan fungsi Iterate() dalam bahasa pemrograman R. Fungsi ini menerima ekspresi matematika yang mendefinisikan suatu fungsi, tebakan awal, dan jumlah langkah iterasi. Proses ini terus diulang hingga mencapai tingkat akurasi yang diinginkan.

Penggunaan Fungsi better() dalam Iterasi Numerik

Fungsi better() memainkan peran kunci dalam meningkatkan akurasi tebakan pada setiap iterasi. Fungsi ini dirancang khusus untuk memperbaiki tebakan yang diberikan, dengan mempertimbangkan perbandingan antara tebakan asli dan informasi tambahan.

Rumus fungsi better() secara umum adalah sebagai berikut: \[ \text{better}(\text{guess}, x) = \frac{1}{2} \left( \text{guess} + \frac{x}{\text{guess}} \right) \]

Langkah-langkah Iterasi dengan Fungsi better():

  1. Tebakan Awal: Mulai dengan suatu tebakan awal yang dekat dengan solusi yang sebenarnya.
  2. Iterasi: Gunakan fungsi Iterate() dengan fungsi gelombang yang mengandung fungsi better() untuk menghasilkan tebakan baru.
  3. Perbaikan Tebakan: Fungsi better() digunakan pada setiap iterasi untuk memperbaiki tebakan.
  4. Konvergensi: Proses diulang hingga mencapai tingkat akurasi yang diinginkan atau hingga tebakan konvergen ke solusi yang diinginkan.

Contoh dan Penerapan

1. Misalkan akan dicari akar kuadrat dari \(x = 55\)

# Fungsi better() untuk mencari akar kuadrat
better <- function(guess, x) {
  0.5 * (guess + x / guess)
}

# Fungsi Iterate() dengan better() untuk pencarian akar kuadrat
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

Hasil dari iterasi numerik ini akan memberikan tebakan yang semakin mendekati akar kuadrat dari 55. Proses ini diulang sebanyak delapan kali, dengan tebakan awal 1 dan menggunakan fungsi better() untuk memperbaiki tebakan pada setiap iterasi.

Langkah-langkah dari iterasi numerik dengan fungsi better() untuk pencarian akar kuadrat dari \(x = 55\) adalah sebagai berikut:

  1. Inisialisasi:
    • Inisialisasi tebakan awal, \(guess_0\), dengan nilai \(1\).
    • Inisialisasi nilai \(x\) yang akan dicari akarnya dengan \(x = 55\).
    • Tentukan jumlah iterasi, \(n = 8\).
  2. Iterasi Pertama (n = 0):
    • Gunakan tebakan awal \(guess_0 = 1\) pada fungsi better().
    • Hitung \(better(guess_0, x) = 0.5 \times (1 + \frac{55}{1}) = 28\).
    • Dalam bingkai data iterasi, catat nilai \(guess\) pada iterasi pertama.
  3. Iterasi Kedua (n = 1):
    • Gunakan tebakan hasil iterasi sebelumnya \(guess_1 = 28\) pada fungsi better().
    • Hitung \(better(guess_1, x) = 0.5 \times (28 + \frac{55}{28}) = 14.982143\).
    • Catat nilai \(guess\) pada iterasi kedua.
  4. Iterasi Ketiga (n = 2):
    • Gunakan tebakan hasil iterasi sebelumnya \(guess_2 = 14.982143\) pada fungsi better().
    • Hitung \(better(guess_2, x) = 0.5 \times (14.982143 + \frac{55}{14.982143}) = 9.326590\).
    • Catat nilai \(guess\) pada iterasi ketiga.
  5. Iterasi Keempat (n = 3):
    • Lakukan langkah yang sama seperti sebelumnya untuk iterasi keempat.
    • Hitung \(better(guess_3, x)\) dan catat nilai \(guess\).
  6. Iterasi Kelima hingga Ketujuh (n = 4, 5, 6):
    • Lakukan iterasi seperti sebelumnya hingga iterasi kelima, keenam, dan ketujuh. catat nilai \(guess\) pada masing-masing iterasi.
  7. Iterasi Terakhir (n = 7):
    • Lanjutkan iterasi hingga iterasi terakhir.
    • Hitung \(better(guess_{\text{terakhir}}, x)\) dan catat nilai \(guess\) pada iterasi terakhir.

Hasil akhirnya adalah bingkai data iterasi yang mencatat nilai \(guess\) pada setiap langkah iterasi. Proses ini menggambarkan bagaimana tebakan awal yang dimasukkan ke dalam fungsi better() secara berulang dapat mendekati akar kuadrat dari \(x = 55\). Semakin banyak iterasi, semakin akurat tebakan tersebut, dan dalam contoh ini, proses iterasi telah konvergen ke nilai yang cukup dekat dengan akar kuadrat sebenarnya.

Pada awalnya, tebakan 1 jauh dari akar kuadrat sebenarnya. Namun, setiap iterasi dengan bantuan fungsi better() membawa tebakan lebih dekat ke nilai yang sebenarnya. Dengan demikian, dapat dilihat bagaimana proses iterasi numerik dengan fungsi better() dapat digunakan untuk mendekati solusi matematika dengan lebih akurat.

2. Akan dicari akar dari persamaan kuadrat \(f(x) = x^2 - 9\)

# Fungsi quadratic() untuk mencari akar kuadrat dari x^2 - 9
quadratic <- function(guess, x) {
  guess - (guess^2 - x) / (2 * guess)
}

# Pencarian akar kuadrat dengan Iterate()
result_quadratic <- Iterate(quadratic(guess, x = 9) ~ guess, x0 = 1, n = 5)
print(result_quadratic)
##   n    guess
## 1 0 1.000000
## 2 1 5.000000
## 3 2 3.400000
## 4 3 3.023529
## 5 4 3.000092
## 6 5 3.000000

Langkah-langkah Iterasi:

  1. Inisialisasi:
    • Inisialisasi tebakan awal, \(guess_0\), dengan nilai \(1\).
    • Inisialisasi nilai \(x\) yang akan dicari akarnya dengan \(x = 9\).
    • Tentukan jumlah iterasi, \(n = 5\).
  2. Iterasi Pertama (n = 0):
    • Gunakan tebakan awal \(guess_0 = 1\) pada fungsi quadratic().
    • Hitung \(quadratic(guess_0, x) = 1 - \frac{(1^2 - 9)}{2 \times 1} = 5\).
    • Dalam bingkai data iterasi, catat nilai \(guess\) pada iterasi pertama.
  3. Iterasi Kedua (n = 1):
    • Gunakan tebakan hasil iterasi sebelumnya \(guess_1 = 5\) pada fungsi quadratic().
    • Hitung \(quadratic(guess_1, x) = 5 - \frac{(5^2 - 9)}{2 \times 5} = 3.4\).
    • Catat nilai \(guess\) pada iterasi kedua.
  4. Iterasi Ketiga (n = 2):
    • Gunakan tebakan hasil iterasi sebelumnya \(guess_2 = 3.4\) pada fungsi quadratic().
    • Hitung \(quadratic(guess_2, x) = 3.4 - \frac{(3.4^2 - 9)}{2 \times 3.4} = 3.023529\).
    • Catat nilai \(guess\) pada iterasi ketiga.
  5. Iterasi Keempat (n = 3):
    • Lakukan langkah yang sama seperti sebelumnya untuk iterasi keempat.
    • Hitung \(quadratic(guess_3, x)\) dan catat nilai \(guess\).
  6. Iterasi Kelima (n = 4):
    • Lakukan iterasi seperti sebelumnya hingga iterasi keempat, catat nilai \(guess\) pada iterasi kelima.
  7. Iterasi Terakhir (n = 5):
    • Lanjutkan iterasi hingga iterasi terakhir.
    • Hitung \(quadratic(guess_{\text{terakhir}}, x)\) dan catat nilai \(guess\) pada iterasi terakhir.

Hasil iterasi numerik ini memberikan perkiraan nilai akar kuadrat dari \(x^2 - 9\) dengan setiap iterasi, dapat dilihat bahwa tebakan semakin mendekati nilai akar kuadrat yang sebenarnya. Proses ini dapat dilanjutkan dengan melakukan lebih banyak iterasi untuk mendapatkan perkiraan yang lebih akurat.

Referensi:
Kaplan, Daniel. 2022. MOSAIC Calculus. GitHub Pages. https://dtkaplan.github.io/MC2/