• Aucun résultat trouvé

6.2 La nouvelle fonction extendedSubResultants

6.2.2 Implantation de l'algorithme

Le but de cette section est l'implantation de la nouvelle fonction extendedSubRe-sultants. Celle-ci suit le schéma de l'algorithme mis en évidence à la n de la section précédente avec toutefois une subtilité : on ne construit pas explicitement la matrice S0.

En eet, les éléments non nuls de la dernière ligne de S0 sont des puissances d'une indéterminée. En tant que tels, ils seraient donc codés en pratique par des polynômes dynamiques. Or, les matrices intervenant dans l'algorithme de S.J. Berkowitz sont à coecients dans ^K0. On ne pourrait donc pas utiliser celui-ci dans le calcul du déter-minant de S0 sauf à modier les typages de toutes les matrices, ce qui n'est guère raisonnable.

En fait, on montre qu'il sut de construire les matricesSyl0(p;q) etV0 pour contourner cette diculté et déterminer, malgré tout, le déterminant de S0.

188 Sous-résultants L'astuce qui permet d'éviter le problème exposé dans l'introduction est triviale. Elle consiste simplement à développer le déterminant de S0 par rapport à la dernière ligne de cette matrice qui est égale à :

V0 = [0 ::: 0Tm;1 ::: T1]

Ainsi, en pratique, le calcul dev0 nécessite seulement deux types de données : les cofac-teurs adéquats dansSyl0(p;q) et la matrice ligneV0. An de déterminer ces cofacteurs, il faut notamment une fonction qui extrait la sous-matrice carrée de Syl0?(p;q) com-posée de sesm+n;1 premières lignes et privée d'une colonne donnée. C'est l'objet de la fonction extractMat. Etant donnés une matrice carrée n n M et un entier naturel i, elle retourne la matrice carrée extraite de M composée de ses n;1 premières lignes et privée de sa ième colonne.

extractMat(M:Matrix K,i:NonNegativeInteger):Matrix K ==

nbcol:Nni:= ncols(M)

i=1 => subMatrix(M,1,nbcol-1,2,nbcol)

i=nbcol => subMatrix(M,1,nbcol-1,1,nbcol-1) N1:Matrix K:= subMatrix(M,1,nbcol-1,1,i-1) N2:Matrix K:= subMatrix(M,1,nbcol-1,i+1,nbcol) horizConcat(N1,N2)

La fonction extendedSubResultant suit exactement le schéma décrit à la n de la section précédente. On détermine tout d'abord la matrice Syl0(p;q) (notée Mat) à l'aide de la fonction Mat-Syl et le polynôme caractéristique vect de la sous-matrice Mn(Syl0(p;q)) (notée ssMat). En eet, puisque les n premiers éléments de V0 sont nuls, le calcul du déterminant de S0 nécessite donc celui de m cofacteurs. De plus, si on note Ak(1 k m) les matrices dénissant chacun des cofacteurs alors, pour tout 1i < j m, les matrices Ai et Aj vérient en particulier les relations :

Mn(Ai) = Mn(Aj) =Mn(Syl0(p;q)):

Ainsi, pour tout 1 k m, les matrices Mn(Ak) ont le même polynôme caractéris-tique, égal à vect. On peut alors, dans le calcul de chacun des cofacteurs, appliquer l'al-gorithme de S.J Berkowitz directement au cran n+1 à l'aide de la fonction berkosam2 et de vect.

Le calcul du déterminant de S0 s'eectue simplement en multipliant chacun des m éléments non nuls Tj (0 j m; 1) de V0 par le cofacteur dans S0 adéquat. La dernière matrice extraite est, par construction, égale à Mm+n;1(Syl0(p;q)). Ainsi, après la boucle Pour, la variablew est égale au polynôme caractéristique de la matrice

Mm+n;1(Syl0(p;q)). Il ne reste plus alors qu'à calculer le déterminant (noté det) de la matrice Syl0(p;q) avec berkosam2 en utilisant w. La fonction renvoie alors en sortie l'enregistrement à deux champs :

[reduce det;trim reduce(invq)]

composé respectivement des déterminants de Syl0(p;q) et de S0, autrement dit, d'un pgcd des deux polynômes et de l'inverse de q modulo p.

Sous-résultants 189

extendedSubResultants(p:$,q:$):Record(gcdiv:K,inverse:$) ==

degq:Nni:= rawDegree(q) degp:Nni:= rawDegree(p)

Mat:Matrix K:= Mat_Syl(p,q,0) nbcol:Nni:= degp + degq

ssMat:= subMatrix(Mat,1,degq,1,degq) vect:List K:= berkosam(ssMat)

invq:$:= 0::$

Z:$:= monomial(1::K,1::Nni) sgn:Int:= (-1)**(degp+1)

j:Nni:= (degp - 1) pretend Nni for i in degq+1..nbcol repeat

w:List K:= copy berkosam2(extractMat(Mat,i),vect) invq:= invq + sgn*(Z**j)*w.nbcol

sgn:= - sgn

j:= (j-1) pretend Nni

det:K:= berkosam2(Mat,w).(nbcol+1) [reduce det,trim reduce(invq)]

190 Résultats expérimentaux

Chapitre 7

Résultats expérimentaux

Les modications apportées à la version originale des programmes de T. Gómez-Díaz (implantés dans le logiciel de calcul formel Axiom) amènent naturellement à considérer trois types de programmes. Le premier, bien sûr, est la version originale notée Tgd. Le deuxième correspond à la version originale dans laquelle on introduit et privilégie la notion de sans-carré de D. Lazard. On le note Tgd+Laz. On rappelle que la motivation de ce choix est de diminuer le nombre de scindages au cours d'un calcul dans la clôture constructible, la condition de sans carré de D. Lazard étant plus faible que celle de T. Gómez-Díaz. Le troisième est le programme précédent avec les deux nouvelles fonc-tions subResultants et extendedSubResultants issues de l'algorithme de S.J. Berkowitz, noté Tgd+Laz+Berko. Pour ce dernier, les motivations sont toutes autres : il s'agit de diminuer les temps de calculs. De plus, avec ces deux nouvelles fonctions, on obtient un algorithme de calcul de sous-résultants mieux adapté à la nature mathématique des polynômes dynamiques. Il faut préciser que par construction, cet algorithme n'a aucune incidence sur le nombre de scindages opérés au cours d'un calcul. Ainsi, le nombre total de systèmes obtenus à la n d'un calcul dans la clôture constructible est identique dans les versions Tgd+Laz et Tgd+Laz+Berko.

Les exemples traités dans ce chapitre sont de nature diverse. On s'intéresse tout d'abord à la résolution de systèmes polynomiaux. Bien entendu, il n'est pas question de fabri-quer un solveur dynamique révolutionnaire, capable de rivaliser en ecacité avec GB [25], les programmes de M. Moreno Maza (notamment lextriangular [48, 57] pour des systèmes de dimension nulle) ou ceux de P. Aubry [5]. Il s'agit simplement de comparer les trois versions des programmes de la clôture constructible sur ce type d'exemples.

D'autre part, on reprend trois exemples directement issus de [28]. Il s'agit d'un prob-lème qui fait intervenir des matrices avec des paramètres, de la résolution de l'équation ax2+bx+c= 0 en distinguant la variablex des paramètresa;b etcet de répondre à la question : soit T un triangle, est-il isocèle? [31]. Enn, on accorde une place toute particulière à l'exemple du robot Romin [33] pour lequel nos améliorations s'avèrent particulièrement ecaces.

Les résultats de l'exécution des programmes de la clôture constructible dynamique se présentent sous la forme d'une réunion de systèmes de T. Gómez-Díaz (dénition 4.1.3)

191

192 Résultats expérimentaux agrémentés d'une valeur booléenne. Sans entrer dans les détails, il sut de savoir que la réunion des systèmes pour lesquels la valeur booléenne est true décrit l'ensemble des solutions du système initial. Il est donc inutile, mathématiquement, de s'intéresser aux autres systèmes. Cependant, si on se place d'un point de vue informatique, il en est tout autre. En eet, le fait de privilégier la notion de sans carré de D. Lazard induit heuristiquement un nombre de scindages inférieur ou égal à celui obtenu avec la version originale. Or, il arrive que cela ne soit visible, en sortie, que sur les systèmes de valeur booléenne false. C'est pourquoi on a malgré tout porté ce type d'informations dans nos tableaux comparatifs. Ces derniers se composent de quatre colonnes. La première cor-respond au nombre de systèmes de valeur booléenne true obtenus en sortie. La seconde, elle, renvoie au nombre de systèmes de valeur booléenne false. Pour plus de clarté, les tableaux comportent aussi une colonne total correspondant au nombre de systèmes true + false. Dans la dernière colonne, on reporte les temps de calculs correspondant à l'exécution des diérents exemples en utilisant la commande )set message time on.

Chacun des exemples se présente de la manière suivante : le système à triangulariser;

sa traduction dans la clôture constructible dynamique;

la partie du résultat obtenue en sortie avec Tgd+Laz+Berko qui est composée uniquement des systèmes de T. Gómez-Díaz pour lesquels la valeur booléenne est true, ceci an de ne pas surcharger inutilement ce chapitre;

un tableau comparatif de l'exemple traité avec les trois programmes;

quelques commentaires à propos des temps de calculs et du nombre de systèmes obtenus en fonction de la version des programmes utilisée et pour certains exem-ples, une comparaison avec les résultats fournis par d'autres méthodes de trian-gularisation.

D'autre part, tous les exemples ont été exécutés sur les stations Digital Alpha à 500 Mhz sous Digital Unix (équipées du processeur Alpha EV6) de l'unité Medicis en utilisant la version 2.2 du logiciel de calcul formel Axiom installée par J. Marchand. Enn, les temps de calculs présentés dans ce chapitre sont donnés en secondes. Ils correspondent au temps d'évaluation (EV).

7.1 Guide d'utilisation

On rappelle dans cette section la méthode à suivre pour réaliser un chier exécutable par les programmes de la clôture constructible dynamique [28] et donc aussi par les versions Tgd+Laz et Tgd+Laz+Berko.

Le schéma général d'un chier est le suivant (voir [28] p.93) :

++ Partie 1

K:= ++ corps de base

Résultats expérimentaux 193

CL:= DynamicConstructibleClosure K CC:= DynamicConstructibleCase K ++ Partie 2

fonction(x:Type1):Type2 ==

++ operations a realiser dans la cloture ++ constructible dynamique.

++ (en particulier : introduction des parametres ++ avec la fonction parameter).

++ Partie 3

++ (DCCTRL = DynamicConstructibleControlPackage) ++ (DCCTRL1 = DynamicConstructibleControlPackage1) ++ Si fonction n'a pas d'argument :

allCases(fonction)$DCCTRL(CC,Type2) ++ Si fonction a un argument :

allCases(fonction)$DCCTRL1(CC,Type1,Type2)

Dans la partie 1, on introduit le corps de base souhaité et on construit la clôture constructible de ce corps. La fonction allCases est fondamentale au sein des programmes de T. Gómez-Díaz [28, section 4.1]. C'est elle qui permet d'obtenir les solutions dans tousles cas. Elle fait appel au domaine DynamicConstructibleCase pour la présentation du résultat. Dans tous les exemples de ce chapitre, la partie 1 est la suivante :

RN:= Fraction Integer

CL:= DynamicConstructibleClosure RN CC:= DynamicConstructibleCase RN

Dans la partie 2, la fonction dénit le calcul spécique à eectuer dans la clôture constructible. Il faut noter que les paramètres sont implicitement ordonnés suivant l'ordre où ils sont introduits. Ainsi, la suite d'instructions :

a:CL:= parameter('a) b:CL:= parameter('b)

signie que a est plus petit queb. Pour le problème de la triangularisation de systèmes constructibles, cette partie introduit donc les diérents paramètres puis impose des contraintes à ces paramètres en interprétant respectivement chaque équation et chaque inéquation comme à un appel à mustBeEqual et à mustBeDierent.

Enn, dans la partie 3, la fonction allCases détermine la réponse complète, i.e. dans tous les cas possibles, de l'exécution de la fonction de la partie 2.