source("gradientDescents.R") parabola <- function(x,xmin,s) { d <- x - xmin t(d) %*% s %*% d / 20 + sin(x*2) } parabolaGrad <- function(x,xmin,s) { d <- x - xmin 2 * s %*% d / 20 + 2*cos(x*2) } f <- parabola df <- parabolaGrad center <- 5 S <- 3 xs <- seq(0,10,len=100) fx <- NULL fg <- NULL for (x in xs) { fx <- c(fx,f(x,center,S)) fg <- c(fg,df(x,center,S)) } plot(xs,fx,type="l"); loc <- 1 while (!is.null(loc)) { cat("Click left button to start search. To stop, click right.\n"); loc <- locator(1) if (!is.null(loc)) { firstx <- loc$x resultSCG <- scg(firstx, f, df, center, S, xPrecision=0.001, xtracep=TRUE) print(resultSCG$x) resultSteepest <- steepest(firstx,f,df,center,S,stepsize=0.1, xPrecision=0.001, xtracep=TRUE) plot(xs,fx,type="l") ## first steepest fsearch <- c() r <- resultSteepest for (x in r$xtrace) fsearch <- c(fsearch,f(x,center,S)) lines(r$xtrace,fsearch,col=2) points(r$xtrace,fsearch,col=2) r <- resultSCG fsearch <- c() for (x in r$xtrace) fsearch <- c(fsearch,f(x,center,S)) lines(r$xtrace,fsearch,col=4) points(r$xtrace,fsearch,col=4) text(2,3,paste(length(resultSteepest$xtrace),"steps for Steepest Descent"),pos=4,col=2) text(2,2.5,paste(length(resultSCG$xtrace),"steps for SCG"),pos=4,col=4) } }