mercredi 20 février 2019

polexpr et xint : applications (4)

Étude de suites avec XINT

Juergen Gilg propose une étude de suites en utilisant l'extension xint de Jean-François Burnol, on peut télécharger ce package sur le serveur du CTAN :
il contient différents modules qui sont utilisés dans ce document.
Il faut aussi récupérer l'extension poormanlog qui permet le calcul des logarithmes en base 10 et des puissances fractionnaires de 10 avec environ 9 chiffres de précision.
La documentation de XINT décrit toutes les commandes nécessaires permettant l'étude d'une grande variété de suites avec des paramètres permettant d'affiner cette étude ainsi de nombreux exemples.
Le document de Juergen Gilg illustre quelques cas  :
  • suites de valeurs de fonction dont les suites imbriquées avec nombres entiers ou décimaux avec une application du calcul du nombre d'Euler ;
  • suites définies par récurrence avec diverses applications comme les suites constantes, la méthode de Héron pour calculer la racine carrée. Voici le tableau obtenu pour sqrt(2) :
 et l'animation pour sqrt(10) réalisée avec le package animate d'Alexander Grahn :
 l'animation a été réalisée dans l'environnement PSTricks et les calculs effectués avec XINT.
D'autres applications complètent ce document comme l'algorithme de Brent-Salamin pour calculer &pi et les suites récursives.
Le document suites-xint.zip est dans le répertoire :

lundi 18 février 2019

polexpr et xint : applications (3)

La date de Pâques change d'une année à l'autre. De quelle manière est-elle déterminée ? Le site de la Libre Belgique :
en rappelle la définition suivante établie par le Concile de Nicée en 325 :

<< ce serait le premier dimanche après la pleine lune qui suit l'équinoxe de printemps, le 21 mars. Dès lors, Pâques tombe au plus tôt le 22 mars et au plus tard le 25 avril. À titre d'exemple, en 2014, Pâques a eu lieu le 20 avril; en 2015, elle a lieu le 5 avril; et en 2016, le 27 mars. >>
Il existe plusieurs méthodes pour calculer cette date, les auteurs de cet article(Jean-François Burnol et Juergen Gilg)  ont choisi la méthode du grand mathématicien Gauss et pour faire les calculs l'extension xint :
Une occasion pour ceux qui ne connaissent pas xint  de se familiariser avec sa syntaxe.
Les fichiers JouerAvecXint.tex et JouerAvecXint.pdf sont accessibles ici :
le tableau suivant, qui conclut le document, établit  la date de Pâques des années 2016 à 2019 ainsi que des fêtes qui en dépendent.


dimanche 17 février 2019

L'encensoir de Botamufeiro (Juergen Gilg)

« Suspendu par une corde attachée au haut de la croisée de la cathédrale, l’encensoir gigantesque est dévié, d’une poussée, de sa position de repos verticale. Pendant qu’il se balance, huit hommes tirent sur une corde qui soulève l’encensoir lorsque celui-ci passe par la verticale et relâchent la corde  quand l’encensoir est au plus haut. Les tireurs, sous les ordres d’un conducteur, amplifient ainsi les oscillations de l’encensoir, jusqu’à ce que celui-ci monte à une hauteur de 21 mètres, décrit un arc de 65 mètres de longueur, et passe en vrombissant à la vitesse de 68 kilomètres à l’heure en un point situé à ras du sol. »
« . . . le dispositif actuel a, en son centre, deux tambours de châtaignier, de 58 centimètres et 29 centimètres de diamètre, dont l’axe commun repose sur la carcasse métallique. . . . L’encensoir actuel est en laiton argenté. »
« La corde dont une extrémité est dans les mains des tireurs s’enroule d’abord autour du tambour de petit diamètre, puis autour du tambour de grand diamètre, et redescend vers le sol ; la seconde extrémité est nouée à l’encensoir. Quand l’encensoir et la corde passent par la position verticale, les hommes tirent sur l’autre extrémité de la corde qui fait tourner le petit tambour de plus d’un tour et demi, lequel entraîne le grand tambour et la même corde soulève ainsi l’encensoir d’environ trois mètres. Ce dispositif à double tambour amplifie les déplacements. Les tireurs relâchent la même longueur de corde lorsque l’encensoir atteint le point d’amplitude maximale. Après la poussée initiale, l’amplitude angulaire est d’environ 13 degrés. En 80 secondes et 17 demi-périodes d’oscillation de l’encensoir, l’amplitude maximale de 82 degrés est atteinte, l’encensoir atteignant un point situé à un demi-mètre sous la voûte.»
Cité d’un article “Pour la science” numéro 155, de Juan Sanmartin Losada.
La vidéo d'une cérémonie du Botafumeiro à la cathédrale de Saint-Jacques-de-Compostelle :
Une animation et quelques figures de l'encensoir de Botafumeiro par Juergen Gilg.
Les fichiers sont dans le répertoire :


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).





jeudi 7 février 2019

polexpr et xint : applications (1)

polexpr et xint sont deux packages créés par Jean-François Burnol, disponibles sur le serveur du CTAN :

 xint qui permet les calculs sur les très grands nombres est constitué de plusieurs modules.
polexpr permet de faire du calcul formel et numérique avec des polynômes ayant des coefficients rationnels (ou en notation scientifique) :  calcul de dérivées, de PGCD, calcul du « contenu de Gauss » (générateur de l'idéal fractionnaire engendré par les coefficients), possibilité de trouver toutes les racines réelles avec une précision arbitrairement grande (et leurs multiplicités) et d'identifier au passage toutes les racines rationnelles, et de produire le polynôme obtenu en supprimant toutes les racines rationnelles, ou en supprimant toutes les multiplicités.
Pour le moment, polexpr (qui en est à la version 0.7.4) a les limitations suivantes :
  1. il ne connaît pas les nombres complexes,
  2. il ne connaît pas les fractions rationnelles (mais on peut ajouter des macros, comme dans le travail de Jürgen Gilg et Thomas Söll),
  3. il ne sait manipuler qu'une seule variable formelle à la fois,
  4. il représente intérieurement les polynômes par la suite de leurs coefficients, ce qui rend peu efficace la manipulation de polynômes de grands degrés comme x^1000-1.
 Les outils fournis ces packages sont très puissants et leur exécution très rapide. Jürgen Gilg et Thomas Söll séduits et enthousiasmés par les possibilités offertes pas ces packages ont écrit des applications à partir du travail de Jean-François Burnol et ont fait des liens, quand il  était utile d'avoir des représentations graphiques, avec PSTricks.
 Les commandes écrites par Jürgen Gilg et Thomas Söll sont dans le préambule des documents, ils envisagent d'en faire un package avec la documentation.
 Les documents, source .tex et pdf sont dans le répertoire :
Le fichier zippé les contient tous.
 Il m'est difficile de donner un aperçu de cette première série d'applications(j'espère que Jürgen Gilg et Thomas Söll en enverront d'autres) dans cette page, car elle n'est pas configurée pour afficher des équations mathématiques.
Dans polynom-example.tex, la courbe d'équation f'(x)=x^3+7x^2+14x+8 est étudiée, ses dérivées première et deuxième calculées ainsi que l'équation de la tangente en un point, PSTricks en fait les représentations graphiques.
 Dans le fichier Calculations-matrices.tex, vous y verrez une démonstration de la puissance du calcul matriciel exploitant les extraordinaires possibilités des packages polexpr et xint mises en œuvre par Jürgen Gilg et Thomas Söll.
 Dans le fichier RationalFunction.tex, ils étudient une fonction rationnelle, en font calculer les dérivées jusqu'au troisième ordre :

et dessiner les représentations graphiques par PSTricks :





lundi 28 janvier 2019

Cercle tangent extérieurement à 3 cercles

 Je rajoute une précision, communiquée par Juergen Gilg. C'est un sujet qui a été initié sur :
par l'auteur de pseudonyme  `chishimotoji'. De nombreux participants ont développé le sujet dont Juergen Gilg.


Juergen Gilg en collaboration avec Jean-François Burnol pour les calculs, propose une illustration d'un cas particulier du problème d'un cercle tangent à 3 cercles. Un triangle rectangle ABC étant donné, on trace les demi-cercles dont les diamètres sont les côtés, extérieurs au triangle et on détermine le centre et le rayon du cercle  tangent extérieurement aux demi-cercles. On dessine aussi le triangle dont les sommets sont les points de tangence.

Si Juergen Gilg est bien connu des lecteurs de ces pages, précisons que Jean-François Burnol est l'auteur de nombreux packages touchant aux mathématiques et en particulier sur les calculs avec les grands nombres, on aura un aperçu de ses travaux  déposés sur le CTAN en allant sur :


En utilisant le package animate d'Alexander Grahn,  vous aurez la possibilité de créer une animation interactive incluse dans un pdf ou au format SVG sur l'un des principaux navigateurs. Voici celles créées par Juergen Gilg :



\documentclass[dvipsnames]{article}
\usepackage{pstricks,pst-eucl,animate}

% Authors : Juergen Gilg and Jean-François Burnol

\begin{document}
\begin{center}
\begin{animateinline}[%
    controls,
    palindrome,
    begin={\begin{pspicture}(-5.5,-5.5)(9.5,12.5)},
    end={\end{pspicture}}
    ]{7}% frame rate = 2 image/s
\multiframe{20}{rA=4+0.2,rB=3+-0.05}{%
\pstVerb{%
%% Enter the coordinates of the points of the rectangled triangle
%% Chosen as within the given cercle.pdf (Pythagorean triple 3, 4, 5 for a, b, c)
/xA 0 def
/yA 0 def
/xB \rA\space def
/yB 0 def
/xC 0 def
/yC \rB\space  def
%% Midpoints of the sides
/mAx xB xC add 2 div def
/mAy yB yC add 2 div def
/mBx xA xC add 2 div def
/mBy yA yC add 2 div def
/mCx xA xB add 2 div def
/mCy yA yB add 2 div def
%% Calculating the radius of the half circles along the sides of the
%% rectangled triangle
/rAB xA xB sub 2 exp yA yB sub 2 exp add sqrt 2 div def
/AB rAB 2 mul def
/rAC xA xC sub 2 exp yA yC sub 2 exp add sqrt 2 div def
/AC rAC 2 mul def
/rBC xB xC sub 2 exp yB yC sub 2 exp add sqrt 2 div def
/BC rBC 2 mul def
/DENOM BC 5 mul AB 3 mul add AC 3 mul add def
%% JFB formula
%% X = 2 AB (AB + BC) / (5 BC + 3 AB + 3 AC)
%% Y = 2 AC (AC + BC) / (5 BC + 3 AB + 3 AC)
%% R = 2 (BC + AB) (BC + AC) /  (5 BC + 3 AB + 3 AC)
/x0 AB BC add AB mul 2 mul DENOM div def
/y0 AC BC add AC mul 2 mul DENOM div def
/r0 BC AB add BC AC add mul 2 mul DENOM div def
%% JFB formula for the tangent points
%% P1 = (2(a+c)c, -(a+b+c)c) / (3a + b + 2c)
%% P2 = (-(a+b+c)b, 2(a+b)b) / (3a + 2b + c)
%% P3 = ((a+b+c)(a+c), (a+b+c)(a+b))/ (3a + 2b + 2c)
/p1x BC AB add AB mul 2 mul BC 3 mul AC add AB 2 mul add div def
/p1y BC AC add AB add AB mul BC 3 mul AC add AB 2 mul add div neg def
/p2x BC AC add AB add AC mul BC 3 mul AC 2 mul add AB add div neg def
/p2y BC AC add AC mul 2 mul BC 3 mul AC 2 mul add AB add div def
/p3x BC AC add AB add BC AB add mul BC 3 mul AC 2 mul add AB 2 mul add div def
/p3y BC AC add AB add BC AC add mul BC 3 mul AC 2 mul add AB 2 mul add div def
}
%% Setting the nodes of the points of the triangle
\pstGeonode[PointSymbol=none,PosAngle={225,-45,90}](!xA yA){A}(!xB yB){B}(!xC yC){C}
%\pspolygon[linecolor=blue,linejoin=1](A)(B)(C)
%% Setting the nodes of the midpoints of the triangle sides
\pstMiddleAB[PointSymbol=none,PointName=none]{A}{B}{MAB}
\pstMiddleAB[PointSymbol=none,PointName=none]{A}{C}{MAC}
\pstMiddleAB[PointSymbol=none,PointName=none]{B}{C}{MBC}
%% Full circles along the sides of the triangle (not needed!)
%\pscircle(MAB){!rAB}
%\pscircle(MAC){!rAC}
%\pscircle(MBC){!rBC}
%% Drawing the half circles along the sides of the triangle
\pstArcOAB[linecolor=lightgray]{MAB}{A}{B}
\pstArcOAB[linecolor=lightgray]{MAC}{C}{A}
\pstArcOAB[linecolor=lightgray]{MBC}{B}{C}
%% JFB circle and tangent points
\pnode(!x0 y0){O}
\pnode(!p1x p1y){P1}
\pnode(!p2x p2y){P2}
\pnode(!p3x p3y){P3}
\pscircle[linecolor=Green](O){!r0}
\psdot[linecolor=Green](O)\uput[-90](O){\textcolor{Green}{$O$}}
\psdot[linecolor=red](P1)\uput[-90](P1){$P_1$}
\psdot[linecolor=red](P2)\uput[180](P2){$P_2$}
\psdot[linecolor=red](P3)\uput[90](P3){$P_3$}
\pspolygon[linejoin=1,linecolor=red,linewidth=0.5pt](P1)(P2)(P3)
\psline[linecolor=Green]{->}(O)(P3)
\pstMiddleAB[PointSymbol=none,PointName=none]{O}{P3}{rad}
\uput{7pt}[0](rad){\footnotesize\textcolor{Green}{$r$}}
\pspolygon[linecolor=blue,linejoin=1](A)(B)(C)
}
\end{animateinline}
\end{center}
\end{document}



dimanche 27 janvier 2019

Nouvelle version de pst-marble 1.1

La nouvelle version de pst-marble (1.1) est disponible sur le serveur du CTAN :
Les changements sont décrits dans le fichier : CHANGES-1.md
Cette version est incompatible avec la précédente car Aubrey Jaffer a simplifié l'écriture des commandes de base des actions, en a renommé certaines et ajouté de nouvelles, ceci afin de permettre à tous les éventuels utilisateurs, en particulier à ceux qui ne sont pas familiers du langange postscript, d'expérimenter sans difficulté la simulation de la création de papiers marbrés avec ce package.

Cependant les exemples créés avec la version précédente sont aisément adaptables. La superbe documentation écrite par Gilg Juergen reprend tous les exemples de la version 1.0, vous pourrez constater que les commandes sont maintenant plus simples à écrire, d'autres exemples sont inclus en supplément de la documentation.
Juergen Gilg a réalisé une animation au format SVG  en utilisant le package animate d'Alexander Grahn :

Voici 3 exemples qui sont sur le CTAN et dont j'ai rajouté une commande pour inverser les couleurs originales dans deux d'entre eux.

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[
colors={
  [0.176 0.353 0.129]
  [0.635 0.008 0.094]
  [0.078 0.165 0.518]
  [0.824 0.592 0.031]
  [0.059 0.522 0.392]
  [0.816 0.333 0.475]
},
actions={
      0    0 600 colors 4 get drop
   -200  -90 100 colors 5 get drop
   -200 -200 200 colors 0 get drop
   -200  200 200 colors 1 get drop
    200 -200 200 colors 2 get drop
    200  200 200 colors 3 get drop
% Commenting vortex gives a fine result ...
  0 0 -32e3 750 vortex
  250 0 [ 120 80 ] 20 -100 20 stir
   0 -500 850 -30 15 colors 2 get 5 50 arc-drops
   0 -500 840 -30 16 colors 1 get 5 50 arc-drops
   0 -500 850 -30 15 colors 5 get 5 50 arc-drops
   0    0 150   0 15 10 [105 160 99] 35 20 spiral-drops
}]
\psMarble[drawcontours,linewidth=0.2,bckg=false,
actions={
      0    0 600 [0 0 0] drop
   -200  -90 100 [0 0 0] drop
   -200 -200 200 [0 0 0] drop
   -200  200 200 [0 0 0] drop
    200 -200 200 [0 0 0] drop
    200  200 200 [0 0 0] drop
  0 0 -32e3 750 vortex
  250 0 [ 120 80 ] 20 -100 20 stir
   0 -500 850 -30 15 [0 0 0] 5 50 arc-drops
   0 -500 840 -30 16 [0 0 0] 5 50 arc-drops
   0 -500 850 -30 15 [0 0 0] 5 50 arc-drops
   0    0 150   0 15 10 [0 0 0] 35 20 spiral-drops
}]
\end{pspicture}
\end{document}

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\pstVerb{
/inverse-color {
    /rgb exch def
    [ rgb {1 exch sub } forall ]
} bind def }%
\begin{pspicture}(-6,-6)(6,6)
\psMarble[
          viscosity=-1000,bckg=false,
colors={
  [0.176 0.353 0.129] inverse-color
  [0.635 0.008 0.094] inverse-color
  [0.078 0.165 0.518] inverse-color
  [0.824 0.592 0.031] inverse-color
  [0.059 0.522 0.392] inverse-color
  [0.816 0.333 0.475] inverse-color
},
actions={ 1.2 1.2 scale
  0 0 35 colors 35 concentric-rings
  0 350 shift
  180 [ 20 50 25 tines ] 40 200 31 rake
  90 {0.75 mul sin -120 mul} wiggle
  180 [ 3 600 -150 tines ] 40 200 31 rake
  90 {0.75 mul sin 240 mul} wiggle
  180 [ 3 600 150 tines ] 40 200 31 rake
  90 {0.75 mul sin -120 mul} wiggle
}]
\end{pspicture}
\end{document}

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-7)(5,7)
\pstVerb{
/inverse-color {
    /rgb exch def
    [ rgb {1 exch sub } forall ]
} bind def }%
\psMarble[
      colors={
[0.98 0.89 0.56]   inverse-color
[0.357 0.525 0.13] inverse-color
[0.2 0.05 0.015]   inverse-color
[0.07 0.41 0.255]  inverse-color
[0.87 0.63 0.051]  inverse-color
[0.98 0.89 0.56]   inverse-color
},
    actions={
0 100 50 colors 25  concentric-rings
 /signe 1 def
  100 100 1000 {/radius exch def
  0 0 [radius] 10 60 signe mul 50 stir
    /signe signe neg def
    } for
     90 [ 7 200 200 tines ] 40 200 31 rake
    -90 [ 7 200 100 tines ] 40 200 31 rake
     0 {2 mul sin 20 mul} wiggle
   }](10,14)
\end{pspicture}
\end{document}