【问题标题】:Resampling using Interpolation of ode45 Data in Matlab在 Matlab 中使用 ode45 数据插值进行重采样
【发布时间】:2015-07-01 00:35:58
【问题描述】:

我尝试使用 interp1 来解决我的 ode 问题... 我想将以前的数据插入另一个方程...... 以下是代码...

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

上面的代码不起作用,因为弹出了很多错误... 谁能纠正我 谢谢

【问题讨论】:

  • 您只是想重新采样数据以适应特定长度吗?
  • 是的,重新采样数据,但来自另一个 ode
  • 所以如果我理解正确的话,你有 2 个变量,你想重新采样一个以匹配另一个的长度?如果是,那两个变量有问题?
  • 这两个变量是d和x(:,1) ....
  • 请验证我的解决方案:)

标签: matlab interpolation ode resampling


【解决方案1】:

这是一个玩具示例。只需将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 和 length(x) 之间的索引,其中 length(y) 分割数。

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

【讨论】:

  • @MohamadAmirul 如果这对您有用,您能否使用复选标记接受它作为答案?
猜你喜欢
  • 2012-03-10
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多