大多数数值算法都需要选择一个 epsilon 才能稳健并提供有意义的结果。选择机器 epsilon 通常过于激进。除非对您的问题有任何特殊知识,否则我记得的一条经验法则是使用. 例如:在这篇维基百科文章中提到过。这基本上与假设浮点数中的一半数字是伪造的相同。
但我不知道我从哪里得到这个经验法则。我只是在各种文本中看到它突然出现,未被引用。如果他们不了解数值算法的实际问题并且天真地尝试使用机器 epsilon,我可以指出它的来源吗?
大多数数值算法都需要选择一个 epsilon 才能稳健并提供有意义的结果。选择机器 epsilon 通常过于激进。除非对您的问题有任何特殊知识,否则我记得的一条经验法则是使用. 例如:在这篇维基百科文章中提到过。这基本上与假设浮点数中的一半数字是伪造的相同。
但我不知道我从哪里得到这个经验法则。我只是在各种文本中看到它突然出现,未被引用。如果他们不了解数值算法的实际问题并且天真地尝试使用机器 epsilon,我可以指出它的来源吗?
Wikipedia 文章引用了 Numerical Recipes,第 3 版,第 5.7 节,第 229-230 页(在http://www.nrbook.com/empanel/上提供了有限的页面浏览量)。果然,他们提供了一个推导来证明使用单边差商,对于导数的有限差分逼近,是一个很好的步长选择。我不知道在没有特定问题信息的情况下,对于其他算法选择将非常有用。对于特定的算法,您最好尝试获取有关您的问题的信息,使用一些合理的策略进行试错,并选择不同的容差,并为您正在使用的特定算法查找更详细的参考资料。我想推荐的一个很好的综合参考是 Nicholas Higham 的数值算法的准确性和稳定性。
在数值微分的前向差分方法的背景下,步长的选择大约为可以通过对发生的截断和舍入误差的分析来证明这一点——这个特定的选择使两个误差的总和最小化。但是,如果您切换到居中差分公式,结果是是最优的。