类 FiniteDifferencesDifferentiator

java.lang.Object
org.hipparchus.analysis.differentiation.FiniteDifferencesDifferentiator
所有已实现的接口:
Serializable, UnivariateFunctionDifferentiator, UnivariateMatrixFunctionDifferentiator, UnivariateVectorFunctionDifferentiator

使用有限差分的一元函数微分器。

该类在常规的一元函数(或一元向量函数一元矩阵函数)周围创建一些包装对象。这些包装对象除了计算函数值外,还计算导数。

包装对象通过在当前点周围的采样网格上调用基础函数并执行多项式插值来工作。理论上,具有n个点的有限差分方案能够计算高达n-1阶的导数,但通常最好留有一定的余地。步长必须足够小,以便多项式逼近在当前点邻域内良好,但不应该太小,因为数值不稳定会很快出现(相邻点之间存在几个差异)。选择点数和步长高度取决于问题本身。

作为良好和不良设置的示例,让我们考虑五次多项式函数f(x) = (x-1)*(x-0.5)*x*(x+0.5)*(x+1)。由于它是一个多项式,理论上至少使用6个点的有限差分应该能够恢复完全相同的多项式,因此对于任何阶数都能计算准确的导数。然而,由于数值误差,我们对于在[-10, 10]范围内的横坐标使用7个点的有限差分得到以下结果:

  • 步长 = 0.25,二阶导数误差约为9.97e-10
  • 步长 = 0.25,四阶导数误差约为5.43e-8
  • 步长 = 1.0e-6,二阶导数误差约为148
  • 步长 = 1.0e-6,四阶导数误差约为6.35e+14

这个例子表明,小步长实际上非常糟糕,即使对于二阶导数也是如此!

另请参阅: