//
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);