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);
|