fminsearch在单个变量上的应用

fminsearch在单个变量上的应用,r,fminsearch,R,Fminsearch,使用fminsearch上的帮助页面示例作为起点: # Rosenbrock function rosena <- function(x, a) 100*(x[2]-x[1]^2)^2 + (a-x[1])^2 # min: (a, a^2) fminsearch(rosena, c(-1.2, 1), a = sqrt(2)) # x = (1.414214 2.000010) , fval = 1.239435e-11 它给出了错误:X中的错误[2:d1,]:不正确的尺寸数 fm

使用fminsearch上的帮助页面示例作为起点:

# Rosenbrock function
rosena <- function(x, a) 100*(x[2]-x[1]^2)^2 + (a-x[1])^2  # min: (a, a^2)

fminsearch(rosena, c(-1.2, 1), a = sqrt(2))
# x = (1.414214 2.000010) , fval = 1.239435e-11
它给出了错误:X中的错误[2:d1,]:不正确的尺寸数

fminsearch似乎希望向量的长度大于或等于2,但不小于2,但在本例中,向量要求长度为1


注意:fminsearch在pracma包中

它看起来像pracma包中的一个bug

anms函数在下标上删除维度,相关摘录:

d <- length(x0) # i.e. 1
d1 <- d + 1 # i.e. 2
...
X <- matrix(0, nrow = d1, ncol = d)
...
X <- X[o, ] # could put drop = FALSE here
我认为您应该向软件包的作者发布一个bug。

函数中的方法,如fminsearch或anms,不适合一维最小化,与基R中的optim相同。对于单变量函数,请使用基R中的optimize或pracma中的fminbnd。fminsearch将添加一个警告,以便为用户清除此错误。如果代码会进一步崩溃,为什么不使用一个错误(例如stopifnot)代替警告
fminsearch(rosena, c(1), a = sqrt(2))
d <- length(x0) # i.e. 1
d1 <- d + 1 # i.e. 2
...
X <- matrix(0, nrow = d1, ncol = d)
...
X <- X[o, ] # could put drop = FALSE here