これなら分かる最適化数学 3.1 に記載の通り、勾配法(勾配降下法・最急降下法)を用いて、関数に最大値・最小値を取らせる変数の値を求めます。以下の例では最大値を取る点を求めています。 1変数の場合 frame() par(mfcol=c(1, 1)) par(mar=c(2, 2, 1, 0.1)) par(mgp=c(1, 0.2, 0)) xrange <- c(-3, 3) yrange <- c(-1, 1) f <- function(x) { cos(x) } dx <- function(x) { -sin(x) } search <- function(x0, f, df) { x <- x0 h <- 0.7 eps <- 1e-6 i <- 1 # 解の移動量が十分小さくなるまで繰り返す。 repeat { oldx <- x # df(x)の符号によって、進む方向を決