计算轻微振荡级数到高精度?

计算科学 收敛 外推
2021-12-23 01:46:07

假设我有以下有趣的功能:

f(x)=k1coskxk2(2coskx).
它有一些令人不快的特性,比如它的导数在 的有理倍数处不连续π. 我怀疑不存在封闭形式。

我可以通过计算部分总和并使用理查森外推来计算它,但问题是将函数计算到足够多的十进制数字(例如,100 会很好)太慢了。

有没有可以更好地处理这个功能的方法?

这是一个情节f(πx)有一些文物:

函数的导数,$f'(\pi x)$

3个回答

如果不允许使用分析技术但已知周期性结构,则这是一种方法。

g(x)=cosx2cosx
以周期为周期2π, 以便
g(x)=jwjeijx
在哪里
wj=12π02πg(x)eijxdx
因此,
f(x)=k1g(kx)kp=k11kpjwjeijkx=jwjk1(eijx)kkp=jwjLip(eijx)
您可以近似积分wj直接或计算一堆f(x)值并使用 DFT。在任何一种情况下,您都可以将理查森外推法应用于结果。因为在你的情况下g(x)是在邻域内解析的R,即使没有理查森,最终级数也呈指数收敛。

为了x=2πa/ba,b整数,我们有

f(x)=k1coskxk2(2coskx)=k=1bcoskx2coskxn01(k+bn)2=k=1bcoskx2coskxψ1(k/b)b2
在哪里ψ1(z)是 trigamma 函数(http://en.wikipedia.org/wiki/Polygamma)。以下是去除了伪影的函数及其导数的图: 系列的值和导数

Levin u 变换怎么样?除了 Fortan 代码,GSL中还有几个版本:`gsl_sum_levin_u*'Matlab 的MuPADMaple使用这种方案。