我正在创建一个要最小化的函数,基本上是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))
非常多余。当问题很简单时,这是可以的,但是当事情变得复杂时,显然不好。有没有一种方法可以创建具有多个返回值的函数,并允许您设置要优化的素数?我记得有些基本函数就是这样,可以为您提供各种输出,但是您仍然可以使用素数。 谢谢。
答案 0 :(得分: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