我想在Maple和R中最大化以下功能:
首先,让我们用枫来做:
f := (1.98487000395764*(1-1/(1+exp(-2.*t))))/(1+exp(-2.*t))-.309660918271578*t*(1-1/(1+exp(-2.*t)))/(1+exp(-2.*t))+2.72769846075997*t^2*(1-1/(1+exp(-2.*t)))/(1+exp(-2.*t))+(6.98540143163400*(1-1/(1+exp(-2.*t+2.))))/(1+exp(-2.*t+2.))-(.642949404838428*(t-1.))*(1-1/(1+exp(-2.*t+2.)))/(1+exp(-2.*t+2.))+12.4616594684298*(t-1.)^2*(1-1/(1+exp(-2.*t+2.)))/(1+exp(-2.*t+2.))-2:
plot(f, t = -5 .. 5)
NLPSolve(f, t = xL .. xU, method = branchandbound, maximize);
从图中可以看出,全局最大值大于0,但是maple作为全局最大值返回0。 现在,让我们通过复制确切的函数在R中尝试它:
f.maple <- function(t){
out <- (1.98487000395764*(1-1/(1+exp(-2.*t))))/(1+exp(-2.*t))-.309660918271578*t* (1-1/(1+exp(-2.*t)))/(1+exp(-2.*t))+2.72769846075997*t^2*(1-1/(1+exp(-2.*t)))/(1+exp(-2.*t))+(6.98540143163400*(1-1/(1+exp(-2.*t+2.))))/(1+exp(-2.*t+2.))-(.642949404838428*(t-1.))*(1-1/(1+exp(-2.*t+2.)))/(1+exp(-2.*t+2.))+12.4616594684298*(t-1.)^2*(1-1/(1+exp(-2.*t+2.)))/(1+exp(-2.*t+2.))-2
return(-out)
}
t = seq(lx, ux, by = .1)
plot(t, -f.maple(t), type = "l")
require(Rsolnp)
res <- gosolnp(fun = f.maple, LB = lx, UB = ux, n.sim = 50, n.restarts = 1)
> res$par
[1] 0.1963055
> -res$values[3]
[1] 0.6511135
可以看出,R给出0.19631作为似乎是真的函数的最大值:
-f.maple(0)
[1] 0.6055397
-f.maple(0.1963055)
0.6511135
我对Maple优化过程有点困惑,因为0甚至不是被捕获的局部最大值,也不知道为什么maple优化过程返回0而不是0.1963055
任何暗示都将受到赞赏。 谢谢