jeudi 14 février 2019

polexpr et xint : applications (2)

Le polynôme de Wilkinson 

Le polynôme de Wilkinson est d'apparence très simple, sous sa forme factorisée, il est défini par :
Il y a une très belle étude sur Wikipedia :
Le mathématicien  James H. Wilkinson qui a donné son nom au polynôme a titré son article : "The perfidious polynomial". Pour ceux qui souhaitent lire l'article original, voici le lien où on peut le télécharger.
Les extensions polexpr et xint de Jean-François Burnol ont déjà été présentées dans un précédent article :
elles sont disponibles sur le CTAN :

C'est polexpr qui a permis de réaliser la magnifique étude illustrée de ce polynôme, où on verra pourquoi J. H. Wilkinson le qualifia de ``perfide''. Pour les calculs avec les logarithmes une extension ``poormanlog.sty'' est nécessaire, elle est présente dans le répertoire et dans le fichier zippé.  Tous les fichiers sont dans ce répertoire :
Ce document est l’œuvre de Jean-François Burnol, Juergen Gilg et Thomas Soell. J'ai très modestement aidé à mettre au point les illustrations avec PSTricks, mais les calculs à partir de la forme développée des polynômes (voir le document) nécessitent une précision qui dépasse les possibilités de Postscript, la précision des calculs est discutée en détail dans le document. L'extension polexpr a permis de lever les limitations de Postscript et de dessiner les courbes.
Si un lecteur de cette page est aussi un utilisateur de Tickz et s'il souhaite en donner une version et la faire partager, il sera le bienvenu.
Je ne donne ici que quelques images, il faut lire le document et regarder le listing pour apprécier la puissance et la simplicité de l'extension polexpr. Par exemple, la syntaxe utilisée pour définir le polynôme s'écrit :
\poldef W(x):= mul(x-i, i=1..20);
L’appel $\PolTypeset{W}$ permet de l’afficher sous forme développée :
W(x) =
x20− 210x19 + 20615x18
− 1256850x17 + 53327946x16 − 1672280820x15
 + 40171771630x14 − 756111184500x13  +11310276995381x12
-135585182899530x11+1307535010540395x10
−10142299865511450x9+63030812099294896x8
−311333643161390640x7+1206647803780373360x6
-3599979517947607200x5+8037811822645051776x4
−12870931245150988800x3+13803759753640704000x2
−8752948036761600000x+2432902008176640000

 Wilkinson's polynomial
 sgn(W(x)) log(1 + |W(x)|)
Calculs effectués avec postscript

 Calculs effectués avec polexpr et poormanlog.
La particularité du polynôme de Wilkinson est d’être extrêmement sensible aux plus infimes variations des coefficients. On le voit sur le graphique ci-dessus, où la nouvelle courbe est celle des (logarithmes des) valeurs du polynôme obtenu par la modification du coefficient du terme en x19 en lui ajoutant −2−23. Cette minime variation sur le coefficient sous-dominant a eu un effet dévastateur à partir de x = 9 : les racines du polynôme, sauf celle proche de x = 20 sont devenues complexes !
L’extension polexpr ne sait pas faire les calculs avec des complexes mais est capable de déterminer avec une précision arbitraire tous les zéros réels et leurs multiplicités :
(mult. 1) Z1 = 0.99999999999999999999 . . .
(mult. 1) Z2 = 2.00000000000000000976 . . .
(mult. 1) Z3 = 2.99999999999980523297 . . .
(mult. 1) Z4 = 4.00000000026102318914 . . .
(mult. 1) Z5 = 4.99999992755153790956 . . .
(mult. 1) Z6 = 6.00000694395229570720 . . .
(mult. 1) Z7 = 6.99969723393601394867 . . .
(mult. 1) Z8 = 8.00726760345037685489 . . .
(mult. 1) Z9 = 8.91725024851707049429 . . .
(mult. 1) Z10 = 20.84690810148225691492 . . .

PS : le répertoire contient aussi un petit fichier de calculs de logarithmes avec l'extension poormanlog écrit par Juergen Gilg qui pourra éventuellement servir de mode d'emploi (tests-poormanlog.tex et pdf).

Tous les fichiers concernant les applications des extensions polexpr et xint de Jean-François Burnol présentées dans ce blog et des exemples d'utilisation de celles-ci avec PSTricks sont disponibles aussi sur :



1 commentaire: