// système dynamique linéaire de matrice A
function z=systLin(A,x)
  z=A*x;
endfunction
  
  
  // fonction qui construit le portrait de phase  d'un système //dynamqieu linéaire  de matrice A 
  // A: matrice du système
  // dx, dy: pas de discrétisation  de x et de y
  // a,b,c,d : définisent le rectangle [a,b]x[c,d]
  // sur lequel le portrait est calculé
  
function  portraitLin(A, dx, dy, a,b,c,d)
  //définition de la grille
x=a:dx:b
y=c:dy:d
 
  n=length(x)
  m=length(y)
  for i=1:n
    for j=1:m
      //on calcule l'image  d'un point de grille (x(i) y(j))
      z=systLin(A,[x(i);y(j)]);
      // On calcule le vecteur de flot correspondant z= f(x,y)-(x,y)
      Zx(i,j)=z(1,1)-x(i);
      Zy(i,j)=z(2,1)-y(j);
    end
  end
  
  // fonction  de Scilab qui permet de tracer  un flot défini 
  // sur une grille
champ(x,y,Zx,Zy);

endfunction

// fonction qui permet d'afficher le tracé d'une orbite 
//  de condition initiale (x0,y0)
//  de N pas
function plotTrajectLin(A,x0,y0,N,col)
X(1)=x0;
Y(1)=y0;
for k=2:N
  z=systLin(A, [X(k-1);Y(k-1)]);
  X(k)=z(1,1);
  Y(k)=z(2,1);
end

plot(X,Y,col);

endfunction

xset("window", 0);

xtitle("Matrice A. Trajectoires partant des points: (1,1), (-3,2), (0.1,-0.02)",'x','y');
A=[1,-1;1,1];
a=-10;b=10;c=-10;d=10; dx=1;dy=1;
portraitLin(A,dx,dy,a,b,c,d);

xset("thickness",3);
plotTrajectLin(A,1,1,5,'r');
plotTrajectLin(A,-3,2,5,'g');
plotTrajectLin(A,0.1,-0.02,10,'b');
B=[0 -1;1 0]
xset("window", 1);
xtitle ('Matrice B. Trajectoires partant de (1,7), (-3,6), (5, -4)','x','y');
portraitLin(B,dx,dy,a,b,c,d);
xset("thickness",3);
plotTrajectLin(B,1,7,10,'r');
plotTrajectLin(B,-3,6,10,'g');
plotTrajectLin(B,5,-4,10,'b');
C=[1 0;1 0.5]
xset("window", 2);
xtitle ('Matrice C. Trajectoires partant de (3,3), (1.5,-8), (-5, 9)','x','y');
portraitLin(C,dx,dy,a,b,c,d);
xset("thickness",3);
plotTrajectLin(C, 3, 3,15,'r');
plotTrajectLin(C,1.5,-8.,15,'g');
plotTrajectLin(C,-5,9,15,'b');

D=[3 1;1 3]
xset("window", 3);
xtitle ('Matrice D. Trajectoires partant de (-0.5, -0.02), (0.5,0.05), (-0.05, 0.05)','x','y');
portraitLin(D,dx,dy,a,b,c,d);
xset("thickness",3);
//plotTrajectLin(D,0,-0.3,4,'r');
plotTrajectLin(D,-0.5,-0.02,3,'g');
plotTrajectLin(D,0.5,0.05,3,'b');
plotTrajectLin(D,-0.05,0.05,7,'r');



 E=[0.5 0;1 0.5]
xset("window", 4);
portraitLin(E,dx,dy,a,b,c,d);
xset("thickness",4);
xtitle ('Matrice E. Trajectoires partant de (0;-3), (5,-2), (-5, 5), (-2, -7)','x','y');
plotTrajectLin(E,0,-3,10,'r');
plotTrajectLin(E,5,-2,10,'g');
plotTrajectLin(E,-5,5,10,'b');
plotTrajectLin(E,-2,-7,7,'r');


F=[2 0;1 0.5]
xset("window", 5);
xtitle ('Matrice F. Trajectoires partant de (0,-8), (-0.5,-0.2), (0.5, 0.5), (-1,4)','x','y');
portraitLin(F,dx,dy,a,b,c,d);
xset("thickness",3);
plotTrajectLin(F,0,-8,5,'r');
plotTrajectLin(F,- 0.5,- 0.2,5,'g');
plotTrajectLin(F, .5,0.5,5,'b');
plotTrajectLin(F,-1,4,4,'m');



