如何在固定时间步后强制dde23函数生成输出

时间:2017-09-05 23:25:19

标签: matlab ode timedelay

我正在使用MATLAB dde23函数求解延迟微分方程。我想在第二个dde23函数中使用第一个dde23函数生成的输出。这是代码

tspan=[0:1:1440]';
x0=1.7;

%1st function 
% options = ddeset('OutputFcn',@odeplot,'OutputSel',1);
sol = dde23(@dd,70,x0,tspan,options);
y_obs=sol.y; 
tspan_new=sol.x;

%{2nd function 
x1=[x0 ; 0.1; 0.01; 0.01];
final_sol = dde23(@ddc,70,x1,tspan,[],y_obs);
y_fit=final_sol.y;
tdata=final_sol.x;
%}

我作为第一个函数的输入生成的时间序列的大小为1441,但tspan_new和y_obs的大小为212(从dde23输出生成)。我无法理解为什么尺寸会发生变化。 是否可以在输入中提供的每个时间点输出y_obs,即在这种情况下是否可以获得长度为1441的y_obs? 由于输出的大小不同,我无法在第二个函数中使用y_obs向量。 y_fit和tdata的大小与y_obs和tspan完全不同。

1 个答案:

答案 0 :(得分:1)

与在时间游行中实现ODE Suitedense output routine不同,dde23需要明确的帖子 - deval才能完成您所追求的目标:

tspan=[0:1:1440]';
x0=1.7;

%1st function 
sol   = dde23(@dd,70,x0,tspan([1,end]),options);
y_obs = deval(sol,tspan);

此函数在其动态时间步长例程生成的网格上使用局部Hermite三次插值,以逼近请求的y值的t值。