interp1
我对MATLAB 中的函数有疑问。设x
在 [1, 1024] 范围内。但是,以下内容:
yi = interp1(x, y, 1024);
返回NaN
。
我已经检查了我的程序几次,似乎没有任何问题,但结果对我来说仍然很奇怪。如果有人可以提供帮助,我将不胜感激。
interp1
我对MATLAB 中的函数有疑问。设x
在 [1, 1024] 范围内。但是,以下内容:
yi = interp1(x, y, 1024);
返回NaN
。
我已经检查了我的程序几次,似乎没有任何问题,但结果对我来说仍然很奇怪。如果有人可以提供帮助,我将不胜感激。
我很确定你没有达到 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
选项中指定外推,但我认为四舍五入更好,因为它会阻止其他意外的精度问题。
您必须验证该值是否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!
要查看 x 是否包含 1024(或更大),您可以使用:any(x>=1024)