私はMatlabとプログラミング全般にかなり慣れていませんが、このエラーメッセージは私を打ち負かしました. 簡略化されたコードは次のとおりです。
Lpi = .05;
Dpi = .01;
LpD = [.1, 06];
LpI = [.9, 14];
DpR = [.4, 06];
DpI = [.6, 08];
IpH = [01, 30];
syms H(t) L(t) D(t) R(t) I(t)
HtL =@(t) H(t) * (Lpi*L(t) + Dpi*D(t));
LtD =@(t) LpD(1)*HtL(t-LpD(2));
LtI =@(t) LpI(1)*HtL(t-LpI(2));
DtR =@(t) DpR(1)*LtD(t-DpR(2));
DtI =@(t) DpI(1)*LtD(t-DpI(2));
ItH =@(t) IpH(1)*(LtI(t-IpH(2))+DtI(t-IpH(2)));
odea = diff(H, t) == ItH(t) - HtL(t);
odeb = diff(L, t) == HtL(t) - LtD(t) - LtI(t);
odec = diff(D, t) == LtD(t) - DtR(t) - DtI(t);
oded = diff(R, t) == DtR(t);
odee = diff(I, t) == LtI(t) + DtI(t) - ItH(t);
odes = [odea;odeb;odec;oded;odee];
S = dsolve(odes);
目的や操作について疑問がある場合は、以下で説明します。
微分方程式が宣言されると、Matlab のワークスペースが次の形式であることを示しているため、それらが実際に微分方程式であることを理解しています。
val(t) =
diff(H(t), t) == (24*H(t - 44)*(D(t - 44)/100 + L(t - 44)/20))/25 - H(t)*(D(t)/100 + L(t)/20)
(これは odea の場合です。残りは似ていますが長いので含めません)
dsolve を呼び出すと、次のエラーが表示されるため、問題が発生します。
Error using mupadengine/feval_internal (line 172)
Expecting an ODE in the specified variable.
Error in dsolve>mupadDsolve (line 328)
T = feval_internal(symengine,'symobj::dsolve',sys,x,options);
Error in dsolve (line 183)
sol = mupadDsolve(args, options);
Error in main (line 50)
S = dsolve(odes);
私が理解しているように、関数 dsolve の教科書の使用法 (MathWorks の「微分方程式を解く」ページによると) であるため、このエラーに非常に混乱しています。
よろしくお願いします。