具有interp1函数的单调性

时间:2017-01-13 21:07:05

标签: matlab interpolation

有时当我在MATLAB中使用interp1函数时,它会抛出一个错误,说我的向量需要单调递增,有时则不会。

例如,假设我有3个向量。

A = [286, 295, 298, 301, 304, 308, 310, 324, 330, 335];   

B = [31000, 30950, 30875, 30775, 30650, 30500, 30425, 29900, 29675, 29450];  

C = [290, 291, 292, 293, 294, 295, 296, 297, 298, 299];

我想跑

D = interp1(A,B,C);

即使B没有单调增加,此函数也会成功返回。单调性仅适用于传递到等式中的第一个和第三个向量吗?

1 个答案:

答案 0 :(得分:2)

错误消息实际上意味着什么

在这种情况下,错误实际上有点误导,并且A中的所有值都不是唯一的(不是严格单调的)。错误(不太有用)实际上从许多插值函数使用的griddedInterpolant传播,因此具有一般错误消息。

为什么它只适用于某些输入

使用interp1,您实际上是在尝试使用用户提供的f(x)位置以及相应的值(x)来构建函数f(x)的估计值。在您的示例中,A包含每个数据点的位置(x),B包含每个点(f(x))的函数值。只需要位置A中的值)是唯一的,这样您就不会在B中为{{1}的相同值设置多个值}}。如果你这样做,A并不知道如何应对。

interp1的排序(错误的单调增加部分)并不重要,因为A会自动将interp1排序为增加(它还会重新排列A,以便值仍然对应B)。*

A只是您想要示例插值的位置。您可以在同一点请求函数的值一百万次而没有问题。 C只会返回interp1中每个位置的相应值,因此对C的值或排序没有任何限制。

C

*如果 希望尊重A = [1 3 2]; % Not monotically increasing but DOES need to be unique values B = [1 2 1]; % Can have any value and can repeat values but each % value corresponds with each element in A C = [3 3 1 1 2 2]; % Can be any order and can repeat values % ERROR FREE! interp1(A, B, C) % 2 2 1 1 1 1 A点的排序,那么您希望以不同的方式参数化您的输入数据this answer

中建议的方式