# # # Use optim() to find min or max # # ######################################## #--- one parameter without derivative --- f <- function(x) -exp(-( (x-2)^2 )) optim(1, f) #--- one parameter with derivative --- f <- function(x) -exp(-( (x-2)^2 )) df <- function(x) -2*(x-2)*f(x) optim(1, f, df, method="CG") #--- Two parameter case --- #-- 1. Rosenbrock function -- f <- function(x1,y1) (1-x1)^2 + 100*(y1 - x1^2)^2 x <- seq(-2,2,by=.15) y <- seq(-1,3,by=.15) z <- outer(x,y,f) persp(x,y,z,phi=45,theta=-45,col="yellow",shade=.00000001,ticktype="detailed") optim( c(0,0), f ) #-- 2. Himmelblau's function -- f <- function(x1,y1) (x1^2 + y1 - 11)^2 + (x1 + y1^2 - 7)^2 x <- seq(-4.5,4.5,by=.2) y <- seq(-4.5,4.5,by=.2) z <- outer(x,y,f) persp(x,y,z,phi=-45,theta=45,col="yellow",shade=.65 ,ticktype="detailed") #-- rewrite f -- f <- function(x) (x[1]^2 + x[2] - 11)^2 + (x[1] + x[2]^2 - 7)^2 optim(c(-4,-4),f) #local optim(c(2,-2), f) #local optim(c(2,2), f) #local optim(c(-4,4), f) #global