%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Programme lq_ltr.m %%% %%%%%%%%%%%%%%%%%%%%%%%%%% clear all; close all % Définition d'une représentation d'état du système A=input('matrice A du système?') B=input('matrice B du système?') C=input('matrice C du système?') E=input('matrice E du système?') [n,m]=size(B); [q,n]=size(C); [p,q]=size(E); % Représentation d'état du système augmenté Aa=[A zeros(n,p);E*C zeros(p,p)]; Ba=[B;zeros(p,m)]; % Définition de A_alpha alpha_c=input('Quel est le paramètre alpha_c choisi?'); A_alpha=Aa+alpha_c*eye(n+p,n+p); % Matrices de pondération pour la commande diag_R=input('Quels poids pour la matrice R? (donner un vecteur ligne contenant les m éléments diagonaux de R)') diag_Q=input('Quels poids pour la matrice Q? (donner un vecteur ligne contenant les n+p éléments diagonaux (éventuellement nuls) de Q)') R=diag(diag_R); Q=diag(diag_Q); % Calcul de la commande [Ka,P] = lqr(A_alpha,Ba,Q,R); Kp=Ka(1:m,1:n); Ki=Ka(1:m,n+1:n+p); % Matrices de pondération pour l'observateur alpha_o=input('Quel est le paramètre alpha_o choisi?'); rt=input('Quels poids pour la matrice Rtilde? (donner un vecteur ligne contenant les m éléments diagonaux de R)') q0t=input('Quels poids pour la matrice Q0tilde? (donner un vecteur ligne contenant les n+p éléments diagonaux (éventuellement nuls) de Q)') Rt=diag(rt); Q0t=diag(q0t); Q_alpha=Q0t+alpha_o^2*B*B'; % Calcul de l'observateur [Lt,Pt] = lqr(A',C',Q_alpha,Rt); Kt=Lt'; % Tracé des diagrammes de Bode multivariables et calcul des marges de % stabilité [Mmi,Mmo,Mmci,Mmco]=calcul_marges_2(A,B,C,E,Kp,Ki,Kt,n,m,p,q)