我是R新手,所以如果問題有點傻,請原諒我。 我正在嘗試爲值函數迭代編寫一個簡單的while循環。我的函數(optim.routine)使用求解器ipoptr。這裏是我的代碼:get(as.character(FUN),mode =「function」,envir = envir中的錯誤)
d<-1
old1<-0
old2<-0
num.iter<-0
i.esp<-1e-05
i.T<-100
lb<-0
ub<-10
while (d>i.eps & num.iter<i.T){
new1 <- optim.routine(old1, old2, eval_f=eval_f, eval_grad_f=eval_grad_f, lb=lb, ub=ub, update=FALSE)
d<-dist(c(old1, new1), method="euclidean")
num.iter<-num.iter+1
old1<-new1
}
其中optim.routine如下功能:
optim.routine<-function(old1, old2, eval_f=obj, eval_grad_f=obj.deriv, lb=lb, ub=ub, update){
if (isTRUE(update)){
var2<-old2
var1<-old1
var1.deriv<-deriv(var1)
optimize <- ipoptr(x0 = old2, eval_f = eval_f, eval_grad_f = eval_grad_f, lb = lb,
ub = ub)
new1<- optimize$objective
new2<- optimize$solution
old2<-new2
old1<-new1
}else{
var2<-old2
var1<-old1
var1.deriv<-vf.deriv(var1)
optimize <- ipoptr(x0 = old2, eval_f = eval_f, eval_grad_f = eval_grad_f, lb = lb,
ub = ub)
new1<- optimize$objective
new2<- optimize$solution
old1<-new1
}
}
和DERIV是計算衍生品的功能。
我收到以下錯誤,如果我嘗試運行代碼:
source('/mnt/ide0/home/myname/Documents/optim.R')
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'fn' of mode 'function' was not found
,如果我調試功能:
Browse[2]> n
Error in isTRUE(update) : argument "update" is missing, with no default
如果我唯一來源的功能,而不while循環沒有錯誤被展示。老實說,我不知道。任何幫助是極大的讚賞。謝謝!
克勞迪婭
+1我運行過類似的問題,但仍然沒有完全理解到底會發生什麼上:http://stackoverflow.com/q/17808575/684229(答案雖然不會幫你很多)。另一個類似的問題在這裏:http://stackoverflow.com/q/16723036/684229 – TMS
你在哪裏定義eval_f和eval_grad_f?你有一個獨立的例子,表現出這種行爲? –
它們是目標函數及其梯度。如果需要,我可以發佈整個代碼。在我的情況下,梯度近似爲Chebychev多項式。 –