Quelques outils des mathématiques experimentales

DossierClassé sous :Mathématiques , experimentales , plouffe

-

Une première introduction à une technique moderne de découverte de théorème : les mathématiques experimentales...

  
DossiersQuelques outils des mathématiques experimentales
 

Je vais vous entretenir de Mathématiques expérimentales c'est à dire, selon Bailey et Borwein : de "l'utilisation de techniques de calcul avancées pour explorer les structures mathématiques, tester des conjectures et suggérer des généralisations".

Un de leurs résultats (avec S. Plouffe) est la formule suivante : Pi= suminf(k=0, 1/16^k (4/(8k+1)-2/(8k+4)-1/(8k+5)-1/(8k+6))) trouvée grâce à l'algorithme PSLQ et qui permet d'obtenir le 10^12 i-ème chiffres hexadécimal de Pi sans calculer les précédents (ce que personne ne pensait possible!). Pour bien commencer il nous faut un outil, nous allons essentiellement utiliser l'excellent pari/gp qui a été developpé à Bordeaux et qu'on peut télécharger ici : http://www.gn-50uma.de/ftp/pari/00index.html (avec les sources en C). La vocation essentielle de ce logiciel étant la théorie des nombres il nous faudra occasionnellement le compléter par d'autres (pour des intégrales numériques et symboliques complexes etc.. voir en annexe et notez bien qu'après tout nous souhaitons utiliser TOUS les moyens de calcul possibles!).

Les mathématiques expérimentales étant essentiellement concrètes intéressons nous à un problème de mathématiques pures réel :

Soit (avec la syntaxe de gp) la fonction : > phi(k,n)= sum(j=1,n, if(gcd(j,n)==1, j^k) )

C'est à dire qu'on définit une fonction dont le résultat est donné par la somme des k-ièmes puissances des nombres premiers avec n et inférieurs ou égaux à n.

Lorsque k=0 on se contente de compter les nombres premiers avec n et inférieurs à n et on retrouve la "fonction totient d'Euler".

A présent définissons la somme pour n de 1 à l'infini suivante : > f(k,s)= sumpos(n=1, phi(k,n)/n^s) * zeta(s) (sumpos() est une version plus rapide de suminf()) Et posons le problème :

Peut-on trouver une formule simple résumant cette somme infinie (de sommes finies!) pour tout entier k positif et tout réel s (assez grand pour que f soit définie) ?

Bien sûr on pourrait procéder de manière formelle ou chercher dans la littérature mais nous souhaitons trouver la solution par une méthode "marteau-pilon" donc calculons quelques valeurs. Fixons k=0 et essayons f(0,1).. Hm.. cela semble durer un temps infini!... Evidemment!! Puisque dans le meilleur des cas on a une somme en 1/n.

Bien, essayons f(0,10) soit 1.002008392826019221816214807
Un petit tour au 'Reverse Engineering Calculator'
http://psg.cecm.sfu.ca/projects/revenge/client/RevEngClient.html
et... c'est l'échec et pourtant...
en utilisant le browser de l'ISC (Inverse Symbolic Calculator : http://www.cecm.sfu.ca/projects/ISC/ISCmain.html)
on voit qu'on est curieusement proche de zeta(9) Mais est-ce que le nombre fourni était correct? Essayons donc > f(k,s)= suminf(n=1, phi(k,n)/n^s) * zeta(s) qui rend : (après un temps six fois plus long) 1.002008392826082214417852668 qui est cette fois bien considéré comme zeta(9) et dont seules les trois dernières décimales sont fausses... Donc une première leçon importante : la technique n'est pas fiable et il vaut mieux essayer de plusieurs manières différentes pour voir si les nombres sont les mêmes! En fait une technique 'expérimentalement fiable'(:)) est de demander davantage de précision et de ne se fier qu'à la partie du résultat qui ne change pas (ceci est vrai tout particulièrement pour l'étonnante et magique fonction sumalt() de pari!) . Donc f(0,10)= zeta(9) .

Il est facile de deviner et de vérifier qu'en général (si s>2), f(0,s)= zeta(s-1) (ce qui était bien connu et... en réalité fourni dans le problème mais la pédagogie est Reine!)

Bien, à présent attaquons k= 1 Quelques essais à 'RevEng' nous apprennent que ce n'est pas la bonne méthode donc continuons de deviner.. D'abord notons (avec le soupçon tacite que la multiplication par zeta(s) ne fasse que compliquer la formule) > g(k,s)= sumpos(n=1, phi(k,n)/n^s) alors g(0,s)= zeta(s-1)/zeta(s) dont nous partirons. On a zeta(s)*g(0,s)-zeta(s-1) = 0 Peut-être qu'il y a aussi une dépendance linéaire entre : zeta(s-1)*g(1,s), zeta(s)*g(1,s), zeta(s+1)*g(1,s), zeta(s-1), zeta(s), zeta(s+1) c.a.d. qu'il existe des entiers a1, a2,..,a6 tels que :

a1*zeta(s-1)*g(1,s)+a2*zeta(s)*g(1,s)+a3*zeta(s+1)*g(1,s)+ a4*zeta(s-1)+a5*zeta(s)+a6*zeta(s+1) = 0

(Un site est dédié à la détection de ce type de relations : 'IntegerRelations' du CECM http://www.cecm.sfu.ca/projects/IntegerRelations/ et deux excellents algorithmes existent : LLL et PSLQ) Heureusement LLL est implémenté dans pari via la fonction lindep() Cherchons une relation pour k=1 et s=20 : > p 50 //lindep a besoin de précision > a= g(1,20) //pour éviter de le recalculer plusieurs fois > lindep([zeta(19)*a, zeta(20)*a, zeta(21)*a, zeta(19), zeta(20), zeta(21)], 45) ( il est indiqué de prendre le dernier terme = precision-10% ) On obtient de nombreuses grandes valeurs qui changent avec la précision utilisée (ce qui signifie que lindep a echoué!!). Remplaçons le dernier terme zeta(21) par zeta(18) et... BINGO !! [-2, 0, 0, 1, 0, 1] c'est à dire que : -2*zeta(19)*g(1,20)+zeta(19)+zeta(18)=0 On peut conjecturer : g(1,s)= [zeta(s-1)+zeta(s-2)]/(2*zeta(s-1)) qui semble correct pour toutes les valeurs de s>3 qu'on peut tester A présent explorons notre filon grâce a lindep : > a= g(2,20) > lindep([zeta(18)*a, zeta(17), zeta(18), zeta(19), zeta(20)], 45) rend [-6, 2, 3, 1, 0] D'où la conjecture : g(2,s)= [zeta(s-1)+3*zeta(s-2)+2*zeta(s-3)]/(6*zeta(s-2)) On peut continuer ainsi (en augmentant la précision au fur et à mesure que k croît) pour obtenir tout un tableau de valeurs :

1/1 k=0
1/2 1/2 k=1
1/6 1/2 1/3 k=2
0 1/4 1/2 1/4 k=3
-1/30 0 1/3 1/2 1/5 k=4
0 -1/12 0 5/12 1/2 1/6 k=5
1/42 0 -1/6 0 1/2 1/2 1/7 k=6

Les termes les plus à droite sont très simples mais que représentent 1/6, -1/30, 1/42, etc.. ? Pour le savoir un outil unique est
"L'Encyclopédie Électronique des Suites Entières" par N. J. A. Sloane ici : http://www.research.att.com/~njas/sequences/indexfr.html
Indiquer simplement les dénominateurs 6,30,42 pour obtenir 'Denominators of Bernoulli numbers' et, en cliquant sur 'More Information' de la seconde réponse, trouver de nombreux détails sur le gigantesque site d'Eric Weisstein. pari connaît bien sûr les nombres de Bernoulli et > for(n=0,10,print1(bernfrac(n)," ")) rend : 1 -1/2 1/6 0 -1/30 0 1/42 0 -1/30 0 5/66. On peut ensuite écrire les rapports entre termes successifs d'une colonne et en déduire (par la connaissance de la formule donnant k combinaisons parmi n et.. un peu de travail) la formule générale : gn(k,s)= 1+sum(n=0,k,bernfrac(n)*binomial(k+1,n)*zeta(s-k-1+n))/ ((k+1)*zeta(s-k)). Il suffit de vérifier numériquement que gn(k,s)-g(k,s) s'annule identiquement. Bien sûr la formule n'est pas demontrée et de plus nous n'avons effectué que des calculs pour n >= 10 (il se pourrait qu'il y ait des termes supplémentaires qui s'annulent rapidement avec n etc...) Et nous nous voilà dans la même situation que le grand Gauss qui disait : "J'ai le résultat, mais je ne sais pas encore comment l'obtenir". Bien sûr nous espérons tous que l'avoir aide à le trouver!! Mais une démonstration rigoureuse ferait tâche dans ces élucubrations expérimentales si bien que je conclurais en citant Hadamard : "L'objet de la rigueur mathematique est de sanctionner et légitimer la conquête de l'intuition, et n'a jamais eu d'autre but." Je remercie Gery Huvent pour avoir attiré mon attention sur cet intéressant problème (en le postant à fr.sci.maths) et j'espère que tout ceci aura donné à certains le goût de jouer avec les mathématiques. Pour le plaisir tout simple de la 'découverte' de contrées encore inexplorées.

Autres sites de Mathématiques Experimentales :

Une revue internationale : "Experimental Mathematics" dont les articles sont accessibles ici :
http://www.expmath.org/

De nombreux papiers mathématiques (à nouveau fonctionnel!) :
http://fermivista.math.jussieu.fr/

Le 'Prepint Network' :
http://kratos.osti.gov:2009/ppnsearch.html

Sur la reconnaissance des constantes numériques par PSLQ voir :
http://www.cecm.sfu.ca/organics/papers/bailey

Des outils d'intégration symbolique :

'mupad' (genre maple mais téléchargeable)

http://www.mupad.de 'maxima' (version plus ancienne de MacSyma libre depuis peu) : http://www.ma.utexas.edu/users/wfs/maxima.html '

The Integrator' (Mathematica at work): http://integrals.wolfram.com/

'The MathServ Calculus Toolkit' : http://mss.math.vanderbilt.edu/~pscrooke/toolkit.html

'EZ-Face' site specialisé dans le calcul des sommes d'Euler : http://www.cecm.sfu.ca/cgi-bin/EZFace/zetaform