From 38c65fa776f03acec03de78c75eeac1406fd2fdc Mon Sep 17 00:00:00 2001 From: noah Date: Tue, 31 Jan 2023 19:37:58 -0600 Subject: [PATCH] Bisection Method --- Schrick-Noah_Project-2.R | 74 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/Schrick-Noah_Project-2.R b/Schrick-Noah_Project-2.R index 604d035..e792b04 100644 --- a/Schrick-Noah_Project-2.R +++ b/Schrick-Noah_Project-2.R @@ -1,4 +1,76 @@ # Project 2 for the University of Tulsa's CS-7863 Sci-Stat Course # Roots and Zeros of Functions # Professor: Dr. McKinney, Spring 2023 -# Noah L. Schrick - 1492657 \ No newline at end of file +# Noah L. Schrick - 1492657 + +## Part 1: Bisection +findZeroBisect <- function(func, xl, xr, tol, maxsteps=1e6){ + steps <- 0 + if (func(xl) * func(xr) >= 0){ + stop("Bad interval: try again with different endpoints") + } + + repeat{ + xm <- (xl + xr)/2 + if(abs(func(xm)) < tol || steps >= maxsteps){ + break + } + + ifelse(func(xl) * func(xm) > 0, xl<-xm, xr<-xm) + steps <- steps + 1 + } + return(c(xm, func(xm), steps)) +} + +# Solve 1a +fun.a <- function(x) {x^2-2} +fun.a.string <- "x^2-2=0" +sqrt2.estimate <- findZeroBisect(fun.a.string,1,2,1e-6) +sqrt2.estimate[1] +# Plot 1a +if (!require("ggplot2")) install.packages("ggplot2") +library(ggplot2) +ggplot(data.frame(x=seq(1,2,.1)), aes(x)) + + stat_function(fun=fun.a, aes(col=fun.string)) + + geom_hline(aes(yintercept=0, col = "y=0"), show.legend=TRUE)+ + geom_vline(aes(xintercept=sqrt2.estimate[1], + col = "bisection estimate"), show.legend=TRUE)+ + ggtitle("Zero Function") + + xlab("x") + ylab("Zero Function") + + theme(text = element_text(size=20), plot.title = element_text(hjust = 0.5)) + +# Solve 1b +fun.b <- function(x) {-3+x+2*exp(-x)} +fun.b.string <- "-3+x+2*exp(-x)=0" +fun.b.estimate.left <- findZeroBisect(fun.b,-2.5,0,1e-6) +fun.b.estimate.left[1] +fun.b.estimate.right <- findZeroBisect(fun.b,1,4,1e-6) +fun.b.estimate.right[1] +# Plot 1b +ggplot(data.frame(x=seq(-2.5,5,.1)), aes(x)) + + stat_function(fun=fun.b, aes(col=fun.b.string)) + + geom_hline(aes(yintercept=0, col = "y=0"), show.legend=TRUE)+ + geom_vline(aes(xintercept=fun.b.estimate.left[1], + col = "first bisection estimate"), show.legend=TRUE)+ + geom_vline(aes(xintercept=fun.b.estimate.right[1], + col = "second bisection estimate"), show.legend=TRUE)+ + ggtitle("Zero Function") + + xlab("x") + ylab("Zero Function") + + theme(text = element_text(size=20), plot.title = element_text(hjust = 0.5)) + +# Solve 1c +fun.c <- function(x) {x^3-sin(x)^2} +fun.c.string <- "x^3-sin(x)^2=0" +fun.c.estimate <- findZeroBisect(fun.c,0.5,1,1e-6) +fun.c.estimate[1] +# Plot 1c +ggplot(data.frame(x=seq(0.5,1,.1)), aes(x)) + + stat_function(fun=fun.c, aes(col=fun.c.string)) + + geom_hline(aes(yintercept=0, col = "y=0"), show.legend=TRUE)+ + geom_vline(aes(xintercept=fun.c.estimate[1], + col = "bisection estimate"), show.legend=TRUE)+ + ggtitle("Zero Function") + + xlab("x") + ylab("Zero Function") + + theme(text = element_text(size=20), plot.title = element_text(hjust = 0.5)) + +