给定数字其中
很小,以及用一系列算术运算实现函数的代码,我想计算到高精度有限差分
受到抵消的困扰。是否有一种自动微分的变体可以让我做到这一点(可能不需要以更高的精度工作)?乍一看,它看起来像是 AD 转移到这个类似问题的基本思想:从对开始,并以“前向模式”对其应用相同的操作序列。但是我无法通过搜索“自动有限差分”获得任何有用的信息。
自动有限差分
这就是 Griewank 等人的观点。调用“割线模式下的分段线性化”,例如参见https://opus4.kobv.de/opus4-zib/files/6164/newton_secant_approx_paper.pdf。该研究的目的是以相同的精度捕获绝对值运算的扭结,切线或割线捕获平滑函数的局部行为,并作为自动/算法微分的前向模式的扩展(Adol- C 和自制 python 类)。但作为其中的一部分,它当然也计算平滑函数的割线。
割线斜率是使用基本操作的可用技巧计算的,例如如果,则
其中 ,是割线的斜率给定点对的uv
接近零的正弦的数值计算通常以正确计算商的方式实现。来近似值低于某个阈值的商。
这个基本操作的基本过程通过沿着计算图传播而扩展到完整的功能,与 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 想到的是以下内容
你可以得到通过复杂的步骤微分。