File: systems.sci

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (134 lines) | stat: -rw-r--r-- 3,173 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
function []=systems()

// Copyright INRIA

function [xdot]=bioreact(t,x)
//[xdot]=bioreact(t,x)
// modele de bioreacteur
//   x(1): concentration de biomasse
//   x(2): ''            de sucre
//!
xdot(1)=mu_td(x(2))*x(1)- debit*x(1);
xdot(2)=-k*mu_td(x(2))*x(1)-debit*x(2)+debit*x2in;


function [y]=mu_td(x)
//[y]=mu_td(x)
// mu : taux specifique de croissance
//!
y=x/(1+x);



function [xdot]=compet(t,x,u)
//[xdot]=compet(t,x,[u]) u est optionnel
// Un modele de competition
// x(1),x(2) deux populations vivant sur une meme ressource
// 1/u est le niveau de la ressource (vaut 1 par defaut)
// ex : deux souches de levure
// ex : des crustaces sur une algue
//!
[lhs,rhs]=argn(0);
if rhs==2,u=1,end
xdot=0*ones(2,1);
xdot(1) = ppr*x(1)*(1-x(1)/ppk) - u*ppa*x(1)*x(2) ,
xdot(2) = pps*x(2)*(1-x(2)/ppl) - u*ppb*x(1)*x(2) ,


function [f,g,h,linsy]=lincomp(ue)
//[f,g,h,linsy]=lincomp(ue)
// fournit les matrices f,g et h du modele compet avec sortie
// linearise  autour du point d'equilibre donne par equilpp(ue).
// la sortie y est la premiere composante x(1) du systeme.
// linsy : est une macro qui donne la dynamique du syt\`eme
// lin\'eaire tangent
//!
[f,g,linsy]=tangent('compet',equilcom(ue),ue);
h=[1,0];



function [xe]=equilcom(ue)
//[xe]=equilcom([ue])
// calcule un point d'equilibre du systeme compet
// pour un niveau de ressource ue  (vaut 1 par defaut)
//!
[lhs,rhs]=argn(0);
if rhs==0,ue=1,end
mat=[  ppr/ppk , ue*ppa; ue*ppb , pps/ppl ]
cte=[ppr;pps ]
xe= inv(mat)*cte;


function [xdot]=cycllim(t,x)
//[xdot]=cycllim(t,x)
//-----------------------------------
// xdot=a*x+qeps(1-||x||**2)x
//------------------------------------
//!
xdot= [ 0 ,-1 ; 1 , 0]*x+ qeps*(1-(x'*x))*x;



function [xdot]=linear(t,x)
//[xdot]=linear(t,x)
// linear : a linear system 
// alin must be set as a global variable before calling ode.
//!
xdot=alin*x,



function [xdot]=linper(t,x)
//[xdot]=linper(t,x)
//-----------------------------------
// systeme lineaire avec perturbation
// quadratique
//------------------------------------
//!
xdot= alin*x+(1/2)*qeps*[(x')*q1linper*x;(x')*q2linper*x]+rlinper



function [xdot]=pop(t,x)
//[xdot]=pop(t,x)
// dynamique de la population de poissons
//!
xdot= 10*x*(1-x/K)- peche(t)*x



function [xdot]=p_p(t,x,u)
//[xdot]=p_p(t,x,[u])
// Un modele proie-predateur avec insecticide
// x(1) : la proie (insecte nuisible)
// x(2) : le predateur (un gentil insecte)
// u    : taux de mortalite du a l'insecticide
//        qui agit a la fois sur la proie et le predateur
//        par defaut u=0 (pas d'insecticide)
//!
[lhs,rhs]=argn(0);
if rhs==2,u=0,end
xdot(1) = p_ppr*x(1)*(1-x(1)/p_ppk) - p_ppa*x(1)*x(2) - u*x(1);
xdot(2) = -p_ppm*x(2)             + p_ppb*x(1)*x(2) - u*x(2);


function [xe]=equilpp(ue)
//[xe]=equilpp([ue])
// calcule un point d'equilibre xe du systeme p_p
// pour la commande constante ue a choisir lors de l'appel de la macro
//  ue=0 par defaut
//!
[lhs,rhs]=argn(0);if rhs==0,ue=0,end
xe(1) =  (p_ppm+ue)/p_ppb;
xe(2) =  (p_ppr*(1-xe(1)/p_ppk)-ue)/p_ppa;


function [xdot]=lincom(t,x,k)
// systeme lineaire commande par
// feedback lineaire d'etat (u=-k*x)
//!
xdot= lic_a*x +lic_b*(-k*x);