Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何提高nlm求解器的求解精度_R_Function_Solver_Nlm - Fatal编程技术网

R 如何提高nlm求解器的求解精度

R 如何提高nlm求解器的求解精度,r,function,solver,nlm,R,Function,Solver,Nlm,给出了一个函数F1: F1 <- function(C1,C2,C3,...,x,u_target) { # a lot of equations follow ... 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

给出了一个函数F1:

F1 <- function(C1,C2,C3,...,x,u_target) {  
# a lot of equations follow   
...  
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_目标,C1,C2,…),0),它工作得很好。

还是我应该使用一个简单的while循环?但是,使用快速解算器的好处就消失了,不是吗?我使用函数“uniroot”能够得到非常好的结果。有两个问题,我没有意识到:(1)在我的例子中,这是一个最大化问题,而不是最小化问题,但函数“nlm”搜索最小值(对不起!);(2) 我的函数“F1”的原始形式的结果从未改变其符号,无论x的值如何;然而,对于我读到的大多数解算者来说,这样的符号变化是不可避免的;所以我在某种程度上修改了“F1”,现在它可以很好地与“uniroot”配合使用;或者我应该使用一个简单的while循环?但是,使用快速解算器的好处就消失了,不是吗?我使用函数“uniroot”能够得到非常好的结果。有两个问题,我没有意识到:(1)在我的例子中,这是一个最大化问题,而不是最小化问题,但函数“nlm”搜索最小值(对不起!);(2) 我的函数“F1”的原始形式的结果从未改变其符号,无论x的值如何;然而,对于我读到的大多数解算者来说,这样的符号变化是不可避免的;所以我在某种程度上修改了“F1”,现在它可以很好地与“uniroot”配合使用;
u_actual = 0.1316566  
u_target = 0.1