如何在MATLAB中使用deval和dde23来解决这个错误?

euoag5mw  于 6个月前  发布在  Matlab
关注(0)|答案(1)|浏览(70)

我试图绘制一个图之间的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);


本教程中的Example 2是我所指的,但即使是该代码也会出现错误。可能是因为这里使用的旧的ddeval已经变成了deval。我对MATLAB相当陌生,不知道如何解决这个错误。如果有人可以帮助,我将非常感激。

vsikbqxv

vsikbqxv1#

导致错误的原因是

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))


注意,在您链接到的示例中,解是在时间间隔[0,100]上计算的,而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);

相关问题