2017-06-30 2 views
1

J'ai besoin pour résoudre l'équation suivante retardée:Résolution DDE sous forme matricielle en utilisant 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 

dans lequel:

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

J'utilise le code suivant pour résoudre l'équation:

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 

avec les fichiers de fonction suivants:

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

et

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

Cependant, je suis l'erreur suivante:

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

Quel est le problème avec mon code? Je n'ai pas de problème avec les dimensions et j'ai résolu cette équation sans délai avec ode23. Cependant, je n'arrive pas à le résoudre en utilisant dde23 ou ddesd.

Répondre

2

dde23 nécessite des poignées de fonction avec trois arguments. Essayez

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

et

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

respectivement.