mardi 28 avril 2020

calcul de séries et bug dans wxmaxima


Le calcul formel/numérique sur ordinateur et son utilisation  dans l'enseignement des mathématiques fait beaucoup fantasmer :certain pensent qu'avec le bon logiciel on peut résoudre n'importe quelle équation bien mieux qu'un humain et sans avoir besoin d'étudier beaucoup de mathématiques d'autres n'ont aucune confiance en ces outils et pensent qu'il ne peuvent que diminuer nos capacités de calcul et ensuite de raisonnement en mathématiques. La réalité me semble souvent bien plus complexe que cela et la confrontation des deux approches m'amène parfois à comprendre bien plus de choses que la question de départ ...  un petit exemple au travers des formes closes que je viens d'obtenir pour les deux séries Fourier ci-dessous :

deux séries numériques calculées par le théorème de Dirichlet




Pour les besoins d'un cours d'analyse Harmonique  je suis souvent à la recherche de fonction développable en séries de Fourier pour tester la compréhension par les étudiants du théorème de Dirichlet ou de la formule de Parseval. Un des moyens classique de le faire est de demander de calculer la valeur d'une série donc les coefficients sont directement relié à la série de Fourier. C'est en étudiant la série de Fourier associée à la fonction $2\pi$-périodique égale à $\cos(x)$ sur $0[,\pi[$  et à $0$  sur $[-\pi,0[$ que j'ai pu calculer les 2 séries en question.

Je me sers du logiciel de calcul formel (wx)maxima pour rechercher  des fonctions dont les coefficients de Fourier ne sont pas trop compliqués, puis ensuite pour vérifier  mes résultats avant de poser mon sujet (et éviter  une erreur de calcul dans la rédaction d'un sujet de DS). Quand je fais cette vérification  je suis presque systématiquement impressionné de voir  que (wx)maxima  trouve plus ou moins la même forme close que moi ...  mais parfois il donne une forme très compliquée  utilisant certaines fonction spéciales peut connues comme $\rm erf$, $\Psi_0$ ou la fonction W de Lambert. Dans ce cas je compare les valeurs approchées des deux formules qui coïncident à $10^{-16}$  ou pas !


Dans le cas présent  j'obtenais une confirmation nette du  résultat  pour la première série :
$$\sum_{k=1}^\infty {k\sin(k\pi/2)\over 4k^2-1}=
\frac{\sqrt{2} {\arctan}\left( \frac{\sqrt{2}}{\sqrt{2}+2}\right) -\sqrt{2} {\arctan}\left( \frac{\sqrt{2}}{\sqrt{2}-2}\right) }{8}
=
{\sqrt{2}\pi\over 16}\approx 0.2776801836348976$$

( avec une formule utilisant $\arctan$)  mais pas pour la deuxième série  avec des valeurs numériques complètement incompatibles :
$$\frac{10 \sqrt{3}  e-5 {{3}^{\frac{3}{2}}}\, \sqrt{{\pi} }  i {\rm erf}\left(  i\right) }{48}\approx 2.564242426927912\dots \neq \frac{\sqrt{3} {\pi} }{16}\approx 0.3400873807939158\dots $$

Avant de conclure que (wx)maxima possède un bug  il est bon de faire d'autre vérification et de chercher de quelle partie de (wx)maxima provient l'erreur.J'ai commencé par vérifier  avec d'autres outils de calculs, d'abord avec SAGE  très apprécié des fans de python  mais qui dans la pratique ne fait souvent rien d'autre que transférer les calculs à maxima! On trouve donc la même formule et la même valeur approchée en utilisant SAGE :


Une autre source  très pratique pour vérifier ce de type de  résultat est de poser la question au moteur de calcul wolframalpha  accessible librement en ligne. Et là double surprise :
  • cet outil trouve une formule close très différente de celle obtenue avec wxmaxima  (elle fait appel à une fonction spéciale $F_1$ et des racines de $-1$)
  • mais la valeur approchée correspond bien à celle de $ {\sqrt{3}\pi\over 16}$


D'un côté c'est rassurant car wolframalpha valide la formule que j'ai calculé, mais d'un autre côté  quel est le bug dont est victime wxmaxima :

  • est ce la formule  trouvée qui est fausse ?
  • est ce la valeur approchée  qui est mal calculée ?
un moyen simple de trancher est de demander à wolframalpha de faire l'évaluation numérique de la forme close trouvée par wxmaxima : 



Conclusion wxmaxima ne fait pas d'erreurs en calculant la valeur approchée, mais en cherchant la forme close qui est fausse !

En discutant  sur la mailing liste des développeurs de Maxima  j'ai pu découvrir que cette recherche de forme close  est faite par l'algorithme de Gosper  qui a été implémenté pour la première fois en 1970 sur le système de calcul formel MACSYMA (l’ancêtre de maximax/wxmaxima).  Cet algorithme  ramène le problème à la recherche  d'une expression des coefficients de la série  en terme de  fractions rationnelles  d'autres coefficients dont on peut déduire  la valeur des série. Dans les faits cette fraction est très souvent un polynôme  dont le degré peut être borné apriori ... en bref l'algorithme de Gosper  revient à résoudre un (gros) système linéaire d'équations. Pour ceux qui s'intéressent au problème le rapport de bug est sur sourceforge: https://sourceforge.net/p/maxima/bugs/3630/

1 commentaire:

Pour écrire des formules mathématiques vous pouvez utiliser la syntaxe latex en mettant vos formules entre des "dollars" $ \$....\$ $ par exemple :
- $\sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}$ s'obtient avec \sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}
- $\mathbb R$ s'obtient avec {\mathbb R} et $\mathcal D$ s'obtient avec {\mathcal D}
- pour les crochets $\langle .,. \rangle$ dans les commentaires utilisez \langle .,. \rangle
vous pouvez écrire du html dans les commentaires :
- italique <i> ... </i> gras <b> ... </b>
- lien <a href="http://adresse "> .... </a>