我在 Cleve's Corner 看到了这篇文章,他在那里展示了复杂的步骤微分比中心差异更准确。两种方法的错误是. 那么,为什么复杂的阶跃微分会产生更好的结果呢?是因为隐藏在对于复杂的步骤微分更好?
为什么复杂的步长微分优于中心微分
计算科学
有限差分
2021-12-11 18:59:25
2个回答
实际上,复杂步长方法的舍入误差要低得多,因为所有导数项都在虚部中处理,而不与实部直接交互,而不是有限差分计算。
复杂步骤的优点是您可以采用非常低的扰动大小(我通常使用),而你只会下到周围用于避免过度舍入误差的经典有限差分公式(例如,请参见链接的 Matlab 帖子中的收敛图)。
事实上,让我们考虑泰勒级数有一个复杂的扰动:
取虚部并除以, 你得到:
通过采取非常小的,第二项和第三项由于虚部的舍入误差而完全消失,从而为您提供机器精度的准确评估,您很可能永远无法使用经典的有限差分方案(或者可能使用非常高阶的方案)来实现。另一种方法是使用自动微分。
另一方面是复杂的步骤通常很容易实现(如果语言允许轻松处理复杂的变量)。例如对于标量函数,您可以在 Python 中将其一阶导数构造为单线:
fprime = lambda x: np.imag( f(x + 1e-50*1i) ) * 1e50
按照@nicoguaro 的建议回答。这些方法具有相同的截断误差但不具有相同的舍入误差,这就是它们具有不同数值精度的原因。