R中的neldermead参数

问题描述 投票:1回答:1

我没有在互联网上找到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))

这是关于如何使用这些参数的基本问题,所以如果这不是正确的标题我会道歉。提前谢谢你的帮助。

r curve-fitting minimization
1个回答
1
投票

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部分。最好!

© www.soinside.com 2019 - 2024. All rights reserved.