函数的有理逼近的开源实现


15

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

这是我发现的:

  • 看起来chebfun可以做到,但我无权使用Matlab *。

  • 在数字食谱(NR)的5-13节“理性切比雪夫近似”中有一个简单的程序。

  • Mathematica具有EconomizedRationalApproximation和MiniMaxApproximation

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

我的应用程序是我有一组特殊功能,大约10个,以超几何级数或具有数值抵消的公式给出,我想拥有一个健壮,快速且准确的评估函数,称为Hartree Fock计算中计算两个粒子矩阵元素的最内层循环。我在[2]处提供了一个对我有用的函数的简单示例。如您所见,它要么使用直接公式,要么使用我使用SymPy计算的x = 0周围的序列。它可以工作,但准确性不高,大约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,但是Pedro建议这一定是我的提供商问题。

Answers:



10

一次完成最佳有理逼近通常可以通过Remez算法的“手动”迭代来完成:在对插值点的初始猜测中用(相对或绝对)交替符号误差对有理逼近进行插值,在其中找到一个(或多个)点实际误差超过了插值点和轴的误差(以保留交替的符号误差的方式交换这些点的一个或多个猜测点)。这是从头开始理解理论的好方法。当所需的准确度适中时,我发现电子表格的实现可以帮助我感觉自己的计算方式,并通过剪切和粘贴来解决问题。

ÿ=1个/X1个X2在此处输入图片说明

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

自v4.0起,Chebfun软件本身就是开源的(BSD样式的许可证)。不知道为什么到他们站点的链接可能在那个时候返回了404错误,但是现在是5.2.1。(他们也有一个GitHub存储库。)Chebfun项目的目标不仅是最佳的有理逼近,其中心概念是一个区间上(单变量实数)函数的类似于Matlab矢量的语法。

要完成循环,需要使其在Octave而不是Matlab 下工作。关于此Octave-maintainers线程始于2010 年。Chebfun维护者/作者2012年发表的一篇论文表明,从他们的角度来看,已经对Octave兼容性进行了一些努力。

查看与Chebfun相关的项目页面,这表明由于Chebfun软件是开源的,因此可能可以进行此移植,或使用此处列出的开源软件包之一,例如Olivier Verdier's pychebfunPython Chebyshev函数)项目托管在GitHub。


1
这在Chebfun网站链接有文档如何做到合理使用它近似:chebfun.org/docs/guide/guide04.html
昂德里杰·塞蒂克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.