Решение DDE в матричной форме с использованием Matlab

Мне нужно решить следующее уравнение с задержкой:

Xdot = A*x(t) + B*U(t) + E(t)
U(t) = K*S*x(t-0.02) or U(t) = K*S*x(t-0.02)/alpha

в котором:

A: 6*6 matrix 
K and alpha are scalar
S: 1*6 vector
E and U and x and B: 6*1 vectors.

Я использую следующий код для решения уравнения:

for i = 2:2688 
if  %(first condition ok)
    sol = dde23(@Insectorforce,0.02,history(:,i-1),[time(i-1) time(i)]);
else
    sol = dde23(@Outsectorforce,0.02,history(:,i-1),[time(i-1) time(i)]);                                                                                                          
end
x(:,i)=sol.x
history(i+2) = x(:,i); 
end

со следующими функциональными файлами:

function xdot = Insectorforce(t,y,z,A,B,S,E,K,Beta,P)
  xdot = (A*y) - ((B*K*S/alpha)*(z)) + E;
end

а также

function xdot = Outsectorforce(t,y,z,A,B,S,E,K)
  xdot = (A*y) - ((B*K*S*z) + E;
end

Однако я получаю следующую ошибку:

Error using Outsectorforce (line 2)
Not enough input arguments.

Error in dde23 (line 217)
f0 = feval(ddefun,t0,y0,Z0,varargin{:});

Error in filename (line 101)
sol = dde23(@Outsectorforce,0.02,history(:,i-1),[time(i-1) time(i)]);

Что не так с моим кодом? У меня нет проблем с размерами, и я решил это уравнение без задержки с ode23, Однако я не могу решить ее, используя dde23 или же ddesd,

1 ответ

Решение

dde23 требует дескрипторов функций с тремя аргументами. Пытаться

sol = dde23(@(t,y,z)(Insectorforce(t,y,z,A,B,S,E,K,Beta,P)),0.02,history(:,i-1),[time(i-1) time(i)]);

а также

sol = dde23((@(t,y,z)(Outsectorforce(t,y,z,A,B,S,E,K)),0.02,history(:,i-1),[time(i-1) time(i)]);

соответственно.

Другие вопросы по тегам