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

Matlab interp1返回x范围内最后一个值的NaN,matlab,interpolation,Matlab,Interpolation,我有一个关于MATLAB函数的问题。让x在[1,1024]范围内。但是,以下方面: yi = interp1(x, y, 1024); 返回NaN 我已经检查了我的程序好几次,似乎没有什么问题,但结果对我来说仍然很奇怪。如果有人能提供帮助,我将不胜感激。您必须验证输入x中是否存在1024值 比如说 >> x = 1: 2 : 1024; 似乎它包含1024个,但它没有 >> x 1 3 5 ... 1019 1021 1023 不 如果要确保1024确实位于

我有一个关于MATLAB函数的问题。让
x
在[1,1024]范围内。但是,以下方面:

yi = interp1(x, y, 1024);
返回
NaN


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

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

比如说

>> x = 1: 2 : 1024;
似乎它包含1024个,但它没有

>> x

   1 3 5 ... 1019 1021 1023

如果要确保1024确实位于
x
,可以使用
linspace

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

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

比如说

>> x = 1: 2 : 1024;
似乎它包含1024个,但它没有

>> x

   1 3 5 ... 1019 1021 1023

如果要确保1024确实位于
x
,可以使用
linspace

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

我很确定你没有得到1024,而是得到了一些值,不太像1023.9999999945435

试试这个非常做作的例子:

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,而是某个值不太像1023.999999945435

试试这个非常做作的例子:

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

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

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

你能发布你的
x
y
向量吗?是否存在重复的
x
值?它们是单调递增的吗?x的值是“1024”,还是以较低的值结束?除非选择了特定的方法,否则interp不能在x范围之外进行交互。@Dan是的,x是单调递增的。x=1.0e+003*[0.0010 0.0030 0.0050..1.0240]顺便说一下,x有638个元素。单调不是单调的。我想要得到的是xi=1,2,3,…,1024x=1.0e+003*[0.0010.0030.0050]==1.35]的值yi。。见谢的comment@Adiel是的,x在1024处结束。你能发布你的
x
y
向量吗?是否存在重复的
x
值?它们是单调递增的吗?x的值是“1024”,还是以较低的值结束?除非选择了特定的方法,否则interp不能在x范围之外进行交互。@Dan是的,x是单调递增的。x=1.0e+003*[0.0010 0.0030 0.0050..1.0240]顺便说一下,x有638个元素。单调不是单调的。我想要得到的是xi=1,2,3,…,1024x=1.0e+003*[0.0010.0030.0050]==1.35]的值yi。。见谢的comment@Adiel是的,x以1024结尾。或者,您可以指定外推-
yi=interp1(x,y,1024,method,'extrap')或者,您可以指定外推-
yi=interp1(x,y,1024,method,'extrap')