根据我的理解,优化函数仅设计用于处理一个函数参数。但有时一个函数可能取决于变量和参数的不同输入范围。
例如:
x.r<-rnorm(100)
y<-function(x,p) -x^2+p*1/exp(x^3)
optimize(y,upper=range(x.r)[2],lower=range(x.r)[1])
xr 传递给 y 的 x 的域可以随样本变化。我不想使用通用的 x,而是希望能够从许多 xr 值域中提取来运行 y。有没有办法修改优化函数,以便我可以同时传递 y、函数和 x 它的域变量以及优化参数 p?
有了上面我得到一个错误:
> optimize(y,upper=range(x.r)[2],lower=range(x.r)[1])
Error in p * 1 : 'p' is missing
编辑:根据下面的建议(这是有道理的......但是)我试过了。
x.r<-rnorm(100)
p<-seq(-5,5,1)
y<-function(x,p) -x^2+p*1/exp(x^3)
optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p)
结果是: p * 1 中的错误:缺少“p”
还,
> optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p,x.r)
Error in optimize(y, upper = range(x.r)[2], lower = range(x.r)[1], p, :
invalid function value in 'optimize'
还有其他想法吗?
编辑 2:循环下方的每个评论都可以,但似乎是一种奇怪的方法。我不确定它是否也唯一考虑了 xr 域。
x.r<-rnorm(100)
p<-seq(-5,5,1)
y<-function(p=p,x=x.r) -x^2+p*1/exp(x^3)
for(v in p){
print(optimize(y,upper=range(p)[2],lower=range(p)[1],p=v))}
> for(v in p){
+ print(optimize(y,upper=range(p)[2],lower=range(p)[1],p=v))}
$minimum
[1] -4.999944
$objective
[1] -9.637547e+54
$minimum
[1] -4.999944
$objective
...