如何在 MATLAB 中使用带有 dde23 的 deval 解决此错误?
How can I get around this error using deval with dde23 in MATLAB?
我正在尝试绘制延迟微分方程解的 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 的新手,不知道如何解决这个错误。如果有人能提供帮助,我将不胜感激。
错误是由
引起的
p_lagt = deval(sol,t-1)
t-1
等同于 linspace(0,9)
,因此尝试计算时间 0 的解会导致错误,因为解是在时间间隔 [1,10].[=17 上计算的=]
您可以通过更改 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);
我正在尝试绘制延迟微分方程解的 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 的新手,不知道如何解决这个错误。如果有人能提供帮助,我将不胜感激。
错误是由
引起的p_lagt = deval(sol,t-1)
t-1
等同于 linspace(0,9)
,因此尝试计算时间 0 的解会导致错误,因为解是在时间间隔 [1,10].[=17 上计算的=]
您可以通过更改 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);