bug 3362 fixed
[scilab.git] / scilab / modules / cacsd / demos / tracking / track.dem.sce
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 //
5 // This file is distributed under the same license as the Scilab package.
6 //
7
8 mode(1)
9 rand('normal')
10 // Define the plant
11 nx=5;ny=1;nu=3;
12 Plant=ssrand(ny,nu,nx);
13 J=rand(Plant(5));Plant(5)=0*J;
14 [F,G,H,J]=Plant(2:5);
15
16 // define state space model of the Signal to track
17 nw=4;nuu=2;
18 A=rand(nw,nw);
19 A=A-maxi(real(spec(A)))*eye(A); 
20 B=rand(nw,nuu);
21 C=2*rand(ny,nw);
22 D=0*rand(C*B);
23 xx0=0*ones(nw,1);
24 Model=syslin('c',A,B,C,D,xx0);
25
26 // Input to Model (t is a vector), nuu components
27 deff('[ut]=uu(t)','ut=[sin(3*t);cos(0.5*t)]');
28
29 // Compute Signal to track
30 dt=0.05;tmax=60;
31 instants=0:dt:tmax;
32 totrack=flts(uu(instants),dscr(Model,dt));    //Signal
33
34 my_handle             = scf(100001);
35 clf(my_handle,"reset");
36 plot2d(instants',totrack');
37
38 halt();
39
40 clf(my_handle,"reset");
41
42 //
43 [L,M,T]=gfrancis(Plant,Model);
44
45 //    Stabilizing the plant
46 K=-ppol(F,G,-0.3*ones(1,nx));
47
48 // Bigsyst= closed loop system: um --> [yplant;ymodel]. 
49 // full state gain is [K, L - K*T] * (xplant, xmodel) + M * umodel
50 BigA=[F+G*K,G*(L-K*T);
51       0*ones(nw,nx),A];
52 BigC=[H+J*K,J*(L-K*T);
53       0*ones(ny,nx),C];
54 BigB=[G*M;
55        B];
56 BigD=[J*M;
57        D];
58
59 x0=ones(nx,1);
60 BigX0=[x0;xx0];
61 Bigsyst=dscr(syslin('c',BigA,BigB,BigC,BigD,BigX0),dt);
62
63
64 z=flts(uu(instants),Bigsyst);
65 plot2d([instants',instants'],..
66        [totrack(1,:)',z(1,:)'],[1 2],leg='Signal to track@Computed signal');
67 xtitle('tracking');