我正在尝试使用函数optimize()来优化一个名为SSE的函数的第一个参数(它调用其他两个函数)但是无论参数tol =(我以不同的方式设置为测试)都给我总是相同的结果。这是函数(和子函数)的代码
SSE <- function(lambda,alpha,y)
{
N <- dim(y)[2]
len <- dim(y)[1]
#########CHECK AGAIN
z <- jglog(y,alpha,lambda)
s <- 0
mean_spec <- apply(z,1,mean,na.rm=T)
s <- sum((z-mean_spec)^2)
cat(lambda,"\t",s,"\n") #### HERE I WRITE THE VALUES ON THE SCREEN
return(s)
}
glog <- function(y,alpha,lambda)
z <- log((y-alpha)+sqrt((y-alpha)^2+lambda))
jglog <- function(y,y0,lambda)
{
z <- glog(y,y0,lambda)
D <- log(sqrt((y-y0)^2+lambda))
gmn <- exp(apply(D,2,mean,na.rm=T))
zj <- z*gmn
return(zj)
}
这是main中调用函数优化的代码
lambda <- optimize(SSE,interval=c(low_lim,upper_lim),y0,x,tol=step_threshold)
在这种情况下,low_lim是-1143210927,upper_lim是5.023143e + 24,而step_threshold是1e-16。但正如我之前提到的,输出总是相同的(即使我设置tol = 100),具体范围从3.104473e + 24到37447978334,步骤绝对不等于tol给出lambda <0的结果。我做错了吗?