function [A,B]=linmod(f,x0,u0)
// Lineaire tangent en (x0,u0) d'un systeme xd=f(0,x,u)

deff('[y,xd]=sys(x,u)','xd='+f+'(0,x,u) ; y=x');
comp(sys);
[A,B,C,D]=lin(sys,x0,u0);

//////////////////////////////////////////////////////////////////////////


function xdot = F4(t,x,u)
// Appel routine en fortran

xdot=fort('f4',t,2,'d',x,3,'d',u,4,'d','out',[12,1],1,'d');

//////////////////////////////////////////////////////////////////////////


function u = CDV(x,v,par)
// Appel routine en fortran

u=fort('cdv',x,2,'d',v,3,'d',par,4,'d','out',[4,1],1,'d');

//////////////////////////////////////////////////////////////////////////


function [u,xi] = boudif(x,z,v)
// Appel routine en fortran

[u,xi]=fort('boudif',x,3,'d',z,4,'d',v,5,'d','out',[4,1],1,'d',[10,1],2,'d');

//////////////////////////////////////////////////////////////////////////


function statedot = F4lin(t,state,wtilde)
// Avion linearise par bouclage

// Etat augmente
x = state(1:12);
z = state(13);

// 1er appel de boudif pour obtenir le  DIFfeo sur la vartie lente
// (vtilde ne sert ici a rien)
[vtilde,xi] = boudif(x,z,wtilde);

// Bouclage lineaire sur le systeme lent linearise (dans les coordonnes xi)
w = -klin_*xi + wtilde;

// 2eme appel de boudif pour obtenir le  BOUclage linearisant la partie lente
[vtilde,xi] = boudif(x,z,w);

// Bouclage linearisant la partie rapide {Commandes De Vol)
v = [vtilde(1:3); z];
u = CDV(x,v,kcdv_)

// Equations d'etat
statedot(1:12) = F4(t,x,u)
statedot(13) = vtilde(4)

//////////////////////////////////////////////////////////////////////////


function [xf,x,tvec] = simul(sys,tf,x0,u)
// Simulation de l'avion

// Fabriauer et compiler un champ autonome
deff( "xd = auto(t,x)", "xd = " + sys + "(t,x," + u + ");" );
comp(auto);

// Integration numerique
tvec = 0:tf/100:tf;
x = ode(x0,0,tvec,1.e-2,1.e-4,auto);
xf = x(:,maxi(size(x)))

//////////////////////////////////////////////////////////////////////////

