如何在R中优化具有多个返回值的函数

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

我正在创建一个要最小化的函数,基本上是x1的函数,返回值cmc。顺便说一句,我喜欢它返回一些中间值w供以后使用。我刚刚学会了创建返回多个值的函数,您必须创建一个列表或setClass(我不太清楚,所以我没有使用它)。可执行代码是

t1=1; t2=0.6; x2=1;
c=c(0,1)
f<-function(x) c(x/(t2+x),-t1*x/(t2+x)^2)
phi_c<-function(x1){
  X=rbind(f(x1),f(x2))
  v=solve(X%*%t(X))%*%X%*%c
  w=abs(v)/sum(abs(v))
  cmc=t(c)%*%solve(t(X)%*%diag(c(w))%*%X)%*%c
  return(list(cmc,w))
}
phi_c(0.5)

输出不是很好,但是可以接受。问题是我无法使用此类输出优化函数。所以现在我在做

t1=1; t2=0.6; x2=1;
c=c(0,1)
f<-function(x) c(x/(t2+x),-t1*x/(t2+x)^2)
phi_c<-function(x1){
  X=rbind(f(x1),f(x2))
  v=solve(X%*%t(X))%*%X%*%c
  w=abs(v)/sum(abs(v))
  cmc=t(c)%*%solve(t(X)%*%diag(c(w))%*%X)%*%c
}
x1=optimize(phi_c,c(0,x2))$min
X=rbind(f(x1),f(x2))
v=solve(X%*%t(X))%*%X%*%c
w=abs(v)/sum(abs(v))

非常冗余。当问题很简单时,这是可以的,但是当事情变得复杂时,显然不好。有没有一种方法可以创建具有多个返回值的函数,并允许您设置要优化的素数?我记得有些基本函数就是这样,可以为您提供各种输出,但是您仍然可以使用素数。谢谢。

r
1个回答
1
投票

您可以将此函数包装在另一个仅返回预期输出的函数中。如

t1=1; t2=0.6; x2=1;
c=c(0,1)
f<-function(x) c(x/(t2+x),-t1*x/(t2+x)^2)
phi_c<-function(x1){
  X=rbind(f(x1),f(x2))
  v=solve(X%*%t(X))%*%X%*%c
  w=abs(v)/sum(abs(v))
  cmc=t(c)%*%solve(t(X)%*%diag(c(w))%*%X)%*%c
  return(list(cmc,w))
}
> optimize(function(x) phi_c(x)[[1]], lower = 0, upper = 5)
$minimum
[1] 4.999922

$objective
         [,1]
[1,] 37.12268
© www.soinside.com 2019 - 2024. All rights reserved.