-1

以下の勾配降下法を使用して関数の最小値を見つける R コードを作成しました。

gradient.method <- function(f, grad, init, unit.fac=TRUE, interval=c(-7,10), tol=1e-11, max.iter = 35)
{
newpair <- init
oldpair <- newpair - 1
iter <- 0
while(iter < max.iter & sqrt(sum((newpair - oldpair)^2)) > tol){
iter <- iter + 1
oldpair <- newpair

#Set up the unit vector u
newstep <- if(unit.fac) grad(x)(oldpair)/sqrt(sum(grad(x)(oldpair)**2)) 

#Get minimum of f(x_0 - step_size*grad(x_0))
value <- function(step_size) oldpair - step_size*newstep 
min <- optimize(f(x)(value(step_size)),interval)

#Get new pair of vector x
newpair <- oldpair - min*newstep

}
list(minimum = newpair, value = f(x)(newpair), nsteps = iter)
}

f と grad の関数は次のとおりです。

f1 <- function(x){
  n<-length(x)
    function(theta){
    -logLike<- 0.5*n*log(theta[2])-(1/(2*theta[2]))*sum((x-theta[1])**2)
    }
}


g1 <- function(x){
  n <- length(x)
  function(theta){
  grd1 <- -sum((x - theta[1])*theta[2])
  grd2 <- n/(theta[2]) - 0.5*sum(x - theta[1])
  }
}

ただし、変数の 1 つに関するエラーが発生し続けました: コードのテスト時に step_size です。問題を修正するにはどうすればよいですか? ありがとう。

res<-gradient.method(f=f1, grad=g1, init=c(100,100), max.iter=100)
Error in value(step_size) : object 'step_size' not found
4

1 に答える 1