一次计算多个数值导数

计算科学 有限差分 数字
2021-12-28 03:28:17

可以说我有一个功能f(X)=f(x1,...,xN)被整合。但与时间离散方法不同,我的积分器使用量化来提前时间,也就是说,如果|xq|>dQ, 和q是量化的版本xdQ是量子。

为此,该函数需要发送f(X),f(X), 和f(x)到积分器,它确定时间步长,t=(dQ3f(x))3,从(导数函数f的)二阶导数和t之后单位时间发回更新的(积分)值([v,mv,pv] ~ 值,f的第一个和第二个量化导数值)。

在论文中,f是通过计算来近似的

cj=[f(X)f(X)]/(xjxj)对于每个更新的值xj

然后

f=(cj)mv ,

但在参考实现中,它们更新所有值,然后简单地计算

f=f(X)f(X)/1016(二阶导数以此类推)

我不确定哪种方式更可取,第一种方法使用2m评估,第二种方法只调用f两次。

哪种方法更适合非线性函数逼近?,因为它只需要在量子范围内准确(通常很小,例如0.0001|f(X)|

提示:这是一种离散事件方法,可能存在较大的跳跃。

1个回答

我不完全清楚你在问什么。让我看看我认为你在问什么,你可以告诉我我是否走在正确的轨道上。

假设你有一个函数,也就是说它需要个变量作为输入,并输出一个标量。另外,假设您想在某个点f:RmRmx1,,xmfx¯=(x¯1,,x¯m)

如果你想评估,那么你可以近似它fxi(x¯)

f(x¯+hei)f(x¯)h,

其中是一个全为零的单位向量,除了第个位置的 1。eii

更一般地说,如果你想评估,你可以近似它f(x¯)v

f(x¯+hv)f(x¯)h.

在这两种情况下,您都需要使用较小的多小取决于应用程序。可以在评论论文Jacobian-free Newton-Krylov 方法:方法和应用的调查中的良好指南hh

有限差分近似确实会在一定程度上降低导数的准确性,因此如果您的计算需要精确的导数信息,您最好尝试其他方法(取决于应用,这些可能是前向或伴随灵敏度方法;自动微分;复数有限差分; 使用铅笔、纸和您最喜欢的计算机代数系统的某种组合)来获得精确(或接近精确)的导数信息。

应用此过程两次以获得 Hessian 只会进一步降低近似的质量,并且需要操作,并且通常被认为太昂贵且太不准确,不值得做。确实需要 Hessian 信息的应用程序有时可以通过从初始猜测获得的近似 Hessian 信息加上使用梯度信息对该近似 Hessian 进行 rank-1 更新来解决。一个例子是 BFGS 方法。m2