--- title: "Methods 2 -- Portfolio Assignment 2" author: "Julie Bang Mikkelsen, AU718507" date: "`r format(Sys.Date(), '%B %d, %Y')`" output: pdf_document: default html_document: df_print: paged --- - *Type:* Individual assignment - *Due:* 10 April 2022, 23:59 ```{r include = FALSE} #Loading packages library(pacman) pacman::p_load(tidyverse, pastecs, stringr, dplyr, knitr, kableExtra) ``` ## 1. Square root function My function finds the squareroot of a given positive number, $\mu$, by finding the root of $f(x) = x^2 - \mu = 0$. I improve my guess with the Newton-Raphson method of defining $x_{j+1} = x_j - \frac{f(x_j)}{f'(x_j)}$ until the guess squared, $x^2$, is so close to the true $\mu$, that their difference, the "error", is below a specified threshold. I call this "limit". According to Gill, p. 249, I can insert $f(x)$ and $f'(x)$ into the function and get: \begin{align*} x_{j+1} = x_j - \frac{x_j^2 - \mu}{2x_j} = \frac{1}{2}(x_j+\mu x_j^{-1}) \end{align*} Now I can insert this function into a while loop, that keeps running as long as the difference between $x^2$ and $\mu$ is above the limit. For each iteration, I also print $x$ and $x^2$ to a dataframe for niceness. I set my limit to .05, because it is equivalent to that of statistical significance. I choose $x_0=\mu/2$ as my initial guess because this is halfway between $0$ and $\mu$, which are both obviously wrong. ```{r} my_fun <- function(mu){ x <- mu/2 # Defining starting point, x_0 limit <- .05 # Defining an acceptable precision threshold error <- abs(x^2-mu) #Defining the error of the current guess, x_j iter <- 1 # Defining iteration number for niceness # Creating a dataframe for x and x^2 results for each iteration results_df <- data.frame(iteration = iter, x_value = x, x_sq = x^2) while (error > limit){ x <- (0.5*(x+mu/x)) error <- abs(x^2-mu) iter <- iter + 1 # Appending new row to dataframe results_df <- rbind(results_df, data.frame(iteration = iter, x_value = x, x_sq = x^2)) } # Printing results dataframe as html table return( results_df %>% kbl(caption = "Results table") %>% kable_classic(full_width = F, html_font = "Cambria") %>% kable_styling(latex_options = "HOLD_position") ) } ``` ### Examples ```{r} my_fun(16) # See Table 1 my_fun(90) # See Table 2 my_fun(356) # See Table 3 ``` When applied to negative numbers, my function will continue running and never stop. This happens because when $\mu$ is negative, the error will become the sum of, instead of the difference, between $x^2$ and $\mu$, with the result, that the error will never become smaller than the limit, and the while loop wont ever be broken. Therefore, my function only works on positive numbers. \newpage