2015-04-23 108 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