有时当我在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
没有单调增加,此函数也会成功返回。单调性仅适用于传递到等式中的第一个和第三个向量吗?
答案 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