函数有理逼近的开源实现

计算科学 表现 特殊功能
2021-12-08 00:03:42

我正在寻找一些有理逼近函数的开源实现(Python、C、C++、Fortran 中的任何一个都可以)。文章[1]中的一些东西。我给它一个函数,它给了我两个多项式,它们的比率是给定间隔的近似值,并且误差以相同的幅度振荡,它是一个最佳近似值,或者接近它。

这是我发现的:

  • 看起来 chebfun 可以做到这一点,但我无法访问 Matlab *.

  • Numerical Recipes (NR) 的第 5-13 节“Rational Chebyshev Approximation”中有一个简单的程序。

  • Mathematica 具有 EconomizedRationalApproximation 和 MiniMaxApproximation

我想知道是否有比 NR 代码更新(可能测试得更好)的东西。

我的应用是我有一组特殊函数,大约 10 个,它们要么作为超几何级数给出,要么作为一些具有数值抵消的公式给出,我想要一个强大、快速和准确的评估函数,它被调用Hartree Fock 计算中计算两个粒子矩阵元素的最内层循环。我在 [2] 中放置了一个对我有用的函数的简单示例。如您所见,它要么使用直接公式,要么使用 x=0 附近的系列,我使用 SymPy 计算得出。它有点工作,但准确度不是很好,大约 x=1 大约一半的有效数字丢失(但对于 x=0.1 和 x=1e5 几乎所有有效数字都是准确的)。我正在寻找更好的近似值。

[1] Deun, J. 和 Trefethen, LN (2011)。用于有理逼近的 Carathéodory-Fejér 方法的稳健实现。BIT 数值数学,51(4),1039–1050。doi:10.1007/s10543-011-0331-7(2010 年 6 月电子版

[2] https://gist.github.com/3831580

(*) 也不是 chebfun 网站,它给了我 404,但佩德罗建议这一定是我的提供商问题。

2个回答

做一次性的最佳有理逼近通常可以通过Remez 算法的“手动”迭代来完成:在插值点的初始猜测处插入具有(相对或绝对)交替符号误差的有理逼近,定位一个(或多个)点实际误差超过了插值点和枢轴的误差(以保留交替符号误差的方式交换一个或多个猜测点)。这是从头开始理解理论的好方法。当所需的准确度适中时,我发现电子表格实现可以帮助我在计算中摸索出路,并通过剪切和粘贴来适应问题。

为了简单说明,考虑非多项式函数y=1/x在间隔1x2. 通过端点的割线如下所示: 在此处输入图像描述

如果我们在“最大误差”点将直线降低一半距离,那么我们将有三个绝对误差的“等振荡”点,计算两个端点和内部的这个临界点。因此,几乎可以通过检查找到平滑凸函数的最佳线性多项式逼近。

Chebfun软件本身从 v4.0 开始是开源的(BSD 风格的许可证)。不知道为什么他们网站的链接当时可能会返回 404 错误,但他们现在是 v5.2.1。(他们也有一个GitHub 存储库。) Chebfun 项目的目标不仅仅是最好的有理近似,其中心概念是一个间隔上的(单变量实数)函数的类似 Matlab 向量的语法。

要完成这个循环,需要让它在Octave而不是 Matlab 下工作。从 2010 年开始有一个Octave-maintainers 线程。Chebfun 维护者/作者在 2012 年发表的一篇论文表明,他们已经在 Octave 兼容性方面做出了一些努力。

查看Chebfun 相关项目页面表明,由于 Chebfun 软件是开源的,因此可以进行此移植,或使用其中列出的开源包之一,例如 Olivier Verdier 的pychebfunPython Chebyshev Functions项目托管在 GitHub。