Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre V, section 3.4, exercice 7, page 142.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
Nous définissons la matrice.
> A:=matrix(3,3,[-1/2,v/u,w/u,
u/v,-1/2,w/v,
u/w,v/w,-1/2]):
M:=evalm(-2/3*A);
Sans nous poser de questions, nous demandons les valeurs propres et les vecteurs propres.
> linalg[eigenvects](M);
Nous obtenons une jolie réponse, ce qui montre que l'exercice est convenablement truqué. Bien sûr, nous n'avons traité que le cas générique car les lettres u, v, w sont des indéterminées. Cependant les valeurs propres ne dépendent pas de u, v, w (on peut vérifier que le polynôme caractéristique dont on attend qu'il soit à coefficients dans Q(u,v,w) est en fait à coefficients constants). De plus les vecteurs propres obtenus pour la valeur propre double sont indépendants quel que soit le jeu de valeurs que l'on donne aux indéterminées. Donc pour ce qui est de l'interprétation sur n'importe quel corps (de caractéristique différente de 2 pour que 1 et -1 restent distincts) la seule contrainte est celle indiquée par l'énoncé.
Pour obtenir la matrice de changement de base, le plus simple est d'en appeler à linalg/jordan.
> linalg[jordan](M,'P');
> print(P);
L'interprétation géométrique est évidente : les seules valeurs propres sont 1 et -1, donc nous avons affaire à une symétrie, précisément une symétrie par rapport à un hyperplan d'après les dimensions des sous-espaces propres.
Pour obtenir une isométrie (les indéterminées sont interprétées comme des réels), il suffit d'ecrire la condition usuelle sur les matrices orthogonales : la transposée de M fois M vaut la matrice identique.
> Test:=evalm(transpose(M)&*M-&*());
Il faut écrire que les neuf coefficients de cette matrice sont nulles. Nous extrayons donc les coefficients et nous les rangeons dans un ensemble.
> entries(Test);
> test:=map(op,{entries(Test)});
On aurait pu aussi employer l'instruction suivante.
> convert(Test,set);
Seuls les numérateurs nous intéressent.
> test:=map(numer,test);
Plein d'optimisme, nous faisons appel à solve.
> sol:=[solve(test,{u,v,w})];
Et cela marche ! Nous évacuons cependant les solutions où l'un des paramètres est nul, puisque cette condition est imposée depuis le début.
> sol:=remove(has,sol,0);
Nous avons ainsi quatre solutions, que nous explicitons.
> for i in sol do
i,subs(i,eval(M))
od;
Nous avons obtenu quatre matrices de symétries orthogonales par rapport à des hyperplans (des réflexions ou miroirs). Ces transformations sont auto-adjointes et nous constatons que les matrices sont bien symétriques. Précisons que nous avons implicitement supposé que la base de référence est orthonormée, autant pour écrire que nous avions affaire à une matrice orthogonale que dans cette dernière affirmation sur la symétrie de la matrice d'une transformation auto-adjointe.