Previous: TP: Algorithme de WiedemannTP: Algorithme de Wiedemann Up: Option Algèbre et Calcul Formel, Préparation à l'Agrégation de Mathématiques d'OrsayOption Algèbre et Calcul Formel, Préparation à l'Agrégation de Mathématiques d'Orsay Next: Examples de codes correcteurs d'erreursExamples de codes correcteurs d'erreurs
Document disponible au format: PDF, Postscript, DVI, Text, LaTeX, LyX.

TP: Autour de l'algorithme d'Euclide



1  Pot Pourri autour de l'algorithme d'Euclide

1.1  Calcul de PGCD (oeuf corse)



Exercice 1   Calculer le pgcd de 126 et 35

Applications:

1.2  Décomposition sans carrés d'un polynôme



Exemple 1   Recherche de la décomposition sans carrés d'un polynôme, puis factorisation.

x
5+x4−2x3−2x2+x+1
> > p := x^5 + x^4 - 2*x^3 -2*x^2 + x + 1; 

> > pprime := diff(p, x); 

> > g := gcd(p, pprime); 

> > squareFree := divide(p, g, Exact);

> > factor(squareFree);

> > g := divide(g, x-1, Exact);

> >      divide(g, x-1, Exact);

> > g := divide(g, x+1, Exact);

> > expand((x-1)^2 * (x+1)^3 );


1.3  Expansion en fractions continues



Exercice 2   Mettre 126/35 sous la forme q1+1/q2+1/q3+...


1.4  Euclide étendu, Bezout effectif

Algorithme d'Euclide étendu de deux éléments f et g d'un anneau principal (Z, K[X], ...).

On note r0:=f, r1:=g, puis r2,...,rl et q2,...,ql les restes et quotients successifs.

On veut maintenir l'invariant: sif+tig=ri.

Exercice 3   Retrouver s0, s1, t0, t1 et les équations de mise à jour exprimant si et ti en fonction de si−2, si−1, ti−2 et ti−1 .
Exemple 2   Calcul du PGCD étendu de x3x et x2+1 (exemple 5.19 of MCA).

Exercice 4   Compléter les colonnes si et ti du pgcd de 126 et 35.


1.5  Équations linéaires diophantiennes



Exercice 5   Résoudre l'équation diophantienne linéaire 126a+35b=21.

Applications:

1.6  Calcul d'inverse modulo n



Exercice 6   Inverse de 11 modulo 13?
Applications:

1.7  Algorithme des restes chinois



Exemple 3   Trouver 0≤ f<100 tel que f=2mod11 et f=7mod13.
> > [g, s, t] := [igcdex(11,13)];

> > l1 := t*13; l2 := s*11;

> > l1 mod 11, l1 mod 13;

> > l2 mod 11, l2 mod 13;
l1 et l2 sont les interpolants de Lagrange. Maintenant, c'est facile de retrouver f:
> > f := (2 * l1 + 7 * l2) mod 11 * 13

> > f mod 11, f mod 13;
Exercice 7   Même chose, avec 3 entiers: f=2mod11, f=−1mod13, f=10mod17:


1.7.1  Cadre général (p. 102)

Description précise.

Theorem 4   5.2, Interpolants de Lagrange, ...


1.7.2  Entiers

Application: méthodes multimodulaires en algèbre linéaire

Exemple 5   Calcul de déterminant sur Z.
> > M := Dom::Matrix(Dom::Integer):

   A := M::random(6,6);

> > linalg::gaussElim(A);
Problème: explosion de la taille des coefficients.

Principe: se ramener à un calcul dans Z/pZ?
  1. Étape 1: obtenir une borne sur |detA|:

    Inégalité de Hadamard: |detA|≤C
    1Cnnn/2max(Aij)n
    > > hadamard := float(6^(6/2) * 1000^6);
    Ou calcul direct:
    > > hadamard := float(_mult( norm(linalg::col(m,j),2)

                               $ j=1..6));
  2. On cherche suffisament de nombre premiers p1,...,pl tels que p1... pl>|detA|:
    > > p := 10000:

       primes := []:

       pprimes := 1;

       while float(hadamard) / pprimes > 1 do

          p := numlib::prevprime(p-1); 

          pprimes := pprimes * p;

          primes := append(primes, p); 

       end:
  3. Pour chacun de ces nombres premiers, la taille des coefficients est bornée:
    > > Zp := Dom::IntegerMod(p): Zp::print := expr:

    > > Ap := Dom::Matrix(Dom::IntegerMod(p)) (A); 

    > > linalg::gaussElim(Ap);
    On calcule tous les déterminants mod p:
    > > dets :=[linalg::det(Dom::Matrix(Dom::IntegerMod(p)) (A)) 

               $ p in primes];
  4. On utilise le théorème des restes chinois pour reconstruire le déterminant:
    > > lagrange := [op([igcdex(p, pprimes/p)],3) *

                    pprimes/p

                    $ p in primes];

    > > map(lagrange, _mod, primes[3]);

    > > _plus(op(zip(expr(dets), lagrange, _mult))) mod pprimes;

    > > % -pprimes;

    > > linalg::det(A);
Note: avec Maple ou MuPAD les arithmétiques modulaires ne sont pas brillantes d'efficacité.

Du coup, le seuil au dela duquel les méthodes multimodulaires sont rentables sont très élevés.

Par contre, tous les systèmes raisonnables les utilisent couramment.

1.7.3  Interpolation de Lagrange

Trouver un polynôme ayant certaines valeurs en certains points.

Exercice 8   5.4 p. 131.
Applications:

1.7.4  Exemple trivial: Taylor

Trouver un polynôme ayant un certain développement de Taylor au point x0=1.

1.7.5  Interpolation de Hermite

Mix de Taylor et Lagrange.

Applications:

1.7.6  Décomposition partielle des fractions rationnelles g/f

  1. g/f1f2 avec f1f2=1 .
  2. Cas f sans carrés.
  3. Cas f puissance; décomposition p-adique.

1.8  Algorithme des restes chinois rationnels

> > extendedEuclide := 

proc(f, g)

begin

    r[0] := f; s[0] := 1; t[0] := 0;

    r[1] := g; s[0] := 1; t[0] := 0;

    i := 2;

    while ... do

    end_while

end_proc:

1.8.1  Interpolation de Cauchy



Exemple 6   (5.19 ii p. 118)

Objectif: trouver une fraction rationnelle r/t dans Q(x) telle que:

r(0)
t(0)
=1,  
r(1)
t(1)
=2,  
r(−1)
t(−1)
=2 .


Solution triviale par interpolation de lagrange: r/t=x2+1/1.

Du coup, r/t vérifie les conditions ci-dessus si et seulement si r/t=x
2+1mod x3x.

On voudrait que r et t soient de petit degré.

Que peut-on espérer mettre comme contraintes?
Applications:

1.8.2  Approximant de Padé (en TP)

1.8.3  Suites récurentes, Berlekamp-Masse

Lien suites récurentes / fractions (sur l'exemple de Fibonacci).

Reprendre l'exemple de l'article, dans Z/2Z, s = 1 0 1 0 0.

1.9  Coefficients de Bezout et fonctions symétriques des racines

2  TP: Autour d'Euclide



Exercice 9   Comparer sur des matrices carrées aléatoires n× n à coefficients dans Q[x] les différentes méthodes de calcul du déterminant: Pour aller plus loin:
Une correction possible:
> > K := Dom::UnivariatePolynomial(z, Dom::Rational):

> > M := Dom::Matrix(K):

> > n := 8:

d := 5: // Random sur K renvoie des polynômes de degré <= 5

m := M::random(n,n):

> > time((det1 := linalg::det(m)));     // 51 secondes

//mexpr := Dom::Matrix(Dom::ExpressionField(normal))(m):

//time(linalg::det(mexpr)); // Là, on est mort: 137 secondes

> > detMultiModulaire :=

proc(m)

begin

    borne := d * n ; // le degré du déterminant est inférieur à cette borne

    result := K::zero:

    for i from 0 to d*n do

        lagrange := _mult( K(z-j)/(i-j) $ j in {$0..i-1, $i+1..borne} );

        me := matrix(mapcoeffs(m, evalp, z=i)):

        result := result + lagrange * linalg::det(me);

    end_for:

    result;

end_proc:

> > time((det2 := detMultiModulaire(m)))


Exercice 10   Approximation de Cauchy

Calculer une fraction rationnelle ρ(x)=r(x)/t(x) dans F
5(X) avec degt(x)=degr(x)=1 telle que ρ(i)=2i pour i=0,1,2.


Exercice 11   Approximation de Padé.

On appelle (n,k)-approximant de Padé en zéro de la fonction tangente une fraction rationnelle réduite r(x)/t(x) avec degr<k et degtnk telle que tan(x)−r(x)/t(x)=o(x
n). Un tel approximant est typiquement utile en analyse numérique pour calculer des valeurs approchées de la fonction tangente.

Calculer de tels approximants pour quelques valeurs de n et k et utiliser une représentation graphique pour évaluer leur qualité.

Indication: soit g(x)∈Q[x] constitué des n premiers termes du dévelopement de Taylor de tan(x); utiliser l'algorithme des restes chinois rationnel qui consiste à chercher les polynômes r(x) et t(x) tels que r(x)=t(x)g(x)+s(x)x
n dans les résultats intermédiaires du calcul du pgcd étendu de f(x)=xn et g(x) par l'algorithme d'Euclide. Si r(x)∧ t(x)=1, on a gagné (le vérifier!). Sinon, on sait qu'il n'y a pas d'approximant (mais cela demande une démonstration par un argument d'unicité!).

Utiliser l'algorithme des restes chinois pour construire une fonction rationnelle qui approxime tan simultanément aux alentours de 0 et de π.


Exercice 12   Berlekamp-Massey, via Euclide.

Soit u
0,u1,...,un−1 une séquence de n nombres. L'objectif est de déterminer la relation de récurence de longueur l minimale telle que la suite u est déterminée par ses l termes initiaux u0,...,ul−1 et uk=−t1uk−1t2uk−2−...−tlukl pour k>l. Vérifier que cela est équivalent à trouver deux polynômes r de degré <l et t=t0+t1x+...+tlxl tels que:
r
t
=u0+u1x+...+un−1xn−1+O
xn


En déduire un algorithme pour calculer cette relation de récurence.


Exercice 13   Courbes de Bézier

Exercice 5.46, p. 136-137 of Modern Computer Algebra.


Exercice 14   Opérateur Omega de Mac Mahon sur les séries génératrices et équations diophantiennes

Développer en série les fractions rationnelles suivantes, et interpréter combinatoirement leur termes:

1
1−x
,  
1
1−t


1
(1−x)(1−y)
,  
1
(1−t)2


1
(1−tx1)(1−t2x2)(1−t3x3)⋯
,  
1
(1−t)(1−t2)(1−t3)⋯


Comment peut-on développer en série la fraction rationnelle:

1
(xt)


On cherche les solutions de l'équation diophantienne 2a1−3a2+a3+2=0 avec (a1,a2,a3)∈N.

Comment peut-on interpréter les termes de la série suivante, dans laquelle on considère 1≫ zx
1x2x3:

z2
(1−x1z2)(1−x2z−3)(1−x3z)


Comment peut-on interpréter le terme constant en z de cette série?

Calculer ce terme constant, en utilisant une décomposition partielle en fractions.

En déduire le nombre de solutions de l'équation diophantienne avec a
1+a2+a3=20.



Valid HTML 4.0! Previous: TP: Algorithme de WiedemannTP: Algorithme de Wiedemann Up: Option Algèbre et Calcul Formel, Préparation à l'Agrégation de Mathématiques d'OrsayOption Algèbre et Calcul Formel, Préparation à l'Agrégation de Mathématiques d'Orsay Next: Examples de codes correcteurs d'erreursExamples de codes correcteurs d'erreurs
TP: Autour de l'algorithme d'Euclide / Option Algèbre et Calcul Formel / Nicolas M. Thiéry
Dernière modification: Mar 27 Mar 2007 10:32:52