Expériences d'un matheux sous Linux
(Image du site www.myfreewallpapers.net)
Quelques programmes à télécharger
- Cppp percolation de premier passage/first-passage percolation
- Mastermind des chiffres (en C++) C'est la partie chiffres du jeu "Mastermind Mot et Chiffres", voir ici
- ALGEBRA.PAS (en Pascal, compatible Free Pascal) Bibliothèque de calcul sur les polynômes
- MODULOP.PAS (en Pascal, compatible Free Pascal) Bibliothèque de calcul modulaire
- BERLEKAM.PAS (en Pascal, compatible Free Pascal) Implémentation de l'algorithme de Berlekamp (d'après Knuth) utilise algebra,modulop
- RPN.PAS (en Pascal, compatible Free Pascal) Bibliothèque de gestion d'un système de pile
- DERIVE.PAS (en Pascal, compatible Free Pascal) Calcul formel de dérivée. utilise rpn,algebra
- EULERBER.PAS (en Pascal, compatible Free Pascal) Calcul des nombres d'Euler et de Bernoulli. utilise algebra
La programmation scientifique sous Linux
- Freepascal. Les
gens de ma génération ont appris la programmation avec le
Turbo Pascal de Borland.
Pour ceux là, le compilateur libre Freepascal est une bonne solution si on n'a pas de temps à perdre dans l'apprentissage d'un langage. - RPL/2.
Pour les amoureux de la HP28S (une autre petite madeleine...)
Remplace avantageusement le classique rpncalc. - Scilab Un
langage faiblement typé, orienté calcul vectoriel et
listes.
Bien pour avoir vite un programme qui tourne, ce qui explique qu'il soit prisé à l'oral de l'Agreg.
Comme son concurrent commercial, il n'est pas suffisant si on a vraiment besoin de vitesse (sauf à l'interfacer avec un autre langage, mais c'est plus chaud). - Julia
C'est actuellement mon chouchou. Je mets de gros espoirs sur ce langage, qui a une syntaxe proche de Scilab, avec une vitesse d'exécution comparable au C. C'est à mon avis un challenger sérieux pour Python, son compétiteur naturel avec qui je n'ai jamais accroché.
Quelques exemples de programmes que j'ai écrits en Julia, des simples et des plus compliqués.
Un livre sur Julia, à paraître bientôt. Edition du 12 octobre 2019: j'ai modifié les programmes pour les rendre compatibles avec la version 1.x. Le langage est maintenant stable et la compatibilité ascendante doit être respectée.- Le compte est bon
- simulation du processus de contact (outil ligne de commande).Utilise les packages ArgParse et LightGraphs
- simulation de percolation (outil ligne de commande).Utilise les packages ArgParse et LightGraphs
- modèle d'Ising (outil ligne de commande).
Utilise le package Argparse et le fichier ecris_eps.jl - aiguille de Buffon
- lancer de dés
- Un problème de dés et de chaînes de Markov
- un système de particules (utilise une structure de liste triée)
- Deux problèmes de dénombrement sur le groupe affine (utilise la surcharge de *)
- Icon
Autre langage orienté liste, il se prend vite en main
grâce à ses ressemblances avec d'autres langages.
Avantages: dispose d'un pseudo-compilateur et d'un compilateur, permet d'avoir facilement des fenêtres graphiques.
Inconvénient: peu répandu, peu de sources de documentation. L'installation des librairies nécessaires à la compilation est ardue.
De fait, dans la dernière version, le développement du compilateur a été abandonné pour se consacrer uniquement au pseudo-compilateur. - C/C++ A mon avis, un matheux n'a pas d'intérêt à apprendre le C. Il faut directement faire du C++
Programmation avec sorties graphiques sous Linux
C'est certainement ce qui m'a posé le plus de problèmes, et pour avoir discuté avec d'autres matheux qui aiment programmer, je ne suis pas le seul.
Le problème est que, contrairement à ce qui se passait à l'époque bénie du DOS, n'importe qui ne peut pas écrire n'importe où sur l'écran.
Il faut demander poliment la permission avant, ce qui implique de passer par des bibliothèques de plus ou moins haut niveau.
Si vous pouvez/acceptez de vous loger sous root sur votre machine (C'est_très_mal),
vous pouvez trouver des renseignements intéressants sur la page de Patrick Trau ou utiliser certaines librairies de Freepascal,
en sachant que cela pose des problèmes de sécurité et que votre carte graphique ne sera vraisemblablement pas exploitée au mieux.
Sinon, voici quelques solutions que j'ai expérimentées.
- Calcul et affichage dans un environnement user-friendly, par
exemple Scilab.
Avantages: l'affichage sous Scilab est facile et la sauvegarde sous divers types de fichiers image est possible (voir par exemple les fonctions xs2gif et xs2ppm).
Inconvénient: Le temps de calcul peut être prohibitif. - Calcul avec un langage compilé, sortie dans une matrice
d'un fichier texte récupéré ensuite par un
programme Scilab.
Avantages: mêmes avantages que dans le cas précédent.
Inconvénient: peut générer de très gros fichiers et le temps de lecture du fichier par Scilab est un peu long.
Un truc utile: comment lancer un programme scilab depuis la ligne de commande ou un fichier de script:
echo "exec('exemple.sce'); quit" | scilab -nw
lance scilab, exécute le programme exemple.sce, puis ferme scilab. - Calcul avec un langage compilé, sortie dans un fichier
image au format PPM.
Le format PPM est facile à générer, après on peut afficher avec le programme que l'on veut (avec xview par exemple).
Petit inconvénient: le fichier est un peu gros, mais il est facile après de le convertir en un autre format (avec ppmtojpeg par exemple) - c'est ainsi qu'a été fabriquée l'image en fond d'écran .
Vous trouverez sur http://netpbm.sourceforge.net/doc/ppm.html toutes les explications pour fabriquer un fichier au format PPM. - Calcul et affichage en direct en C/C++ grâce à
Xlib.
C'est ce que l'on souhaite faire évidemment pour faire des présentations qui en imposent.
Inconvénient: la programmation Xlib est difficile à apprendre.
Une bonne manière de faire est de s'inspirer des sources de la bibliothèque scientifique Xtoys.
Les programmes sont très bien faits, le seul regret est qu'ils soient en C, et non en C++, mais la traduction n'est pas difficile à faire.
Un exemple traduit par mes soins: Le modèle de Potts . Voici la version traduite en C++ et le code original.
Sur la page de Christophe Tronche, on trouve une traduction en HTML du Xlib Programming Manual.
Dessiner des graphes (par exemple des chaînes de Markov) sous Linux
- Tikz semble aujourdhui le projet le plus abouti pour faire des dessins avec Latex. De nombreux exemples et un bon livre.
- Graphviz. C'est l'idéal lorsqu'on veut vite avoir un résultat sans avoir une préférence particulière pour le placement des points.
Typiquement, je l'utilise pour décrire des algorithmes et écrire des exercices de chaînes de Markov.
Remarque importante: dot2tex permet de transformer les fichiers graphviz en code TikZ ou PSTricks.
- La bibliothèque Latex Gastex, à la différence de Graphviz permet (impose) de donner précisément la position des points.
Un inconvénient est que, comme beaucoup de packages graphiques Latex, il utilise des pstricks avec header,
ce qui pour l'instant est incompatible avec la génération de code pdf natif avec dvipdfm (la conversion avec ps2pdf reste évidemment possible). - La bibliothèque postscript de P. Kleiweg est destinée à ceux qui n'ont pas peur de mettre les mains dans le cambouis
et permet des variantes graphiques nombreuses.
Remarque importante: Sous Latex, ne pas utiliser la méthode avec chargement d'un header \special{header=FSAheader.pro} si on veut préserver la possibilité de générer du code pdf natif avec dvipdfm.
Programmation - divers
- Récupérer des paramètres en ligne de commande en C++. J'utilise la librairie argstream de Xavier Decoret.