interp1返回NaN作为x范围内的最后一个值

时间:2013-06-27 11:28:54

标签: matlab interpolation

我对MATLAB中的interp1函数有疑问。让x在[1,110]范围内。但是,以下内容:

yi = interp1(x, y, 1024);

返回NaN

我已经多次检查过我的程序,似乎没有什么不对,但结果对我来说仍然很奇怪。如果有人能提供帮助,我会感激不尽。

3 个答案:

答案 0 :(得分:3)

我很确定你没有达到1024但更不像1023.999999999945435

尝试这个非常人为的例子:

x = 1:10;
y = 1:10;
interp1(x, y, 10) %This works, returns 10

现在尝试

x = 1:0.99999999768768765:10 %note x(end) will give you 10.0000, very deceptive because sum(x == 10 ) gives 0
interp(x, y, 10) %Returns NaN

所以尽管我的例子非常有用,但有时可能会因为精度错误而发生,即使你指定的系列应该精确到1024但它不会因为在二进制中表示漂亮的十进制数字而截断它们没有长得好看。

如果这是你的问题,那么要么将x四舍五入到合适的精度,否则你可以在interp1选项中指定外推,但我认为舍入更好,因为它会阻止其他意外的精度问题下线。

答案 1 :(得分:2)

您必须验证输入1024中是否存在值x

例如

>> x = 1: 2 : 1024;

好像它包含1024,但它没有!

>> x

   1 3 5 ... 1019 1021 1023

没有1024!

如果您想确保1024确实在x,您可以使用linspace

>> x = linspace( 1, 1024, 512 ); % same number of elements as before, but now 1024 is included!

答案 2 :(得分:-1)

要查看x是否包含1024(或更大),您可以使用:     任何(X> = 1024)