function [sys,x0,str,ts] = modele(t,x,u,flag)
% Exemple de S-fonction, à utiliser comme squelette.
% Cette fonction réalise un non-minimum de phase.
% Aller voir dans la doc pour les commentaires plus approfondis.
%
% Appel des fonctions suivant le "flag".
%
switch flag,

  case 0
    [sys,x0,str,ts]=mdlInitializeSizes(); % Initialisation

  case 1
    sys = mdlDerivatives(t,x,u); % Calcule les dérivées

  case 3
    sys = mdlOutputs(t,x,u); % Calcule les sorties
  
  case { 2, 4, 9 } % Cela ne doit jamais arriver, sauf erreur d'initialisation...
    sys = [];
  otherwise
    error(['Unhandled flag = ',num2str(flag)]); % Erreur de Simulink ?
end
% Fin de la fonction principale.
%==============================================================
% mdlInitializeSizes
% Retourne les dimensions, conditions initiales et temps d'échantillonage.
% Cette fonction n'est appellée qu'une fois par Simulink en début de
% simulation.
%==============================================================
%
function [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D)
%
% Dimensions
%
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 0;     % La sortie ne dépend pas algébriquement de l'entrée 
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
%
% Conditions initiales
%
x0 = zeros(2,1);
%
% Voir la doc...
%
str = [];
%
% Voir la doc...
%
ts = [0 0];
% Fin de mdlInitializeSizes.
%
%==============================================================
% mdlDerivatives
% Retourne les dérivées
%==============================================================
function sys = mdlDerivatives(t,x,u,A,B,C,D)
sys = [ -3*u(1)-5*x(1) , u(1)-x(2) ];
% Fin de mdlDerivatives.
%
%==============================================================
% mdlOutputs
% Return les sorties
%==============================================================
%
function sys = mdlOutputs(t,x,u,A,B,C,D)
sys = x(1)+x(2);
% Fin de mdlOutputs.