我试图用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)),我想重新采样一个以匹配另一个的长度。
上面的代码没有弹出多少错误...... 任何人都可以纠正我 感谢
答案 0 :(得分:0)
这是一个玩具示例。只需将x
和y
替换为d
和x(:,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语句将检查哪一个需要重新采样。