"COMM" : Commande et Observation Mono- et Multivariables

by

 

27 Jun 2005 (Updated )

Companion software to french book "Commande et estimation multivariables"

Roppenecker.m
function [L,lambdaBF] = Roppenecker(A,B,Lambda,Vp,lambdades,Te)
%
% Synthse d'une commande ou d'un observateur multivariable par la formule de
% Roppenecker, ou	"Synthse modale complte"
%
%  [L,lambdaBF] = Roppenecker(A,B,Lambda,Vp,[],Te) procde  la saisie des valeurs
%  propres continues dsires pour le systme boucl, et renvoyes en sortie dans
%  le vecteur lambdaBF. Aucune valeur propre ne peut avoir un ordre de multiplicit
%  suprieur au nombre d'entres p ;
%     si Te = 0, les valeurs propres saisies sont renvoyes sans modification ;
%     si Te > 0, les valeurs propores saisies sont converties en valeurs discrtes
%     (priode Te) par exp(lambda*Te), avant d'tre renvoyes.
%  La matrice Lambda en entre est la matrice diagonale des valeurs propres de A, donc du
%  systme ouvert, pour comparaison avec les valeurs propres imposes au systme boucl.
%  Le programme demande ensuite d'introduire les vecteurs paramtres invariants,
%  en liaison ou non avec le choix des vecteurs propres du systme boucl, puis 
%  calcule selon la formule de Roppenecker la matrice de retour d'tat L qui confre
%  les valeurs propres saisies  la matrice A-B*L.
%
%  [L,lambdaBF] = Roppenecker(A,B,Lambda,Vp,lambdades,Te) fait la mme chose, sauf
%  que les valeurs propres dsires pour le systme boucl sont transmises en entre
%  par le vecteur lambdades. Il n'y a donc plus de saisie de celles-ci.
%
%  Vp estla matrice dont les colonnes sont les vecteurs propres du procd,
%  pour le cas o l'une des valeurs propres souhaites est identique 
%  l'une de celles du procd (valeur propore non dplace).
%  
%  N.B.: ce programme est aussi utilis par dualit pour le calcul
%  d'observateurs (identit ou d'ordre rduit).
%
%  Utilise : saisievalpro, ChoixVpropVparam, arrondi_matrice.
%
%  Auteur : E. Ostertag  27 juin 2005
%  Dernire mise  jour : 11 aot 2010
%

n = size(A,1); p = size(B,2);
%
% 1. Choix des valeurs propres dsires pour le systme boucl, sauf si elles figurent dans les
%    paramtres d'entre
%
ni = nargin;
saisie = 0;
if ni<5,
	saisie = 1;
elseif isempty(lambdades),
	saisie = 1;
end
if saisie == 1,
	disp('N.B.: Ordre de multiplicit des valeurs propres choisies <= nombre des entres')
	disp(['Introduisez n=' num2str(n) ' valeurs propres pour le systme boucl ===>']);
	lambdades = saisievalpro(n,0,p);
end
if ni == 6 && Te > 0,
	lambdades = exp(lambdades*Te);
end
%
% 2. Choix des vecteurs paramtres et application de la formule
%
V = zeros(n);
while det(V) == 0,
	[V, P, choix, kident] = ChoixVpropVparam(A,B,n,p,Lambda,lambdades);
	if choix == 1,
		for i = 1:n,
			if kident(i) == 0;
				V(:,i) = inv(A-lambdades(i)*eye(n))*B*P(:,i);
			else
				P(:,i) = 0;	V(:,i) = Vp(:,kident(i));
			end
		end
	end
%
% 3. Vrification de l'indpendance linaire des nouveaux vecteurs propres, vRi :
%
	if det(V) == 0;
		disp('Les vecteurs vLi = inv(A-lambdades(i)*I)*B*pi doivent tre lint. indpendants');
		disp('Recommencez en choisissant des pi diffrents'); beep;
	else
		V, P
	end
end
Lroppenecker = P*inv(V);
L = arrondi_matrice(real(Lroppenecker));
lambdaBF = lambdades;

Contact us