Nama : Muhamad Fran Dahlan Gibran
NIM : 230605110127
Dosen Pengampu : Prof. Dr. Suhartono, M.Kom
Universitas : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Fakultas : Sains dan Teknologi
Program Studi : Teknik Informatika

Numerical differentiation adalah teknik yang digunakan untuk menghitung turunan suatu fungsi di titik tertentu menggunakan metode numerik, bukan dengan menghitung turunan secara analitik. Metode ini berguna ketika fungsi yang akan di-differentiasi sulit atau tidak mungkin dijabarkan secara analitik.

Salah satu metode numerik yang umum digunakan untuk menghitung turunan adalah metode finite difference. Metode ini memanfaatkan pendekatan perubahan kecil dalam nilai fungsi untuk menghitung turunan. Terdapat beberapa jenis finite difference

# Fungsi untuk menghitung turunan numerik menggunakan metode finite difference
numerical_diff <- function(f, x, h = 1e-5) {
  (f(x + h) - f(x)) / h
}

# Contoh fungsi untuk di-differentiasi
f <- function(x) {
  return(x^2)
}

# Posisi di mana turunan akan dihitung
x_value <- 2

# Hitung turunan numerik
result <- numerical_diff(f, x_value)

# Tampilkan hasil
cat("Nilai turunan numerik di x =", x_value, "adalah:", result, "\n")
## Nilai turunan numerik di x = 2 adalah: 4.00001
# Persiapkan data untuk plot
x_vals <- seq(0, 4, by = 0.1)
y_vals <- f(x_vals)

# Plot fungsi
plot(x_vals, y_vals, type = "l", col = "blue", lwd = 2, xlab = "x", ylab = "f(x)", main = "Numerical Differentiation")

# Tambahkan titik dan garis tangent di x_value
points(x_value, f(x_value), col = "red", pch = 16)
abline(h = f(x_value), col = "red", lty = 2)
abline(a = f(x_value) - result * x_value, b = result, col = "green", lty = 2)

# Tambahkan legenda
legend("topright", legend = c("f(x)", "Tangent at x", "Tangent Line"), col = c("blue", "red", "green"), lty = c(1, 2, 2), lwd = c(2, 1, 1))