如何在MATLAB中使用带有dde23的deval来避免这个错误



我正试图在我的延迟微分方程的解的k(t(和k(t-1(之间绘制一个图。我正在粘贴代码:

% Defining the variables:
X = 0.2;
M_C = 1.523;
a = 15;
sol = dde23(@(k,t,KL) new_func(k,t,KL,X,M_C,a),1,0.5, [1,10] );
t = linspace(1,10);
p_t = deval(sol,t);
p_lagt = deval(sol,t-1);
% Stability boundary for M/C: 
M_C_Stab = 1.523;
function dk = new_func(k,t,KL,X,M_C,a)
dk = X*((1-M_C*(1-KL^a))/(M_C*(1-KL^a)))*k;
end

这是我得到的错误:

>> new_defined_function
Error using deval (line 132)
Attempting to evaluate the solution outside the interval [1.000000e+00, 1.000000e+01] where it is defined.

Error in new_defined_function (line 12)
p_lagt = deval(sol,t-1);

本教程中的示例2就是我所指的,但即使是该代码也会出现错误。也许是因为这里使用过的古老的迪瓦尔已经变成了迪瓦尔。我是MATLAB的新手,不知道如何解决这个错误。如果有人能帮忙,我将不胜感激。

错误是由引起的

p_lagt = deval(sol,t-1)

t-1等效于linspace(0,9),因此试图在时间0评估解会导致错误,因为解是在时间间隔[1,10]上计算的。

您可以通过更改p_lagt来修复错误,以便在[1,10]中包含的间隔上对其进行评估,例如

p_lagt = deval(sol,max(t-1,1))

请注意,在您链接到的示例中,解决方案是根据时间间隔[0100]计算的,而t = linspace(2,100)。要在代码中镜像此内容,请尝试

sol = dde23(@(k,t,KL) new_func(k,t,KL,X,M_C,a),1,0.5, [0,10] ); % note change in time interval
t = linspace(1,10);
p_t = deval(sol,t);
p_lagt = deval(sol,t-1);

相关内容

  • 没有找到相关文章

最新更新