我没有在互联网上找到neldermead()的例子,所以我想我会发布以下内容。也就是说,我无法弄清楚如何控制算法的最大迭代次数。 https://cran.r-project.org/web/packages/neldermead/neldermead.pdf
其中陈述如下:
optbase类'optimbase'的对象,即由optimbase()创建并包含以下元素的列表:
iterations迭代次数。
使用Nelder Mead通过最小化残差来拟合抛物线的工作示例
library(neldermead); library(nloptr);
## ========= Minimizing the residuals for a 2d quadrature =========== ##
x2d = seq(-4,6,length.out=50); ## x vector definition
ynoise = runif(n=50, min=-2, max = 2) ## noise
y2d = 1.3 + (x2d-2.1)^2 + ynoise ## y data for fitting
## Fitting with nelder-mead
quadmin <- function(x){ sum( (y2d - x[1] - (x2d - x[2])^2)^2 ) }
x000 <- c(1, 2)
sol2d <- neldermead(x0 = x000, fn = quadmin)
sol2d
yfit = sol2d[[1]][1] + (x2d - sol2d[[1]][2])^2 ## Fitted curve.
plot(x2d, y2d); lines(x2d, yfit) ## Plotting
但我希望做的事情如下:
sol2d <- neldermead(x0 = x000, fn = quadmin, iterations = 200)
^^^不起作用。也没有将它放入列表中:
sol2d <- neldermead(x0 = x000, fn = quadmin, optbase = list(iterations = 200))
这是关于如何使用这些参数的基本问题,所以如果这不是正确的标题我会道歉。提前谢谢你的帮助。
neldermead
至少提供两种R
功能。一个来自包neldermead
,它对应于您链接的文档。我无法让它发挥作用。它让我没有错误或解决方案。代码:
library(neldermead)
library(nloptr)
## ========= Minimizing the residuals for a 2d quadrature =========== ##
x2d = seq(-4,6,length.out=50); ## x vector definition
ynoise = runif(n=50, min=-2, max = 2) ## noise
y2d = 1.3 + (x2d-2.1)^2 + ynoise ## y data for fitting
## Fitting with nelder-mead
quadmin <- function(x){
sum(y2d - x[1] - (x2d - x[2])^2)^2 }
x000 <- c(1, 2)
opt <- optimbase(x0 = as.matrix(x000),fx0 = -1000,maxiter = 200,fopt = quadmin,verbose=T)
sol2d <- neldermead::neldermead(opt)
另一方面,包qazxsw poi还提供了qazxsw poi函数,其语法看起来更接近你的代码,我已经能够运行:
nloptr
如您所见,代码中唯一的问题是neldermedad
部分。最好!