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 社区的任何提示。

非常感谢。

PS:在matlab中,一位同事使用 fsolve(@(x) F1(x,u_target,C1,C2,...),0),效果很好。

4

0 回答 0