我正在寻找一种使用高斯求积法或Simpson积分在数值积分中产生重大误差的函数。
答案 0 :(得分:2)
由于Simpson和Gaussian的方法试图用一些简单的平滑函数(如二阶多项式)来拟合平滑函数,否则使用低阶多项式和其他简单的代数函数,如$$ a + 5/6 $$,有意义的是,最大的挑战是不是二阶多项式或类似于这些简单函数的函数。
步骤函数,或者更常见的是短期运行常量的函数,然后跳转到另一个值。楼梯或沃尔什函数(用于一种二元傅立叶变换)应该很有趣。只是一个简单的单步骤就不能很好地拟合任何多项式逼近。
尝试高阶多项式。只有x ^ n对于大n应该是有趣的。对于某些大的n,可能减去x ^ n - x ^(n-1)。 “大”有多大?对辛普森来说,也许是4个或更多。对于使用k个点的高斯,n> k。 (不要试图超过适度的两位数字;除了任何整合之外,这只会变成讨厌的计算。)
很少有像极点这样的数值积分方法,即类似于1 /(x-a)的函数。由于处理实际无穷大可能会遇到麻烦,因此请尝试将其从实线或复共轭对中推出。使用1 /((x-a)^ 2 + b)进行大但有限的尖峰,其中b> 0很小。或者该表达式的平方根,或者它的正弦或指数。你可以用更大的力量取代“2”,我敢打赌那会很讨厌。
曾几何时我想测试数值积分程序。我开始使用阶梯式功能,或一系列矩形脉冲,在一些点上进行采样。
我使用Savitzky-Golay滤波器计算了近似导数。 SG可以使用相邻点的有限窗口来区分数值数据,但通常它用于平滑。它需要一个窗口大小(点数),多项式顺序(实际上是2或4,但你可能想要更高的坚果)和分化顺序(通常0到平滑,1到得到导数)。
结果是一系列脉冲,然后我将其整合。一个好的例程将重建原始的阶梯或矩形脉冲。我想如果选择正确的SG参数,你会让辛普森和高斯在他们的坟墓中滚动。
答案 1 :(得分:0)
如果您正在寻找一个难以集成的测试方法,您可以考虑CS Stack Exchange问题中的那个:
Method for numerical integration of difficult oscillatory integral
在这个问题中,其中一个答案建议使用Matlab的chebfun库,其中包含基本Levin-type method的实现。这告诉我,使用更简单的方法(例如Simpsons规则)函数会失败。