1

関数 F1 が与えられます。

F1 <- function(C1,C2,C3,...,x,u_target) {  
# a lot of equations follow   
...  
u_actual - u_target
}

F1 は最後の式の結果を返します

u_actual - u_target

最後の方程式の結果がゼロに収束するように、パラメーター x の値を決定したいと考えています。と

nlm(f=F1,p=c(0),C1=C1,C2=C2,...,stepmax=0.001,ndigit=8)

結果は得られますが、満足のいくものではありません:

u_actual = 0.1316566  
u_target = 0.1

nlm コマンドの引数(gradtol、stepmax、iterlim など)でいろいろいじりましたが、良い結果が得られませんでした。optim、optimize、uniroot も試しましたが、まったく実行できませんでした。

u と x は負の指数関数的展開を示します。x が減少すると、u は指数関数的に増加します。x がゼロの場合、u は有限値になります。x にも上限がありますが、これは不明です。したがって、反復が下限(ゼロ)から始まり、段階的に増加する場合は有望だと思いました。しかし、stepmax の値を減らしても増やしても、結果は良くなりません。

r-communityからのヒントをいただければ幸いです。

どうもありがとうございました。

PS: matlab では、同僚が fsolve(@(x) F1(x,u_target,C1,C2,...),0) を使用しており、正常に動作します。

4

0 に答える 0