首页 > 解决方案 > griddedInterpolant 如何处理应该被拒绝的输入?

问题描述

的文档griddedInterpolant指出该pchip方法“需要至少 4 个(网格)点”。但是,当我使用 2 点向量运行它时,它是这样的:

>> F = griddedInterpolant([0,1],[1,2],'pchip')

F = 

  griddedInterpolant with properties:

            GridVectors: {[0 1]}
                 Values: [1 2]
                 Method: 'pchip'
    ExtrapolationMethod: 'pchip'

请注意,该方法仍然是pchip.

这非常令人困惑。为什么它不抛出错误?

标签: matlabinterpolationpolynomial-mathpolynomialsundocumented-behavior

解决方案


我猜想当前的行为是 TMW 的一种设计选择,它允许大多数用户“摆脱”一些可能使用低阶多项式解决的边缘情况,从而为大多数用户省去了麻烦。至于文件 - 这可能是一个疏忽。

看看下面的例子:

xq = -2:0.1:2;
p = pchip([0,1],[1,2], xq);
figure(); plot(xq, p);

这运行没有问题并产生:

示例代码的结果

...正如我们所见,它退化为线性曲线。这并不是真正的问题,因为它似乎尊重了保形分段多项式的要求。

事实上,如果你希望它是立方的(即 3 次方),它需要 4 个数据点(但它并不是真正的“分段”,因为它只有 1 个)。


推荐阅读