【问题标题】:How to specify boundary behavior for SciPy's interp1d如何为 SciPy 的 interp1d 指定边界行为
【发布时间】:2015-06-23 13:54:45
【问题描述】:

我正在尝试在 SciPy 的 interp1d 函数的边界处设置行为,according to the documentation 应该是可能的:

Behavior at the boundary can be specified at instantiation time.

但我没有找到任何关于此的进一步信息。 interp1d documentation 并未全部提及。

那么:如何定义行为?

侧面好奇:它使用的默认边界行为是什么?



编辑:示例(假设x=0x=n之间的数据点和三次插值)

我知道至少三种我希望能够指定的边界行为:

flat:我可以要求函数平坦化,换句话说,导数为零。

f'(0)  = f'(n)  = 0
f''(0) = f''(n) = 0

循环的: 中的一些东西

f'(0)  = f'(n)
f''(0) = f''(n)

因此开头和结尾有相同的“斜率”。


手动:或者我可以手动提供导数的值...

f'(0)  = ...
f'(n)  = ...
f''(0) = ...
f''(n) = ...

虽然可能不会同时适用于他们四个人。

【问题讨论】:

    标签: python scipy interpolation


    【解决方案1】:

    我相信文档中的句子是严重的措辞,只是忽略它。

    interp1d函数目前不允许指定边界行为,

    • 用于线性插值,我们根本没有选择它。
    • 对于高阶插值interp1d使用样条曲线构造函数scipy.interpolate.splmake使用默认参数kind='smoothest',因此在那里的边界行为再也找不到了。
    另一方面,您可能希望看看scipy.interpolate.PiecewisePolynomial,它表示具有分段多项式的曲线,并且能够指定衍生物(尽管所有结,但不仅在边界处)。 p >

    【讨论】:

    • 根据我的理解有限,“斜率”(即衍生)与订单无直接相关:假设在x=0和@ 987654328和立方插值之间的数据点,我可以要求函数换句话说,换句话说,派生为零(即f'(0)=f'(n)=0f''(0)=f''(n)=0)。或者我可以要求在f'(0)=f'(n)f''(0)=f''(n)(开始和结束具有相同的“斜率”)中。或者我可以手动为衍生品提供值... span>
    • @ neopostmodern true。我更新了上面的帖子,以考虑问题中的编辑。 span>
    • 不幸的是,我善待在scipy.interpolate.splmake(除了抱怨文件丢失的人除外)。我会接受你的答案,因为它显然是不是可能在 scipy i>(我要求的东西),我稍后会发布我的解决方法/自己的实现。 span>
    • 谢谢。好吧,也许splmake @并不意味着暴露给用户,因此缺少文档。可以在github.com/scipy/scipy/blob/master/scipy/interpolate/… span>上找到源
    • 我假设“稍后”表示“永远”。 span>
    猜你喜欢
    • 2019-01-14
    • 2016-01-05
    • 2016-12-25
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多