据我了解,optimize函数仅设计用于处理一个函数参数。 但有时函数可能取决于变量和参数的不同输入范围。
例如:
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])
x.r.被传递给y的域可能从样本到样本不同。我想要能够从许多x.r值的域中绘制,以运行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: 根据下面的评论,循环似乎可以解决问题,但这似乎是一种奇怪的方法。 我不确定它是否独特地考虑了x.r域。
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
...
optimize(y,upper=range(x.r)[2],lower=range(x.r)[1],p=some_variable)
的东西,其想法是在末尾添加p
参数,并将任何想要的变量传递给它。 - iTechp=3
,例如。 - iTech