"COMM" : Commande et Observation Mono- et Multivariables

by

 

27 Jun 2005 (Updated )

Companion software to french book "Commande et estimation multivariables"

saisievalpro.m
function [polrac] = saisievalpro(nval,Te,maxident)
%
% Saisie de valeurs propres ("ples"), relles ou complexes conjugues, continues
%
%  [polrac] = saisievalpro(nval,Te,maxident)  procde  la saisie d'un nombre nval
%  de valeurs propres continues, qui sont ensuite converties en valeurs propres 
%  discrtes si une priode d'chantillonnage strictement positive est transmise
%  par l'argument Te.
%  Les valeurs propres saisies ou leurs quivalents discrets sont renvoys par le
%  vecteur polrac.
%  Le paramtre d'entre maxident arrte la saisie si un nombre maxident
%  de valeurs identiques saisies  la suite est dpass, et oblige  choisir une
%  autre valeur.
%
%  Auteur : E. Ostertag  27 juin 2005
%  Dernire mise  jour : 5 dcembre 2010
%

ni = nargin;
if ni < 3,
	maxident = nval;
end
disp('Saisie des valeurs propres continues souhaites');
ivp = 1;
if nval == 1
	lambdades(ivp) = input([' Valeur propre (unique) dsire (obligatoirement relle) = ']);
else
	while ivp <= nval,
		if ivp <= nval-1,
			lambdades(ivp) = input([' Valeur propre dsire n' num2str(ivp) ' (relle ou complexe) = ']);
		else
			lambdades(ivp) = input([' Valeur propre dsire n' num2str(ivp) ' (relle uniquement) = ']);
			if ~isreal(lambdades(ivp)),
				lambdades(ivp) = real(lambdades(ivp));
				disp(['			Convertie en valeur relle : ' num2str(lambdades(ivp)) ]);
			end
		end
		if ivp == 1,
			nident = 1;
		else
			if lambdades(ivp) == lambdades(ivp-1),
				nident = nident+1;
			else
				nident = 1;
			end
		end
		if nident > maxident,
			while lambdades(ivp) == lambdades(ivp-1),
				disp('Nombre de valeurs identiques > nombre permis : resaisissez --->'); beep;
				lambdades(ivp) = input([' Valeur propre dsire n' num2str(ivp) ' = ']);
			end
			nident = 1;
		end
		if isreal(lambdades(ivp)),
			ivp = ivp+1;
		else
			lambdades(ivp+1) = conj(lambdades(ivp));
			disp(['Valeur propre dsire n' num2str(ivp+1) ' (complexe conjugue) = ' ....
						 num2str(lambdades(ivp+1))]);
			ivp = ivp+2;
		end
	end
end
if ni > 1 && Te > 0,
	lambdades = exp(lambdades*Te);
end
polrac = lambdades;

Contact us