我正在使用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完全不同。
答案 0 :(得分:1)
与在时间游行中实现ODE Suite的dense 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
值。