当fcn的值足够接近其最小值时,可以使用R的optimize(fcn,…)的tol参数来终止迭代吗?

当fcn的值足够接近其最小值时,可以使用R的optimize(fcn,…)的tol参数来终止迭代吗?,r,optimization,R,Optimization,我一直在尝试使用optimize最小化一个有点不正常的函数,并取得了一定的成功。我可以可靠地获得可接受的解决方案,但速度比需要的慢得多。如果optimize在发现返回值接近最小值的函数参数时停止迭代,则效果最好。这似乎是tol参数优化的目的,但我一直无法使其按预期工作。在下面的代码中,fcn打印要优化的参数的当前值和fcn的返回值absx-target,其最小值为零 试验1: optimize(fcn, interval=c(0.5,1), conN=10, tmtN=10 ,ObsT=28,

我一直在尝试使用optimize最小化一个有点不正常的函数,并取得了一定的成功。我可以可靠地获得可接受的解决方案,但速度比需要的慢得多。如果optimize在发现返回值接近最小值的函数参数时停止迭代,则效果最好。这似乎是tol参数优化的目的,但我一直无法使其按预期工作。在下面的代码中,fcn打印要优化的参数的当前值和fcn的返回值absx-target,其最小值为零

试验1:

optimize(fcn, interval=c(0.5,1), conN=10, tmtN=10 ,ObsT=28, tol=0.007)
# 0.690983 0.513100
# 0.809017 0.373100
# 0.881966 0.214100
# 0.927051 0.079100
# 0.954915 0.046200
# 0.9647293 0.0844000
# 0.9453678 0.0099000
# 0.9430344 0.0045000   <-- Should have terminated here
# 0.9369293 0.0309000
# 0.9407011 0.0205000
# 0.9430344 0.0002000

# $minimum        $objective
# [1] 0.9430344   [1] 2e-04
试验2

optimize(fcn, interval=c(0.2,1), conN=10,tmtN=10,ObsT=28, tol=0.007)
# 0.5055728 0.6295000
# 0.6944272 0.5112000
# 0.8111456 0.3611000
# 0.8832816 0.2225000
# 0.927864 0.071300
# 0.9554175 0.0510000
# 0.9516505 0.0286000
# 0.9429519 0.0002000   <-- Should have terminated here
# 0.9371889 0.0342000
# 0.9462852 0.0108000
# 0.9429519 0.0099000

# $minimum        $objective
# [1] 0.9429519   [1] 0.0099

另外,优化的终止条件是什么?为什么在试用2中,optimize不会在fcn返回0.0002时终止,而是在fcn返回0.0099时终止?

发布fcn的定义。您正在假设tol的含义。在帮助中查找优化,并按照帮助中提到的Fortran代码的链接进行操作。您将看到,tol以间接方式表示x的两个连续值之间的距离,而不是函数值。在R:library/stats/src/optimize.c中优化的源代码中也有同样的内容,请查看函数Brent_fmin。