最適化関数は、私が理解しているように、1つの関数引数のみを処理するように設計されています。ただし、関数が変数とパラメーターのさまざまな入力範囲に依存する場合があります。
例えば:
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
...