在R中使用nlminb时出现错误消息

时间:2018-11-01 04:47:18

标签: r optimization

当我尝试使用nlminb优化具有三个参数的函数时,它显示了此错误消息

"Error in objective(.par, ...) : argument "x" is missing, with no default".

有人可以告诉我如何解决吗?

我的代码如下:

coeff<-10**(-4)
z<-100

X1<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yh*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yh*yh)+(12*yh)}
X2<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yh*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yh*yh)-(12*yh)}
X3<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yt*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yt*yt)+(3*yt)}
X4<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yt*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yt*yt)-(3*yt)}
f<-function(X1,X2,X3,X4){-(4/9*log(X1)+2/9*log(X2)+2/9*log(X3)+1/9*log(X4))}
nlminb(c(6.944444,5.787037,11.574074),f)

1 个答案:

答案 0 :(得分:0)

请注意,nlminb需要优化功能,以单个向量作为起点,而不是多个条目。

一种可能的解决方法是对函数f进行包装。同样,您似乎希望f取3个值。 f已经可以访问X1到X4。

> coeff<-10**(-4)
> z<-100
> 
> X1<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yh*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yh*yh)+(12*yh)}
> X2<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yh*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yh*yh)-(12*yh)}
> X3<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yt*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yt*yt)+(3*yt)}
> X4<- function(x,yh,yt){(15/2*x)+(-5/4*coeff*yt*x)+(25/16*z)-(25/16*coeff*x*x)-(-5/4*coeff*yt*yt)-(3*yt)}
> f<-function(x, yh, yt){-(4/9*log(X1(x,yh, yt))+2/9*log(X2(x,yh, yt))+2/9*log(X3(x,yh, yt))+1/9*log(X4(x,yh, yt)))}
> g <- function(p){
+     f(p[1], p[2], p[3])
+ }
> nlminb(c(6.944444,5.787037,11.574074),g)

产生

$par
[1] 23867.17644    48.34801   566.85042

$objective
[1] -11.40553

$convergence
[1] 0

$iterations
[1] 22

$evaluations
function gradient 
      25      113 

$message
[1] "relative convergence (4)"