给定一个函数 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 社区的任何提示。
非常感谢。
PS:在matlab中,一位同事使用 fsolve(@(x) F1(x,u_target,C1,C2,...),0),效果很好。