Matlab interp1返回x范围内最后一个值的NaN
我有一个关于MATLAB函数的问题。让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确实位于
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')代码>