2015-04-23 283 views
1

我試圖用interp1來解決我的問題的頌歌...... 我想以前的數據插值到另一個公式......下面 是代碼...重採樣使用ODE45數據插值在Matlab

function dxdt = newforced(t,x1,d) 
dxdt_1 = x1(2); 
dxdt_2 = -100*x1(2)-250000*x1(1)+(25000*(d^3)); %data should be interpolated at d 
dxdt = [dxdt_1;dxdt_2]; 

tspan=[0:0.1:100]; 
d=x(:,1); %x is data sampling from previous ode 
initial_x1=0; 
initial_dxdt=0; 
f=interp1(t,d,x); 
[t,x1]=ode45(@newforced,tspan,[initial_x1 initial_dxdt]); 
figure 
plot(t,x,':') 
figure 
plot(d,f) 

問題:我有2個變量(d和x(:,1)),我想重新採樣一個匹配另一個的長度。

以上驗證碼不工作儘可能多的錯誤彈出... 有誰能夠請指正 感謝

+0

你只是試圖重新採樣數據,以適應一定的長度? – krisdestruction

+0

yup resample data,but from other ode –

+0

所以,如果我正確地理解了你,你有2個變量,你想重新取樣一個匹配另一個的長度?如果是這樣,哪兩個變量有問題? – krisdestruction

回答

0

這裏有一個玩具的例子。只需將xy分別替換爲dx(:,1)即可。

% Example Data 
x = 0:9; 
y = 1:0.1:10; 

% Check if y is longer 
if length(x) < length(y) 
    x = interp1(x, linspace(1, length(x), length(y))); % Resample x 
else 
    y = interp1(y, linspace(1, length(y), length(x))); % Resample y 
end 

所以linespace將生成具有分割長度(y)的號碼1和長度(X)之間indicies。

本質上interp1將重新採樣變量到另一個的長度。 if語句將檢查哪一個需要重新採樣。

+1

謝謝krisdestruction –

+0

@MohamadAmirul如果這對你有效,你可以接受它作爲答案使用複選標記? – krisdestruction