mardi 16 avril 2019

Cathédrale Notre-Dame de Paris


Suite à l'incendie qui a dévasté la Cathédrale Notre-Dame de Paris, Jürgen Gilg et Thomas Söll, nos amis allemands de ``l'équipe motivée'', nous ont envoyé un message de sympathie sous la forme d'un gif animé réalisé avec PSTricks et dont vous trouverez les fichiers sources ici :


Nous les remercions de leur délicate attention.
Jean-François et Manuel

lundi 15 avril 2019

La suite de Stern-Brocot



Calcul et représentation graphique avec TeX, xint et PSTricks

 

La « suite diatomique de Stern » peut être définie par la récurrence :

pour n>0: a(2n) = a(n), a(2n+1) = a(n) + a(n+1) avec a(0)=0, a(1)=1.

On utilise aussi parfois la notation fusc(n).

Les références sur cette suite sont nombreuses, on peut citer :

https://fr.wikipedia.org/wiki/Suite_diatomique_de_Stern

et l'article de Jean-Paul Delahaye dans la revue ``Pour la Science'' - n° 420 - Octobre 2012, qu'il met à la disposition des lecteurs :

http://cristal.univ-lille.fr/~jdelahay/pls/227.pdf

Jean-François Burnol s'est attaché à développer plusieurs méthodes codées en TeX  cherchant à élaborer la plus efficace et la plus rapide. 

Afin d'avoir une référence, voici le  résultat obtenu en calculant pour $n=2^{13}-1$ avec mathematica avec le code suivant :

start = SessionTime[];
ListPlot[fusc /@ Range[8191], AxesLabel → {n, HoldForm[fusc[n]]}]
Sow[SessionTime[] - start]

500.8 secondes Donc un peu plus de 8 min.

 

Pour la compilation du fichier, il faut décomposer la durée en fonction des processus. 

Sur un Mac à 2.8 Ghz, pour les 6 pages du document :

$ time latex Suite-Stern-PSTricks-xint
real    0m1.054s
user    0m0.934s
sys    0m0.059s

$ time dvips Suite-Stern-PSTricks-xint.dvi
real    0m0.340s
user    0m0.301s
sys    0m0.022s

$ time ps2pdf Suite-Stern-PSTricks-xint.ps
real    0m6.435s
user    0m6.342s
sys    0m0.041s

 

C'est époustouflant, incroyable n'est-ce pas !

Le document comprend aussi un calcul en postscript, pas aussi rapide que ceux proposés par Jean-François, mais qui n'est pas mal non plus. 

Voici schématiquement les 4 méthodes codées en TeX, écrites par Jean-François Burnol et qui feront le bonheur de tous les utilisateurs de TeX, LaTeX, XeLaTeX et des amateurs de programmation en TeX !

1. Calcul avec TeX de base et \numexpr

2. Approche avec xintexpr mais problèmes de saturation de la mémoire de TeX, seconde approche utilisant directement des macros de xinttools pour éviter ce problème.

3. Utilisation de TeX avec un stockage plus rapide des données numériques en utilisant les paramètres \fontdimen d’une police de caractère fictive, méthode 4 fois plus rapide que la première.

4. Utilisation de \listplot avec la nouvelle primitive \expanded : c'est la méthode la plus rapide et peut-être la plus élégante ? En voici le début, vous lirez la suite dans le document.

« On peut engendrer la suite de STERN (après le zéro initial) par blocs de longueurs des puissances de deux : 1(1) engendre 12(1) qui engendre 1323(1) qui engendre 14352534(1), chaque série provenant de la précédente en intercalant les sommes d’entiers successifs, et les « 1 » terminaux sont utilisés pour engendrer, mais oubliés lorsque l’on fait la concaténation, pour obtenir donc ici les valeurs de fusc(n), pour n=1..15  : 112132314352534...

Il est facile de coder ceci avec des \edef mais ceci empêcherait l’expandabilité. La nouvelle primitive \expanded révolutionne le codage expandable en TeX, comme nous allons l’illustrer maintenant en allant jusque fusc(8191). [...] »

 Pour terminer, Jean-François donne le code qui calcule en une fraction de seconde les 50000 valeurs de fusc(1) à fusc(50000) puis les exporte dans un fichier.

Les fichiers sont disponibles soit ici :

 Suite-Stern-Brocot

soit sur le site officiel de xint-ploexpr :

https://melusine.eu.org/syracuse/G/xint-polexpr/

Images extraites de la documentation :

 

 

 

 



 


 

 


       

 

 

New version of pst-marble 1.5


The actual version 1.5 of pst-marble ships with some changes and new options which are introduced within CHANGES.md (part of the package) and of course within its documentation:
The most important changes will be illustrated.
Aubrey Jaffer introduces a very powerful action "jiggle" which now replaces "wiggle".
"jiggle" needs 5 arguments in the following order:
  1. an angle (in degrees) $\theta$ which defines the direction of one axis.
  2. the period (or wave length $\lambda$) in points
  3. the displacement (or offset $\Omega$) in points
  4. A an amplitude in points
  5. B an amplitude in points
The coefficients A and B are the amplitudes of the movement parallel and perpendicular to the direction axis $\theta$.  Every pixel receives a mathematical transformation by the following equations (360 instead of $2\pi$ cause postscript needs the angles in degrees):
 \[a = 360 \frac{x \sin(\theta) + y \cos(\theta) +\Omega}{\lambda}\]
\begin{align*}
x'&=x+\frac{1}{2}A\sin(a)\cdot\sin(\theta)+\frac{1}{2}B\cos(a)\cdot\cos(\theta)\\
y'&=y+\frac{1}{2}A\sin(a)\cdot\cos(\theta)-\frac{1}{2}B\cos(a)\cdot\sin(\theta)
\end{align*}


With the following parameters we get:


\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=0\quad B= 45 \]

\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=45\quad B= 0 \]
If we consider the surface as divided into parallel bands of infinitesimal width perpendicular to the $\theta$ direction, the displacements in the $\theta$ direction compress and dilate the distances between the bands.

\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=45\quad B=45 \]

Another quite spectacular action created by Aubrey Jaffer is "shading". It needs 4  arguments :
  1. an angle (in degrees) $\theta$ which defines the direction of one axis.
  2. the period (or wave length $\lambda$) in points
  3. the displacement (or offset $\Omega$) in points
  4. A an amplitude in points which can be different to that of "jiggle".

 The command "shadings" simulate the lightening and darkening of the paint transferred to the paper by pulling the paper from the bath at uneven speeds. Shading is always done for sprays, but only when "oversample>0" is taken as option.
Ainsi :

Here some nice new marblings with the new version:

It is a fashion to draw hearts, leaves or other patterns on the surface of cream coffee, here is the one of pst-marble:

 The bouquet - the psychedelic version:

To finish here is what one could obtain with a figure drawn on the surface of the bath by applying to him different actions "jiggle". We take as an example a rectangular grid on which is drawn the head of a tiger.

And now let's apply the jiggle action:

dimanche 14 avril 2019

pst-marble version 1.5

La version 1.5 de pst-marble apporte de nombreux changements et nouveautés indiqués dans le fichier CHANGES.md inclus dans le package et décrits dans la documentation :


Je voudrais simplement signaler ici les plus importants.
Aubrey Jaffer a introduit une action puissante nommée "jiggle" en remplacement de "wiggle".
"jiggle" nécessite 5 arguments, dans l'ordre :
  1. un angle en degrés $\theta$ qui définit la direction d'un axe.
  2. la période(ou longueur d'onde $\lambda$) en points des déformations à la surface du liquide
  3. un décalage(ou offset $\Omega$) en points
  4. A une amplitude en points
  5. B une amplitude en points
Les coefficients A et B sont les amplitudes des mouvements parallèle et perpendiculaire (respectivement) à l'axe de direction $\theta$.  Chaque pixel subit la transformation mathématisée par les équations suivantes (360 au lieu de $2\pi$ car postscript nécessite des angles en degrés) :
\[a = 360 \frac{x \sin(\theta) + y \cos(\theta) +\Omega}{\lambda}\]
\begin{align*}
x'&=x+\frac{1}{2}A\sin(a)\sin(\theta)+\frac{1}{2}B\cos(a)\cos(\theta)\\
y'&=y+\frac{1}{2}A\sin(a)\cos(\theta)-\frac{1}{2}B\cos(a)\sin(\theta)
\end{align*}
Suivant les valeurs des paramètres nous obtenons :
\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=0\quad B= 45 \]
\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=45\quad B= 0 \]
Si nous considérons la surface comme divisée en bandes parallèles de largeur infinitésimale perpendiculaires à la direction $\theta$, les déplacements dans la direction $\theta$ compriment et dilatent les distances entre les bandes.
\[ \theta=0\quad \lambda=200\quad \Omega=-50 \quad A=45\quad B=45 \]

L'autre action particulièrement spectaculaire créée par Aubrey Jaffer est "shading". Elle nécessite 4  arguments :
  1. un angle en degrés $\theta$ qui définit la direction d'un axe.
  2. la période(ou longueur d'onde $\lambda$) en points des déformations à la surface du liquide
  3. un décalage(ou offset $\Omega$) en points
  4. A une amplitude en points qui peut être différente de celle de "jiggle".
Les commandes "shadings" simulent l'éclaircissement et l'assombrissement de la peinture transférée sur le papier en tirant le papier du bain à des vitesses inégales. L'ombrage est toujours effectué pour les pulvérisations, mais seulement lorsque "oversample>0" pour les actions.
Ainsi :
Voici quelques nouveaux papiers marbrés obtenus avec cette version :


C 'est une mode que de dessiner des cœurs, des feuilles ou d'autres motifs à la surface des cafés crème, voici celui de pst-marble :
 Le bouquet version psychédélique :


Pour terminer voici ce qu'on pourrait obtenir avec une figure dessinée sur la surface du bain en lui appliquant différentes actions "jiggle". Nous prenons comme exemple un quadrillage rectangulaire sur lequel est dessinée la tête d'un tigre.
Et appliquons-lui les transformations de jiggle :





jeudi 11 avril 2019

polexpr et xint : applications (15)

Les calculs de Haute-Précision avec XINT


Les extensions  XINT et POLEXPR de Jean-François Burnol, ouvrent un univers nouveau et exceptionnel pour tous les utilisateurs de TeX, LaTeX, XeLaTeX, dans le calcul formel avec POLEXPR et dans le calcul de très grande précision avec XINT. Comme ces extensions sont codées avec TeX, on pourrait penser que ces opérations ne s'effectuent pas très rapidement, il n'en est rien, la rapidité des calculs est comparable à celle de Maple ou de Mathematica. Pour le vérifier, il y a dans les pages de ce blog, de nombreuses applications de XINT et POLEXPR et je recommande en particulier le polynôme de Rump.
Cette fois-ci, c'est la précision des calculs qui est mise valeur dans quelques illustrations réalisées avec PSTricks.
Encore une fois tous les calculs sont faits avec xint !
Vous trouverez tous les fichiers dans le répertoire :
le fichier zippé les contenant tous.
Tous les exemples, dont quelques images sont affichées ci-dessous (extraites de la documentation) ont  été réalisés par les membres de l'équipe motivée : Jean-François Burnol, Jürgen Gilg, Manuel Luque et Thomas Söll.


dimanche 7 avril 2019

Mise-à-jour de XINT

Note d'information

Certaines applications "polexpr et xint" numérotées de 1 à 14,  utilisaient  le fichier "poormantrig.tex" pour les fonctions trigonométriques. Celui-ci est devenu obsolète. La nouvelle version de xint : 1.3e 2019-04-05 disponible sur le serveur du CTAN :
contient la bibliothèque "xinttrig" qui est automatiquement chargée par "xintexpr". Elle fournit des fonctions trigonométriques directes et inverses utilisant des degrés ou des radians avec une précision allant jusqu'à (un peu moins de) 60 chiffres.

Si vous êtes utilisateur de MiKTeXhttps://miktex.org/
la mise à jour est prête : ouvrez MiKTeX Console et cliquez sur Updates.

"poormantrig.tex" est rendu public pour un temps limité Si on a xint 1.3e, alors automatiquement il s'efface et ne charge pas (de toute façon il est incompatible).
Sur le site de :

qui est le site officiel des applications de "polexpr et xint", vous trouverez cette version de "poormantrig.tex" qui s'auto-annihile dès que xint 1.3e est installé, dans la rubrique intitulée : "Fichiers obsolètes". En téléchargeant cette version, cela vous permettra de patienter quelques semaines avant de pouvoir installer TeXLive 2019 et xint 1.3e qui viendra avec le TeXLive 2019.

vecteurs.sty a été mis à jour sur le site de :

dans le répertoire "Fichiers nécessaires".



samedi 6 avril 2019

Point de Monge d'un tétraèdre

Point de Monge d’un tétraèdre, sphère circonscrite, centre de gravité

 

Victor Thébault commence son livre “Parmi les belles figures de la géométrie dans l’espace”, sous-titré (Géométrie du tétraèdre), par l’étude du point de Monge.
«Dans un mémoire intitulé “Sur la pyramide triangulaire” Monge montre que les plans menés par les milieux des arêtes d’un tétraèdre perpendiculairement aux arêtes opposées concourent en un point, et que ce point est le symétrique du centre de la sphère circonscrite à ce tétraèdre par rapport à son centre de gravité.»
Pour une démonstration plus récente, celle publiée dans la revue “Feuille de Vigne n°112” de l’IREM de Dijon par Tristan Deray,
me paraît excellente.
Gilbert Julia (http://gjmaths.pagesperso-orange.fr/)  propose une belle et concise démonstration :
je cite :
«On pourrait ainsi démontrer, de façon peut-être plus élégante, que les six plans médiaux ont un point commun : puisque les six plans médiateurs ont en commun le centre O de la sphère circonscrite au tétraèdre, les six plans médiaux qui en sont leurs images par la symétrie centrale de centre G ont en commun l’image de O par cette symétrie centrale
Voici 2 illustrations de cette propriété, toutes les deux réalisées avec PSTricks, mais dont les calculs sont faits avec postscript pour l'une et avec xint avec l'autre, cette dernière a été écrite par Juergen Gilg.
Tous les fichiers sont dans le répertoire :
Diverses constructions relatives au tétraèdre ont été ajoutées dans des fichiers séparés : trace des plans médiaux, des plans médiateurs et coupes du tétraèdre suivant ces plans.
Quelques images :
Un tétraèdre et les milieux des arêtes.
Un tétraèdre, la sphère circonscrite, point de Monge et centre de gravité.
Les coupes d'un tétraèdre par les 6 plans médiaux, en voici une :
 Les traces des plans médiateurs, en voici une :
Les coupes d'un tétraèdre par les 6 plans médiateurs, en voici une :

Une image réalisée par Juergen Gilg avec PSTricks et xint :