--- title: "Homework 6: Bug Hunt" author: "36-350" date: "Due at 11:59 pm on Thursday, 23 October 2014" output: pdf_document --- In this assignment you will debug each of the functions included in the accompanying R script so that they produce the correct results. ```{r} source("hw-06-supplement.R") ``` You will replace the above sourcing statement with your corrected code so that when you mark down the blocks below to execute their R code, you will have the desired output. 1. `my.regexpr.1()` should produce full names. ``` my.regexpr.1 ("Cosma Shalizi, Andrew Thomas, Samuel L. Ventura, Bryan Hooi") ## Should be obvious. my.regexpr.1 (theIncredibles) ## full names: Helen Parr, Lucius Best. ## Optional: Mr. Incredible. Bonus points: ## add the space back and exclude "Nomanisan Island" from the search. ``` 2. `my.regexpr.2()` should extract dates from a string in a known pattern. Test on this sequence to extract the two dates. ``` my.regexpr.2 (terminator2) ``` 3. `my.dgamma.log()` generates the log of the probability density of the Gamma distribution. Note that this is exactly equal to the function `dgamma(..., log=TRUE)` so use this to verify your answers. ``` my.dgamma.log (seq(0.2, 5, by=0.2), shape=0.2, rate=5) ## dgamma (seq(0.2, 5, by=0.2), shape=0.2, rate=5, log=TRUE) my.dgamma.log (seq(0.4, 10, by=0.4), shape=0.2, rate=5) my.dgamma.log (seq(1, 10, by=0.2), shape=2, rate=6) ``` 4. `my.dnorm.log()` generates the log of the probability density of the normal distribution. Note that this is exactly equal to the function `dnorm(..., log=TRUE)` so use this to verify your answers. ``` my.dnorm.log (seq(-3, 3, by=0.2), mean=0, sd=1) ## dnorm (seq(-3, 3, by=0.2), mean=0, sd=1, log=TRUE) my.dnorm.log (seq(-3, 3, by=0.2), mean=-1, sd=2) my.dnorm.log (seq(-3, 3, by=0.2), mean=-2, sd=5) ``` 5. Find the nearest zero of a function using the Newton-Raphson method [http://en.wikipedia.org/wiki/Newton's_method], coded in `zero.finder()`. HINT: add extra intermediate outputs to diagnose what the function is doing. ``` zero.finder (function(x) {1 - x^2}, 1.5) # should be 1 zero.finder (function(x) {1 - x^2}, 0.5) # should be 1 zero.finder (function(x) {x^3 - 7*x^2 + 7*x + 15}, 3.5) # should be 3 zero.finder (function(x) {x^3 - 7*x^2 + 7*x + 15}, -1.5) # should be -1 zero.finder (function(x) {x^3 - 7*x^2 + 7*x + 15}, 4.5) # should be 5 ``` 6. Find the nearest maximum of a function using the Newton-Raphson method [http://en.wikipedia.org/wiki/Newton's_method], coded in `maximizer()`. Hint: plot these functions using `curve()` to see where they should maximize. If the minimum ``` zero.finder (function(x) {1 - x^2}, 1.5) # should be 1 zero.finder (function(x) {1 - x^2}, 0.5) # should be 1 maximizer (function(x) {x^3 - 7*x^2 + 7*x + 15}, 3.5) # should be ~ 0.569 maximizer (function(x) {x^3 - 7*x^2 + 7*x + 15}, -1.5) # should be ~ 0.569 maximizer (function(x) {x^3 - 7*x^2 + 7*x + 15}, 4.5) # should be Inf -- build a check for this ``` 7. The Fibonacci sequence is better defined dynamically, and one attempt at this is in `dynamic.fibonacci()`. It should return the numbers corresponding to `1,2,3,5,8,13 ...` for those values, and zero for any disallowed values. ``` dynamic.fibonacci (10) dynamic.fibonacci (1) dynamic.fibonacci (0) dynamic.fibonacci (0.5) ```