自动有限差分

计算科学 插值 浮点 准确性 自动分化
2021-12-13 02:47:54

给定数字其中 很小,以及用一系列算术运算实现函数的代码,我想计算到高精度有限差分 受到抵消的困扰。是否有一种自动微分的变体可以让我做到这一点(可能不需要以更高的精度工作)?乍一看,它看起来像是 AD 转移到这个类似问题的基本思想:从对开始,并以“前向模式”对其应用相同的操作序列。但是我无法通过搜索“自动有限差分”获得任何有用的信息。x,yR

|yx||x|
f
f(y)f(x)yx,
(x,yx)

3个回答

这就是 Griewank 等人的观点。调用“割线模式下的分段线性化”,例如参见https://opus4.kobv.de/opus4-zib/files/6164/newton_secant_approx_paper.pdf该研究的目的是以相同的精度捕获绝对值运算的扭结,切线或割线捕获平滑函数的局部行为,并作为自动/算法微分的前向模式的扩展(Adol- C 和自制 python 类)。但作为其中的一部分,它当然也计算平滑函数的割线。

割线斜率是使用基本操作的可用技巧计算的,例如如果,则 其中 ,是割线的斜率给定点对的uvv(x)=sin(u(x))

Sv=v(y)v(x)yx=2sinu(y)u(x)2yx·cosu(y)+u(x)2=2cosu(y)+u(x)2·sin(Su2·(yx))yx
SuSvuv

接近零的正弦的数值计算通常以正确计算商的方式实现。来近似值低于某个阈值的商sinϵϵ116ϵ2+O(ϵ4)

这个基本操作的基本过程通过沿着计算图传播而扩展到完整的功能,与 AD 的前向模式相同。在那里,实现理念中存在变体,例如将函数读出到磁带中并使用“磁带机”进行割线计算,或者将计算图/AST直接转换为进行割线计算的树形数据结构在节点操作中,或者通过原始(重载)函数传播正割“数字”类型而不读取函数结构。

可能相关且有用(我在教授计算数学导论时给了我的学生这些资源,在教学上也有点用处):

Laurent Thévenoux、Philippe Langlois 和 Matthieu Martel 撰写的“浮点程序的自动源到源错误补偿” https ://hal.archives-ouvertes.fr/hal-01158399/document

Herbie: Automatically Improvement Floating Point Accuracy ( https://herbie.uwplse.org/ )华盛顿大学编程语言和软件工程组( https://uwplse.org/ ):主要出版物是“Automatically Improvement Accuracy浮点表达式”,Pavel Panchekha、Alex Sachez-Stern、James R. Wilcox 和 Zachary Tatlock可在https://herbie.uwplse.org/pldi15-paper.pdf找到

也许@davidhigh 想到的是以下内容

f(y)f(x)yx=f(x+h)f(x)h=f(x) as h0substitutingyx=h

你可以得到f(x)通过复杂的步骤微分。