source("gradientDescents.R") rosen <- function(x,...) { 100 * ((x[2] - x[1]^2)^2) + (1.0 - x[1])^2 } rosenGrad <- function(x,...) { g1 <- -400 * (x[2] - x[1]^2) * x[1] - 2 * (1 - x[1]) g2 <- 200 * (x[2] - x[1]^2) matrix(c(g1,g2)) } f<-rosen df <- rosenGrad xs <- seq(-1,2,len=30) ys <- seq(-1,2,len=30) p <- expand.grid(xs,ys) fx <- NULL for (i in 1:nrow(p)) { fx <- c(fx,f(t(p[i,]),center,S)) } fx <- matrix(fx,length(xs),length(ys)) contour(xs,ys,fx,drawlabels=FALSE,levels=1.6^c(0:10)) 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 <- matrix(c(loc$x, loc$y)) resultSCG <- scg(firstx, f, df, xtracep=TRUE, xPrecision=1.e-10, fPrecision=1.e-10, nIterations=2000) resultSteepest <- steepest(firstx,f,df,stepsize=0.0001,xtracep=TRUE, xPrecision=1.e-10, fPrecision=1.e-10, nIterations=2000) contour(xs,ys,fx,drawlabels=FALSE,levels=1.6^c(0:10)) fsearch <- c() r <- resultSteepest for (i in ncol(r$xtrace)) { x <- r$xtrace[,i] fsearch <- c(fsearch,f(x,center,S)) } lines(r$xtrace[1,],r$xtrace[2,],col=2) points(r$xtrace[1,],r$xtrace[2,],col=2) r <- resultSCG fsearch <- c() for (i in ncol(r$xtrace)) { x <- r$xtrace[,i] fsearch <- c(fsearch,f(x,center,S)) } lines(r$xtrace[1,],r$xtrace[2,],col=4) points(r$xtrace[1,],r$xtrace[2,],col=4) text(0.7,-0.5,paste(ncol(resultSteepest$xtrace),"steps for Steepest Descent"),pos=4,col=2) text(0.7,-0.8,paste(ncol(resultSCG$xtrace),"steps for SCG"),pos=4,col=4) } }