【问题标题】:Function with errors in numerical integration数值积分有误差的函数
【发布时间】:2013-10-20 15:18:32
【问题描述】:
我正在寻找一个在使用高斯求积或辛普森求积的数值积分中产生显着误差的函数。
【问题讨论】:
标签:
matlab
numerical-methods
numerical-integration
【解决方案1】:
由于 Simpson 和 Gaussian 的方法试图用一些简单的平滑函数(例如二阶多项式)拟合一个所谓的平滑函数,否则会使用低阶多项式和其他简单的代数函数,例如 $$a+ 5/6$$,最大的挑战是不是二阶多项式或类似于那些简单函数的函数是有道理的。
阶跃函数,或更一般的函数,对于短期运行来说是恒定的,然后跳转到另一个值。楼梯或沃尔什函数(用于一种二进制傅里叶变换)应该很有趣。仅仅一个简单的单步并不能很好地拟合任何多项式逼近。
尝试一个高阶多项式。大 n 的 x^n 应该很有趣。对于一些大的 n,也许减去 x^n - x^(n-1)。 “大”有多大?对于辛普森来说,可能是 4 个或更多。对于使用 k 点的高斯,n>k。 (不要疯狂尝试超出适度的两位数的 n;除了任何积分之外,这只会变成令人讨厌的计算。)
很少有像极点这样的数值积分方法,也就是说,对于 a 周围的某些邻域,函数类似于 1/(x-a)。由于处理实际无穷大可能很麻烦,请尝试将其推离实线或复共轭对。使用 1/( (x-a)^2 + b) 制作一个大但有限的尖峰,其中 b>0 很小。或者那个表达式的平方根,或者它的正弦或指数。你可以把“2”换成更大的力量,我敢打赌那会很讨厌。
曾几何时,我想测试一个数值积分例程。我从一个阶梯函数或矩形脉冲序列开始,在一组点上采样。
我使用 Savitzky-Golay 滤波器计算了近似导数。 SG 可以使用相邻点的有限窗口来区分数值数据,尽管它通常用于平滑。它需要一个窗口大小(点数)、多项式阶数(实际上是 2 或 4,但您可能想要更高一些)和微分阶数(通常 0 表示平滑,1 表示导数)。
结果是一系列脉冲,然后我将其整合。一个好的例程将重新创建原始的阶梯或矩形脉冲。我想如果 SG 参数选择正确,你会让辛普森和高斯在他们的坟墓里翻身。