関数 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) を使用しており、正常に動作します。