Math
Université de Nice-Sophia Antipolis 2012-2013
TP2 : Relations de Bézout et Applications
N'oubliez pas d'exécuter (valider avec la touche Entrée) les commandes Maple (texte en rouge) avant de les utiliser. Les exercices en petits caractères sont facultatifs.
Calcul des coefficients de Bézout
On peut modifier les fonctions de calcul de pgcd précédemment programmées : Commençons par la version itérative > BezoutIter:=proc(a0,b0) local q,r,a,b,u0,v0,u1,v1,u,v; a:=a0;b:=b0;u0:=1;v0:=0;u1:=0;v1:=1; while b0 do q:=iquo(a,b);r:=irem(a,b); u:=u0-q*u1;v:=v0-q*v1; a:=b;b:=r;u0:=u1;v0:=v1;u1:=u;v1:=v od; a,u0,v0 end: > BezoutIter(456,123); 3, 17, -63 La version récursive est plus délicate puisqu'il faut lui donner toute l'initialisation dans les paramètres : > BezoutRec:=proc(a,b,u0,v0,u1,v1) local q; if b=0 then a,u0,v0 else q:=iquo(a,b);BezoutRec(b,irem(a,b),u1,v1,u0-q*u1,v0-q*v1) fi end: > BezoutRec(456,123,1,0,0,1); 3, 17, -63 C'est un peu désagréable et source d'erreur si l'utilisateur se trompe dans l'initialisation. On peut contourner le problème en écrivant une fonction qui appelle la fonction récursive correctement initialisée : > Bezout:=proc(a,b) BezoutRec(a,b,1,0,0,1) end: > Bezout(456,123); 3, 17, -63 On peut aussi utiliser la fonction igcdex de Maple : > igcdex(456,123,'u','v');
Page 1
3
qui rend le pgcd mais en plus > u,v,u*456+v*123; 17, -63, 3 met des coefficients de Bézout dans les variables dont les noms sont donnés entre apostrophes. Exercice 1 : écrire une fonction qui prenne en entrée les deux entiers a, b et rende le pgcd et la famille des coefficients de Bézout > Bezouts(456,123); 3, 17 + 41 l, -63 - 152 l Comparez avec les solutions données par isolve (?isolve). Solution > Bezouts:=proc(a,b) local d,u,v; d:=igcdex(a,b,'u','v'); d,u+`k`*iquo(b,d),v-`k`*iquo(a,d) end: > Bezouts(456,123); 3, 17 + 41 k, -63 - 152 k > isolve(456*us+123*vs=igcd(456,123)); { vs = -63 - 152 _N1, us = 17 + 41 _N1 }