| ChoixVpropVparam(A,B,n,p,Lambda,lambdades)
|
function [V, P, choix, kident] = ChoixVpropVparam(A,B,n,p,Lambda,lambdades)
%
% Saisie des vecteurs paramtres et des vecteurs propres
%
% [V, P] = ChoixVpropVparam(A,B,n,p,Lambda,lambdades) compare en premier lieu
% les valeurs propres imposes au systme boucl, transmises en entre par le
% vecteur lambdades, aux valeurs propres de la boucle ouverte (matrice A),
% transmises en entre par la matrice diagonale Lambda. Deux cas possibles :
%
% * cas 1 : il n'y a aucune valeur propre commune aux systme ouvert et
% boucl ; la saisie de vecteurs paramtres du systme boucl est alors possible soit
% compltement au hasard, soit en liaison avec le choix des vecteurs propres
% du systme boucl (choix "cibl") ; dans ce cas, le programme renvoie
% choix = 0 et le vecteur kident = 0;
%
% * cas 2 : une valeur propre au moins est commune ; la saise des vecteurs
% paramtres au hasard est la seule possible ; le programme renvoie alors
% choix = 1, et le vecteur kident qui contient dans son lment i, qui correspond
% la ime valeur propre impose au systme boucl, le numro j de la premire
% valeur propre de A qui est trouve identique cette valeur.
%
% Auteur : E. Ostertag 27 juin 2005
%
% 1. Recherche des valeurs propres du systme boucl qui sont identiques une valeur
% propre de la boucle ouverte
%
choix = 0;
for i=1:n,
for j=1:size(Lambda,1),
if lambdades(i) == Lambda(j,j),
kident(i) = j; choix = 1; break
else,
kident(i) = 0;
end
end
end
%
% 2. Si valeurs propres du systme boucl toutes diffrentes des valeurs propres
% du procd, possibilit de choix cibl des vecteurs propres et paramtres
%
if choix == 0,
choix = input('Choix des vecteurs paramtres : 1 = au hasard; 2 = cibl ; Votre choix --> ');
if isempty(choix),
choix = 1;
end
end
if choix == 1,
disp(['Introduisez n = ' num2str(n) ' vecteurs paramtres de dimension p = ' num2str(p) ' ===>']);
for i = 1:n,
pi = zeros(p+1,1);
while length(pi) ~= p,
pi = input([' Vecteur paramtre p' num2str(i) ' = ']);
if length(pi) == p,
if size(pi,1) == 1,
P(:,i) = pi';
else,
P(:,i) = pi;
end
else,
disp(['Resaisissez ce vecteur (dimension ' num2str(p) ')']); beep;
end
end
end
V = zeros(n);
else
disp('Choix cibl de certaines composantes des vecteurs propres et vecteurs paramtres')
nstrg = num2str(n); pstrg = num2str(p);
for i=1:n,
M = [A-lambdades(i)*eye(n) -B]; N = zeros(n,1);
rM = rank(M); jmax = n+p-rM;
disp(['Paire vecteur propre/vecteur paramtre associe lambda = ' ...
num2str(lambdades(i)) ' : ' num2str(jmax) ' inconnues choisir arbitrairement :']);
disp([' Vect. propre (' nstrg ' composantes) : inconnues 1 ' nstrg ' ; '...
'vect. paramtre (' pstrg ' composantes): inconnues ' num2str(n+1) ' ' num2str(n+p)]);
for j=1:jmax
ni(j) = input(' Inconnue numro --> ');
vi(j) = input(' Valeur arbitraire choisie --> ');
N = N - M(:,ni(j)-j+1)*vi(j); M(:, ni(j)-j+1) = [];
end
sol = inv(M)*N;
[Y,I] = sort(ni);
for j=1:jmax
sol = [sol(1:Y(j)-1); vi(I(j)); sol(Y(j):end)];
end
V(:,i) = sol(1:n);
P(:,i) = sol(n+1:end);
end
end
|
|