From 2f9163eec25cdb27c1a04e94a4844a302f0f82b1 Mon Sep 17 00:00:00 2001 From: noah Date: Tue, 14 Feb 2023 17:33:31 -0600 Subject: [PATCH] Adding central difference approx Adding plot title --- Schrick-Noah_Homework-3.R | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Schrick-Noah_Homework-3.R b/Schrick-Noah_Homework-3.R index a8219cb..11f2965 100644 --- a/Schrick-Noah_Homework-3.R +++ b/Schrick-Noah_Homework-3.R @@ -5,7 +5,7 @@ ## 1. Approximate deriv. of sin(x) at x=pi from h=10^-1 -> 10^-20 forward.approx <- function(func, x, h){ - approx <- (func(x+h) - func(x))/h + approx <- (func(x+h)-func(x))/h } forward.approx.table <- matrix(nrow = 0, ncol = 3) @@ -17,9 +17,25 @@ for(h in 10^(seq(-1,-20,-1))){ } plot(abs(log(forward.approx.table[,"h"],10)), forward.approx.table[,"error"], - xlab="h [10^-x]", ylab="error (logscale)", type="o", log="y") + xlab="h [1e-x]", ylab="error (logscale)", type="o", log="y", + main = "Forward Approximation of sin(x) at x=pi") + # Repeat with central difference approx +central.diff.approx <- function(func, x, h){ + approx <- (func(x+h)-func(x-h))/(2*h) +} +central.diff.table <- matrix(nrow = 0, ncol = 3) +colnames(central.diff.table) <- c("h", "approximation", "error") +for(h in 10^(seq(-1,-20,-1))){ + approx <- central.diff.approx(sin, pi, h) + error <- abs(cos(pi)-approx) + central.diff.table <- rbind(central.diff.table, c(h, approx, error)) +} + +plot(abs(log(central.diff.table[,"h"],10)), central.diff.table[,"error"], + xlab="h [1e-x]", ylab="error (logscale)", type="o", log="y", + main = "Central Difference Approximation of sin(x) at x=pi") ## 2. # a) Runge-Kutta