# Example Euler method for y(t) = c * e^t # Given: y'(t) = f(t,y) = y(t), Initial value: y(0) = c # solve by y_n+1 = y_n + h * y_n c <- 1 # Initial value n = 10 h = 1 # Change for better approximation t <- seq(0, n, by = h) y_orig <- c * exp(t) y_approx <- numeric(length(t)) y_approx[1] <- c i <- 2 for (t_i in t[-1]) { y_approx[i] <- y_approx[i-1] + h * y_approx[i-1] i = i + 1 } library(ggplot2) source("defines.R") ggplot() + plot_style + geom_line(aes(x = t, y = y_orig, color="Function"), size = 1) + geom_line(aes(x = t, y = y_approx, color="Approx h=1"), size = 1) + scale_color_manual(name = "Values", values = c("Function"="blue", "Approx h=1"="red")) # try different values for h c <- 1 # Initial value n = 5 hs <- c(1, 0.5, 0.1, 0.01, 0.001) t <- seq(0, n, by = last(hs)) y <- c * exp(t) df <- data.frame("Name" = "y", "Time" = t, "Value" = y) for (h in hs) { # Euler method for every h y <- numeric() y[1] <- c t <- numeric() t[1] <- 0 i <- 2 while((t[i-1] + h) <= n) { t[i] <- t[i-1] + h y[i] <- y[i-1] + h * y[i-1] i = i + 1 } df <- rbind(df, data.frame("Name" = paste0("h=",h), "Time" = t, "Value" = y)) } ggplot(df, aes(x = Time, y = Value, color = Name)) + geom_line() + plot_style