2015-11-30 141 views
1

我想插入一个向量的值,但我似乎无法理解如何正确使用interp1.m。interp1不会返回预期的结果

这就是我期待:

a=[1 0 2 0 3 0 4]; 
//Use of interp1.m 
Output=[1 1.5 2 2.5 3 3.5 4]; 

a=[1 0 0 2 0 0 3 0 0 4]; 
//Use of interp1.m 
Output=[1 1.32 1.65 2 2.31 2.64 3 3.3 3.63 4]; 

回答

5

假设你总是希望填补你的矢量的零个值:

a = [3 0 6 0 5 0 4] 

mask = logical(a); 
nvec = 1:numel(a); 
a(~mask) = interp1(nvec(mask),a(mask),nvec(~mask)) 

a = 

    3.0000 4.5000 6.0000 5.5000 5.0000 4.5000 4.0000 

假设你想拉伸您的载体按一定的系数:

a = [3 6 5 4] 
stretchfactor = 2; 
a = interp1((1:numel(a))*stretchfactor - 1, a, 1:numel(a)*stretchfactor - 1) 

a = 

    3.0000 4.5000 6.0000 5.5000 5.0000 4.5000 4.0000 
3

这是我想你的意思是使用interp1

a=[1 2 3 4]; 
N=7; % # of points to interpolate between a(1)=1 and a(end)=4 
xi=linspace(a(1),a(end),N); % the new intep x-grid 
ai=interp1(1:numel(a),a,xi) 

作为一个侧面说明,如果你只是想有任意两个值之间的线性间隔,只需使用linspace,例如:

linspace(1,4,10) 


ans = 

1.0000 1.3333 1.6667 2.0000 2.3333 2.6667 3.0000 3.3333 3.6667 4.0000 

零点是你进入真正的价值,如果你插在他们身上你“力”的结果通过他们...

+0

这有帮助,但如果矢量不是线性的呢?例如,我尝试了'a = [3 6 5 4]',输出是'[3 3.167 3.34 3.50 3.67 3.84 4]',但我想要'[3 4.5 6 5.5 5 4.5 4]' – user2952272

+1

我认为@bla的解决方案应该设置'xi = linspace(1,numel(a),n)'。这会给你预期的结果。 –