2015-11-30 170 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)'。這會給你預期的結果。 –