Numerical integration adalah metode untuk menghitung nilai definite integral secara numerik dengan menggunakan teknik yang numerik. Beberapa metode yang umum digunakan dalam integrasi numerik meliputi: -Trapezoidal Rule: Metode ini menggunakan interval yang sama dan menjumlah fungsi di titik-titik tersebut. Kemudian, kita menghitung perbedaan antara nilai fungsi di titik-titik tersebut dan mengalikan hasil tersebut dengan nilai absolut titik-titik berikutnya. -Midpoint Rule: Metode ini menggunakan interval yang sama dan menghitung nilai fungsi di titik-titik bersemesinya (titik tengah). Kemudian, kita menghitung perbedaan antara nilai fungsi di titik-titik bersemesinya dan mengalikan hasil tersebut dengan nilai absolut titik-titik berikutnya. -Simpson’s Rule: Metode ini menggunakan interval yang tidak sama dan menjumlah fungsi di titik-titik tersebut. Kemudian, kita menghitung perbedaan antara nilai fungsi di titik-titik bersemesinya dan mengalikan hasil tersebut dengan nilai absolut titik-titik berikutnya. Metode ini umumnya lebih akurat daripada Trapezoidal Rule dan Midpoint Rule. -Romberg Integration: Metode ini merupakan generalisasi dari Trapezoidal Rule dan dapat memberikan hasil yang akurat dengan jumlah evaluasi fungsi yang lebih kecil. -Gaussian Quadrature: Metode ini menggunakan titik-titik yang dihasilkan oleh teori bilangan Gaussian untuk menghasilkan pengalaman pengintegrasan yang paling akurat. INTEGRATION MENGGUNAKAN METODE RIEMANN SUM

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
# Langkah pertama 
function_to_integrate <- function(x) x^3+5

# Langkah kedua 
lower_limit <- 0
upper_limit <- 5

# Langkah ketiga 
n <- 10

# Langkah keempat 
x_values <- seq(lower_limit, upper_limit - (upper_limit - lower_limit) / n, length.out = n)

# Langkah kelima 
width_subinterval <- (upper_limit - lower_limit) / n

# Langkah keenam
integral_result <- sum(width_subinterval * function_to_integrate(x_values))

# Langkah ketujuh
df <- data.frame(x = x_values, y = function_to_integrate(x_values))

# Langkah kedelapan 
plot <- ggplot(df, aes(x, y)) +
  geom_rect(data = subset(df, x >= lower_limit & x <= upper_limit), aes(xmin = x, xmax = x + width_subinterval, ymin = 0, ymax = y), fill = "pink") +
  geom_line() +
  labs(title = "Grafik Numerical Integration",
       x = "x",
       y = "f(x)",
       subtitle = paste("Integral dari", lower_limit, "ke", upper_limit, "adalah:", round(integral_result, 2))) +
  theme_minimal()

print(plot)