【发布时间】:2021-12-03 06:56:55
【问题描述】:
我正在写一个偏积分微分方程的数值解,我需要它快速运行,所以我发现 scipy.integrate.simps 是最好的,但它并不总是 100% 准确,并且会在 [ 1]。我的解决方案是用 scipy.signal.medfilt 删除它们,然后用插值器在间隙上插值(我尝试过 CubicSpline、PChipInterpolator、scipy.interp1d、akima ......)但它们都在在 y=0.1 处可以看到的解(使用 3 阶巴特沃斯滤波器产生)并且这些误差随着解的演变而增长。如何去除尖峰并在间隙上获得简单、平滑的插值?谢谢!
【问题讨论】:
-
你的数据是什么?我看到一个对数 x 刻度,对我来说这表明您的 x 值不是(大致)线性间隔的。你能在你的问题中添加一些示例 x-y 数据吗?加上你正在执行的代码?
-
@9769953 我已附上示例数据和代码!
-
我认为您需要做更多的工作才能使您的示例可重现。我们应该能够将代码复制/粘贴到笔记本或脚本中,执行它,然后查看您描述的问题
-
FORTRAN 从何而来?您是否与使用 FORTRAN 计算的结果进行比较?为此使用了什么代码?
-
@9769953 ya FORTRAN 代码仅用于比较。虽然这不是我的代码。尽管还尝试将 FORTRAN 代码与 f2py 一起使用的自适应高斯积分器包装在我的代码中而不是 simps 中,因为 FORTRAN 代码的运行速度比我的快得多,但我的代码仍然非常慢,就像使用 scipy.dblquad 一样跨度>
标签: python scipy signal-processing interpolation numerical-computing