2012-12-04 61 views
0

我有一個1x1點矩陣,它指定了驅動器相對於時間的速度。整個操作過程中速度都會改變;這意味着兩點之間的差異正在改變。如何在MatLab中插值

舉一個例子:M = [1; 2; 3; 5; 7; 9; 11; 15; 19]。 (只有這是一個892x1矩陣)

我想使這個矩陣長兩倍(所以改變每個時間步的相對速度),同時保持速度變化的方式。例如:M' = [1; 1.5; 2; 2.5; 3; 4; 5; 6; 7; 8; 9; 10; 11; 13; 15; 17; 19].

在MatLab中有這樣一個簡單的方法嗎?

到目前爲止,我已經嘗試過upsampling(用零填充時間步); interp(與低通插值來填充它。

謝謝!

+0

不知道你是否需要'插值'...聽起來更像'移動' – bonCodigo

回答

4

嘗試

M = [1; 2; 3; 5; 7; 9; 11; 15; 19]; 

% create new time, with twice as many sampling times 
t_new = linspace(1, numel(M), 2*numel(M)-1); 

% interpolate 
Mt = interp1(M, t_new), 

注意interp1也接受額外的參數,如splinepchip,讓你specfify什麼插值內核

或者,您可以使用類似

pp = spline(t, M); % creates a cubic-splines interpolator 
Mt = ppval(pp, t_new) % to evaluate M at all new times t_new 
+0

它的工作!非常感謝!!我現在一直在嘗試不同的方式3個小時。 –

+0

@Acorbe:用戶Amro在SO上創建了一個[用於Matlab語法突出顯示的用戶腳本](https://github.com/amroamroamro/prettify-matlab/raw/master/js/prettify-matlab.user.js)使那些'//'不必要。 –

+0

@RodyOldenhuis,真的很抱歉。我不知道。我回滾更改。 – Acorbe