next up previous
suivant: Recherche de vecteurs propres monter: Réduction exacte des endomorphismes précédent: Calcul du polynôme minimal


Programme pour le polynôme minimal.

Ce programme est écrit en MuPAD, pour les utilisateurs de maple, il y a quelques remplacements à faire indiqués entre parenthèses. Attention, MuPAD utilise // pour un commentaire (comme en C++), en maple utilisez le signe #.
// programme polynome minimal a sauver sous le nom minimal_poly.mu
// utiliser read("minimal_poly.mu") a l'interieur de MuPAD

// fonction iequalj utile pour definir la matrice identite
iequalj:=(l,k)->if (l=k) then 1; else 0; end_if; ; // (maple) fi

// definition de la procedure
// en argument, on place la matrice A dont on cherche le 
// polynome minimal, la procedure retourne la matrice reduite 
// ou on lit le polynome minimal
minimal_poly:=proc(A)
local n,Id,B,Aj;            // variables locales
begin  // (maple) pas de begin
 n:=ncols(A);   // dimension de la matrice A, (maple) coldim
 Id:=matrix(n,n,iequalj);   // matrice identite
 B:=matrix(n+1,n^2+1,0);    // cree la matrice resultat
 Aj:=Id;

 // on remplit la 1ere ligne avec les coordonnees de l'identite
 for i from 1 to n^2 do 
   B[1,i]:=Id[((i-1)div n)+1,((i-1) mod n)+1]: 
 end_for: // (maple) od

 // on remplit les lignes 2 a n+1 avec 
 // les coordonnees des puissances de A
 for j from 1 to n do
  Aj:=Aj*A;
  for i from 1 to n^2 do 
    B[j+1,i]:=(Aj)[((i-1)div n)+1,((i-1) mod n)+1]: // (maple) iquo (pour div)
  end_for; // (maple) od
 end_for; // (maple) od

// on remplit la derniere colonne avec les puissances de A
 for i from 1 to n+1 do B[i,n^2+1]:=a^(i-1): end_for; // (maple) od

// on reduit la matrice
 gaussElim(B); // (maple) gausselim(B)
end_proc: // (maple) end

Pour utiliser cette procedure, tapez par exemple les commandes:

export(linalg); // (maple) with(linalg);
read("minimal_poly.mu");
A:=matrix(2,2,[[1,2],[3,4]]);
minimal_poly(A);



2003-02-19