Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre VI, section 2.3, exercice 5, page 167.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
Calcul en Maple V.3 |
Calcul en Maple V.5
Interprétation |
Reprise
Paramétrage
Calcul en Maple V.3. Nous traduisons les conditions imposées en un système. Il n'y a pas de perte de généralité à supposer que le cercle est de rayon 1 et que son centre est l'origine du repère utilisé. De plus on peut orienter le repère pour que la droite soit verticale, d'équation x=d. Il faut écrire que
> sys:={x[p]-d,
x[a]^2+y[a]^2-1,x[b]^2+y[b]^2-1,
(x[p]-x[a])*x[a]+(y[p]-y[a])*y[a],
(x[p]-x[b])*x[b]+(y[p]-y[b])*y[b],
3*x[g]-x[p]-x[a]-x[b],3*y[g]-y[p]-y[a]-y[b]};
Nous voulons éliminer les variables autres que l'abscisse et l'ordonnée de G. Nous employons donc l'ordre purement lexicographique en mettant ces deux variables en dernier.
> gb:=grobner[gbasis](sys,
[x[p],y[p],x[a],y[a],x[b],y[b],x[g],y[g]],
plex);
Le temps de calcul est important (plusieurs heures) ; la mémoire utilisée n'est pas trop importante ; le résultat a une grande taille et c'est pourquoi nous ne l'écrivons pas.
L'emploi de l'ordre purement lexicographique signifie que l'on triangule le système. C'est ce que nous mettons en valeur ci-dessous, en construisant une matrice dont chaque ligne est associée à un polynôme de la base et chaque colonne à une indéterminée. Le coefficient d'indice (i,j) vaut 1 si et seulement si le polynôme d'indice i comporte l'indéterminé d'indice j.
> varlist:=[x[p],y[p],x[a],y[a],x[b],y[b],x[g],y[g]]:
> G:=array(1..nops(gb),1..nops(varlist),sparse):
for i to nops(gb) do
for j to nops(varlist) do
if has(gb[i],varlist[j]) then G[i,j]:=1 fi
od
od:
print(G);
Calcul en Maple V.5. Le calcul précédent est extrèmement coûteux alors que nous n'avons pas besoin de toute cette information. Seul un des polynômes obtenus nous intéresse. Nous passons donc en V.5 où les ordres proposés sont plus variés. L'ordre qui convient à l'élimination est lexdeg.
> sys:={x[p]-d,
x[a]^2+y[a]^2-1,x[b]^2+y[b]^2-1,
(x[p]-x[a])*x[a]+(y[p]-y[a])*y[a],
(x[p]-x[b])*x[b]+(y[p]-y[b])*y[b],
3*x[g]-x[p]-x[a]-x[b],3*y[g]-y[p]-y[a]-y[b]};
> gb:=Groebner[gbasis](sys,
lexdeg([x[p],y[p],x[a],y[a],x[b],y[b]],[x[g],y[g]]));
Regardons maintenant la forme du système obtenu, toujours par le même procédé.
> varlist:=[x[p],y[p],x[a],y[a],x[b],y[b],x[g],y[g]];
> G:=array(1..nops(gb),1..nops(varlist),sparse):
for i to nops(gb) do
for j to nops(varlist) do
if has(gb[i],varlist[j]) then G[i,j]:=1 fi
od
od:
print(G);
Nous voyons qu'il y a exactement une équation en l'abscisse et l'ordonnée de G, les autres utilisant globalement toutes les indéterminées. C'est la raison pour laquelle le calcul est moins coûteux qu'avec plex.
Interprétation. Intéressons nous maintenant à l'équation qui décrit le lieu de G.
> equ:=remove(has,gb,{p,a,b}):
> nops(equ);
> equ:=equ[1];
> degree(equ,x[g]);
> degree(equ,y[g]);
Cette équation est de degré 7 en l'abscisse de G et de degré 4 en l'ordonnée de G. Ceci est un peu troublant car nous ne sommes pas habitués à considérer des courbes de degré aussi elevé. Essayons d'avoir le regard plus perçant.
> equ:=factor(equ);
> map(proc(z) degree(z,{x[g],y[g]}) end,
convert(equ,list));
Il s'avère que la courbe se décompose en une cubique et une quartique.
> Equ[1]:=select(proc(z) degree(z,{x[g],y[g]})=3 end,equ);
> Equ[2]:=select(proc(z) degree(z,{x[g],y[g]})=4 end,equ);
Le fait que la courbe se décompose est louche et mérite réflexion. En fait nous n'avons pas été assez soigneux et nous n'avons pas tenu compte de la remarque de la page 166 sur les cas de dégénérescence. En effet il est implicite que les points de contact A et B sont distincts et nous n'avons pas explicité cette condition. Nous procédons donc comme à la page 160 en introduisant un polynôme et une indéterminée supplémentaires.
> sys:={x[p]-d,
x[a]^2+y[a]^2-1,x[b]^2+y[b]^2-1,
(x[p]-x[a])*x[a]+(y[p]-y[a])*y[a],
(x[p]-x[b])*x[b]+(y[p]-y[b])*y[b],
1-t*((x[a]-x[b])^2+(y[a]-y[b])^2), #
3*x[g]-x[p]-x[a]-x[b],3*y[g]-y[p]-y[a]-y[b]};
> gb:=Groebner[gbasis](sys,
lexdeg([x[p],y[p],x[a],y[a],x[b],y[b],t],[x[g],y[g]]));
> equ:=remove(has,gb,{p,a,b,t}):
> nops(equ);
> equ:=factor(equ[1]);
En procédant ainsi la quartique parasite a été éliminée. D'ailleurs son interprétation est facile. Si les deux points A et B sont confondus, le point G est situé aux deux tiers sur la corde qui joint le point P au point de tangence.
Reprise. On aurait pu employer un autre système pour décrire la situation géométrique. En effet l'orthogonalité de la tangente et du rayon montre que les deux points A et B sont sur le cercle de diamètre OP. On peut donc effectuer le calcul comme suit.
> sys:={x[p]-d,
x[a]^2+y[a]^2-1,x[b]^2+y[b]^2-1,
(x[a]-x[p])^2+(y[a]-y[p])^2+x[a]^2+y[a]^2-x[p]^2-y[p]^2,
(x[b]-x[p])^2+(y[b]-y[p])^2+x[b]^2+y[b]^2-x[p]^2-y[p]^2,
1-t*((x[a]-x[b])^2+(y[a]-y[b])^2),
3*x[g]-x[p]-x[a]-x[b],3*y[g]-y[p]-y[a]-y[b]};
> gb:=Groebner[gbasis](sys,
lexdeg([x[p],y[p],x[a],y[a],x[b],y[b],t],[x[g],y[g]]));
> equ:=remove(has,gb,{p,a,b,t}):
> nops(equ);
> equ:=factor(equ[1]);
On arrive au même résultat. On pourrait vérifier avec Groebner[inter_reduce] que les deux idéaux définis par les deux systèmes sont égaux.
Paramétrage. Passons à l'étude de la cubique obtenue. Nous constatons facilement que son équation possède deux composantes homogènes de degrés 2 et 3.
> series(subs(x[g]=t*X,y[g]=t*Y,Equ[1]),t);
Il en résulte que l'origine est un point double et que cette cubique est unicursale (c'est-à-dire possède un paramétrage rationnel). Le calcul suivant fournit un paramétrage rationnel.
> sol1x:=[solve(subs(y[g]=t*x[g],Equ[1]),{x[g]})];
> sol1x:=op(select(has,sol1,t));
> X1:=subs(sol1x,x[g]);
> Y1:=subs(sol1x,t*x[g]);
Avec ce paramétrage, il n'est pas difficile d'illustrer la situation. On peut alors se demander comment sont obtenus certains des points de la cubique qui sont intérieurs au cercle. C'est oublier que nous avons travaillé avec des polynômes et pas avec des nombres. Les nombres apparaissent comme racines de polynômes et rien n'interdit qu'ils soient complexes.