1

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

yi = interp1(x, y, 1024);

返回NaN

我已经检查了我的程序几次,似乎没有任何问题,但结果对我来说仍然很奇怪。如果有人可以提供帮助,我将不胜感激。

4

3 回答 3

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选项中指定外推,但我认为四舍五入更好,因为它会阻止其他意外的精度问题。

于 2013-06-27T12:34:58.347 回答
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!
于 2013-06-27T11:44:55.170 回答
-1

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

于 2014-06-27T16:51:52.690 回答