使用Matlab中的ode45数据插值重新采样

时间:2015-04-23 03:19:33

标签: matlab interpolation ode resampling

我试图用interp1来解决我的颂歌问题...... 我想将以前的数据插入到另一个方程中...... 以下是代码......

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)),我想重新采样一个以匹配另一个的长度。

上面的

代码没有弹出多少错误...... 任何人都可以纠正我 感谢

1 个答案:

答案 0 :(得分: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将生成1和长度(x)之间的长度(y)分割数的指标。

基本上interp1会将变量重新采样到另一个变量的长度。 if语句将检查哪一个需要重新采样。